Логические операторы pascal. Логические типы данных

На занятии происходит знакомство с логическим типом Boolean в Паскале. Рассмотривается алгоритм того, как находится минимальное и максимальное число в Паскале


Сайт сайт предоставляет лабораторные задания по теме для закрепления теоретического материала и получения практических навыков программирования на Паскале. Краткие теоретические сведения позволят получить необходимый для этого минимум знаний. Решенные наглядные примеры и лабораторные задания изложены по мере увеличения их сложности, что позволит с легкостью изучить материал с нуля. Желаем удачи!

Мы уже научились писать программы, основанные на линейных алгоритмах, в Паскале. И даже уже составляем нелинейные алгоритмы — с ветвлением — в которых используются , которые принимают значения true или false .

Значения логического типа:

В примере ниже, на экран выводится результат логического выражения:

1 2 3 4 5 6 var A: integer ; begin A : = 5 ; write (A > 0 ) ; {Будет выведено True} end .

var A: integer; begin A:= 5; write(A > 0); {Будет выведено True} end.

Для записи результата логического выражения используется специальная логическая переменная, которая имеет в Паскале тип boolean и может также принимать одно из двух значений - true или false .

Посмотрим, как работает та же самая задача с логической переменной:

1 2 3 4 5 6 7 8 var A: integer ; b: boolean ; begin A : = 5 ; b: = A > 0 ; write (b) ; {Будет выведено True} end .

var A: integer; b: boolean; begin A:= 5; b:=A > 0; write(b);{Будет выведено True} end.

Пример: Рассмотрим пример работы с типом boolean в pascal:

var a:boolean; begin a:=true; if a=true then writeln ("истина") else writeln("ложь"); end.

Для создания сложных условий используются специальные : and , or , not и xor .

Задача Boolean 1. Дано целое положительное число. Проверить истинность высказывания: «оно является четным»

Рассмотрим пример с использованием логической операции XOR:

Пример: Запросить два целых: X, Y. Проверить истинность высказывания: «Только одно из чисел X и Y является нечетным»

program Boolean; var x,y: integer; c:boolean; begin write("Введите X, Y: "); read(x,y); c:= (Odd(x)) xor (Odd(y)); writeln("Только одна из переменных X и Y имеет нечетное значение - ", c); end.

Рассмотрим еще одно решение задачи в Паскале с использованием логической переменной:

Задача Boolean 2. Даны три целых числа: A, B, C. Проверить истинность высказывания: «B находится между числами A и C».

Рассмотрим решение более сложной задачи с переменной логического типа:

Пример: Дано трехзначное число. Проверить истинность высказывания: «Все цифры данного числа различны».

Показать решение:

1 2 3 4 5 6 7 8 9 10 11 12 13 const a= 348 ; var d_n, s_n, e_n: integer ; flag: boolean ; begin flag: = false ; s_n: = a div 100 ; d_n: = ((a mod 100 ) div 10 ) ; e_n: = a mod 10 ; if (s_n<>d_n) and (d_n<>e_n) and (e_n<>s_n) then flag: = true ; writeln (flag) ; end .

const a=348; var d_n, s_n, e_n: integer; flag:boolean; begin flag:=false; s_n:=a div 100; d_n:=((a mod 100)div 10); e_n:=a mod 10; if (s_n<>d_n) and (d_n<>e_n) and (e_n<>s_n) then flag:=true; writeln(flag); end.

Здесь каждый разряд получается путем использования операций деления нацело и взятия остатка от деления: s_n — это цифра сотого разряда, d_n — цифра десятого разряда, e_n — единицы.

Задача Boolean 3. Дано целое N > 0 . С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести TRUE , если нет - вывести FALSE .

Задача Boolean 4. Дано целое положительное. Проверить истинность высказывания: «Данное число является нечетным трехзначным».

Минимальное и максимальное число в Паскале

При организации поиска минимального или максимального числа среди ряда чисел всегда на помощь приходит старенький «бабушкин» алгоритм:

  • Представим ситуацию, что мы жарим пирожки, и уже нажарили целую большую горку; теперь надо выбрать из них самый большой, т.е. в нашем случае максимальный.
  • Берем верхний пирожок, т.е. первый, и говорим, что он пока самый большой и откладываем его в сторону.
  • Затем берем второй и сравниваем с самым большим, если этот второй пирожок оказывается больше — откладываем его на место «бывшего самого большого» и говорим, что теперь он самый большой.
  • Берем следующий и повторяем действия. Так осуществляем данную процедуру со всеми пирожками.

Иногда в качестве первоначального максимума назначается самое малое возможное число (в зависимости от контекста задачи). А в качестве минимума — напротив, самое большое возможное число. Например, если сказано, что необходимо найти максимальное / минимальное среди положительных чисел, меньших 1000, то:

max: = 0 ; min: = 1000 ;

Лабораторная работа № 3

Тема: Логический тип (boolean).

В языке Паскаль имеются две логические константы: TRUE(истина) и FALSE(ложь). Логическая переменная может принять любое из этих значений и имеет тип boolean. Логические данные широко используются при проверке правильности некоторых условий и при сравнении величин. Результат может оказаться “истинным” или “ложным”. Над логическими данными допускаются следующие операции:

Булевские операции:

Оператор

Операция

Тип операндов

Тип результата

отрицание

логическое И

логическое ИЛИ

логическое исключающее ИЛИ

Результаты операций над логическими данными сведены в таблицу:

(A) and (B)

(A) or (B)

Из данных булевского типа, операций сравнения и булевских операций строятся логические выражения, имеющие значения типа boolean. Например: (c10) or (d

При вычислении значений булевских выражений необходимо учитывать порядок выполнения булевских операций. Наивысший приоритет имеет операция NOT, затем операция AND и затем операция OR. Операции сравнения имеют самый низкий приоритет.

Переменные булевского типа описываются в разделе описания перемененных с помощью стандартного идентификатора BOOLEAN.

Пример: a, R1, f: boolean;.

В языке Паскаль существуют функции, которые принимают тип boolean:

1. ODD(A) - значение истинно, когда А - не четное число.

2. EOLN - значение истинно, если конец строки текстового файла.

3. EOF - значение истинно, если конец текстового файла.

Пример программы:

var a,b,c:integer;

writeln(‘введите три целых числа’);

write(‘s=’,s);

В результате выполнения программы переменной s присвоится значение TRUE или FALSE, в зависимости от того было ли логическое выражение ложным или истинным, и значение переменной s выведется на экран, т.е. на экране появится TRUE или FALSE.

Задания к лабораторной работе № 3.

Для выполнения лабораторной работы необходимо написать программы, которые печатают true или false в зависимости от того, выполняются или нет указанные условия:

    Для произвольных вещественных чисел a, b и c определить, имеет ли квадратное уравнение хотя бы одно вещественное решение.

    Определить, равна ли сумма двух первых цифр заданного четырехзначного числа сумме двух его последних цифр.

    Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа.

    Определить, есть ли среди первых трех цифр из дробной части заданного положительного вещественного числа цифра 0.

    Определить, есть ли среди цифр заданного трехзначного числа одинаковые.

    Даны три произвольных числа. Определить, можно ли построить треугольник с такими длинами сторон.

    Составить логическое уравнение, используя все логические операции с выводом на экран логической переменной.

    Определить, больше ли квадрат данного числа квадратного корня другого данного числа.

    Длины сторон выпуклого четырехугольника выражаются числами a,b,c,d. Определить можно ли в него вписать окружность.

Задания к лабораторной работе № 3.

Для выполнения лабораторной работы необходимо написать программы, которые печатают true или false в зависимости от того, выполняются или нет указанные условия:

    Для произвольных вещественных чисел a, b и c определить, имеет ли квадратное уравнение хотя бы одно вещественное решение.

    Определить, равна ли сумма двух первых цифр заданного четырехзначного числа сумме двух его последних цифр.

    Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа.

    Определить, есть ли среди первых трех цифр из дробной части заданного положительного вещественного числа цифра 0.

    Определить, есть ли среди цифр заданного трехзначного числа одинаковые.

    Даны три произвольных числа. Определить, можно ли построить треугольник с такими длинами сторон.

    Составить логическое уравнение, используя все логические операции с выводом на экран логической переменной.

    Определить, больше ли квадрат данного числа квадратного корня другого данного числа.

    Длины сторон выпуклого четырехугольника выражаются числами a,b,c,d. Определить можно ли в него вписать окружность.

Описание: var n: boolean;

Данные логического типа boolean могут принимать только два значения: true (истина) и false (ложь). Для значений логического типа допустимы операции сравнения , причем true > false .Также применяются 4 логических операции :

and логическое умножение

or логическое сложение

xor исключающее «или»

not отрицание

Правила выполнения логических операций определяются с помощью следующих таблиц истинности:

X and Y

X xor Y


Пример 1:

not (5>2) = false

(5>2) and (3<10) = true

(8<>9) or (4>5) = true

not (5=2) xor (3>2) = false

Пример 2:

При сравнении данных типа BOOLEAN учитывается внутреннее соглашение Турбо Паскаля, в соответствии с которым FALSE есть нулевой байт, a TRUE - байт с единицей в младшем разряде. Заметим, что функция ORD преобразует к целому не только символы, но и логические величины, поэтому

2.5 Ограниченные типы

На основе стандартных типов можно строить собственные типы, ограничивая диапазон возможных значений: 1..10, -100..10, ‘a’..’z’ и т.п.

Пример :

b: ‘a’..’z’;

b:=0; {ошибка: несоответствие типов – переменной символьного типа присваивается целое число}

a:=0; {ошибка: выход за границы диапазона 2..5}

2.6 Перечислимые типы

Образуются путем явного перечисления всех возможных значений, задаваемых именами. Например, для программы управления светофором, может быть определен следующий тип:

var svet: (red, yellow,green);

oper: (plus, minus);

Тип boolean – частный случай перечислимого типа.

2.7 Описание типов

Новые типы данных в Паскаль определяются посредством описаний, начинающихся со слова TYPE. Описание состоит из имени типа и значения типа, между которыми ставится знак «=».

Пример:

abc=’A’..’z’;

2.8 Преобразование типов

Как уже говорилось, тип переменной позволяет не только устанавливать длину ее внутреннего представления, но и контролировать те действия, которые выполняются над ней в программе. Контроль над использованием переменных еще на этапе компиляции программы - важное преимущество Турбо Паскаля перед другими языками программирования, в которых допускается автоматическое преобразование типов. В Турбо Паскале почти невозможны неявные (автоматические) преобразования типов. Исключение сделано только в отношении констант и переменных типа INTEGER (целые), которые разрешается использовать в выражениях типа REAL (вещественные). Если, например, переменные X и Y описаны следующим образом:

var х: integer;

то оператор

будет синтаксически правильным: хотя справа от знака присваивания стоит целочисленное выражение, а слева - вещественная переменная, компилятор сделает необходимые преобразования автоматически. В то же время оператор

будет неверным, так как автоматическое преобразование типа REAL (константа 2.0 содержит десятичную точку и, следовательно, принадлежит к типу REAL) в тип INTEGER в Турбо Паскале запрещено.

Таким образом, переменным можно присваивать значения только своего типа; единственное исключение: переменная вещественного типа, а значение – целого (в этом случае целое число будет преобразовано в вещественное с дробной частью, равной 0).

Разумеется, запрет на автоматическое преобразование типов еще не означает, что в Турбо Паскале нет средств преобразования данных. Они, конечно же, есть, но их нужно использовать явно. Для преобразования данных в языке существуют встроенные функции, которые получают в качестве параметра значение одного типа, а возвращают результат в виде значения другого типа. В частности, для преобразования REAL в INTEGER имеются даже две встроенные функции такого рода: ROUND округляет REAL до ближайшего целого, a TRUNC усекает REAL путем отбрасывания дробной части (см. п.1.5).

Например, ошибочным будет оператор

но правильным

х:= round(у/х);

(объявления переменных см. выше).

Например, для преобразования данных типа CHAR (символ) в целое число предназначена функция ORD, обратное преобразование INTEGER в CHAR осуществляет функция CHR.

Наличие двух операций деления есть еще одно проявление основополагающего принципа Турбо Паскаля: программист должен явно подтверждать компилятору, что он готов к возможным последствиям преобразования типов. Если, например, в языке Фортран используется выражение 1/2 , то результат этого выражения будет зависеть от того, переменной какого типа он будет присвоен: если N есть переменная целого типа, а Х- вещественного, то в программе на Фортране присваивания

дадут значения 0 для N и 0.5 для X. В Турбо Паскале такой двусмысленности нет: выражение 1/2 всегда имеет значение 0.5 и поэтому оператор

просто недопустим. В то же время допустимые в Турбо Паскале операторы:

И, наконец, об операциях отношения и логических операциях.

Над данными типа REAL, INTEGER, CHAR, STRING определены следующие операции отношения (сравнения):

<> - не равно;

< - меньше;

> - больше;

<= - меньше или равно,

>= - больше или равно.

В операциях сравнения должны участвовать однотипные операнды. Исключение сделано опять-таки в отношении REAL и INTEGER, которые могут сравниваться друг с другом. Результат применения операции отношения к любым операндам имеет тип BOOLEAN.

Выражения – это конструкции языка, которые задают порядок выполнения действий над элементами данных.

Выражение состоит из операндов (operand – элемент данных, участвующий в операции), объединенных знаками операций. Операндами могут быть константы, переменные и вызовы функций. Тип значения выражения определяется типом его операндов и выполняемыми над ними операциями. Например,

  • выражение: b > a + 10 ;
  • b - левый операнд, a + 10 - правый операнд, > - операция отношения; результат имеет логический тип.

Важно: величины, составляющие выражение, должны быть совместимых типов.

Операции могут быть унарными и бинарными. Унарная операция относится к одному операнду и записывается перед ним (например, -х ), бинарная – выражает отношение между двумя операндами и записывается между ними (например, a + b ). Операции определяют действия над операндами, выполняемыми в соответствии с приоритетами:

  • Унарные -, not, ...
  • Операции типа умножения: *, /, div, mod, and, …
  • Операции типа сложения: +, -, or, …
  • Операции отношения: =, =, …

Заметим, что если в выражении встречаются функции, то они вычисляются в первую очередь. Порядок выполнения операций можно изменить с помощью круглых скобок.

В текущем уроке разберем операции отношения, арифметические и логические операции, остальные - будем рассматривать по мере изучения материала.

Арифметические выражения и операции

Выражение, составленное из операндов целочисленных или вещественных типов, объединенных знаками арифметических операций и круглыми скобками, называется арифметическим.

Результат арифметического выражения может принимать целое или вещественное значение.

К арифметическим операциям относятся:

  • унарные операции: + , - для вещественных и целых чисел;
  • бинарные операции: +, -, *, / для вещественных и целых чисел;
  • бинарные операции: div, mod для целых чисел.

Выражения и операции отношения

Выражение, состоящее из операндов, связанных операцией отношения, называется выражением отношения.

Две операции отношения = и применяются ко всем типам, остальные - к операндам простого типа и к строкам.

Операции отношения, путем сравнения двух операндов, позволяют определить истинно (true ) или ложно (false) значение выражения.

Логические выражения и операции

Выражение, состоящее из операндов, связанных логическими операциями, называется логическим выражением.

Операндами логического выражения могут быть только данные типа boolean , результатом - значение истинно (true) или ложно (false) .

К логическим операциям, которые подчиняются стандартным правилам алгебры логики , относятся:

  • унарная операция not ;
  • бинарные операции and, or, xor .

Логические операции и, рассмотренные выше, операции отношения широко применяются для реализации разветвляющихся и циклических алгоритмов.

Здравствуйте, дорогие читатели нашего сайта! Сегодня, мы поговорим о логических переменных типа Boolean в Паскаль, логических операциях и решим пять задач.

Для чего нужна логика в Паскаль? Вы, я надеюсь, уже научились писать простейшие линейные программы, и сейчас, наверняка, задаетесь вопросом, как же написать нелинейную программу ? Для того чтобы программа была нелинейной в Паскале, как и в других языках программирования, используют логические выражения, которые принимают значения true или false . То есть, на место любого отношения в Паскале ставится true или false. Например,

Var A: integer; begin A:= 5; write(A > 0); {Будет выведено True.} end.

Список операторов отношения:

  • больше: >
  • меньше: <
  • больше либо равно: >=
  • меньше либо равно: <=
  • равно: =
  • неравно: <>

Для того чтобы записать результат логического выражения, нам требуется специальная переменная. Эта переменная будет иметь тип boolean, она может принимать два значения - true или false. Как создавать простые условие вы уже поняли, но как создавать сложные условия? Для этого используются специальные логические операции: and, or, not и xor. Давайте разберем каждую операцию отдельно и составим таблицы истинности. Примем за 1 - true, а за 0 - false.

And, или конъюнкция.


Логическое умножение, истинно только тогда, когда оба простых высказываний истинны.

Or, или дизъюнкция.

Истинно, если хотя бы одно простое высказывание истинно.

Xor, или строгая дизъюнкция.


Истинно, если ровно одно из двух простых высказываний истинно.

Not, или инверсия.


Если высказывание истинно, то его отрицание - ложь и наоборот.

Задачи Boolean.

Закрепим полученные знания, решив пару задачек.

. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».

Program Boolean1; var a: integer; begin write("Введите число A: "); read(a); writeln("Число A является положительным - ", a > 0); {Простое высказывание.} end.

. Дано целое число A. Проверить истинность высказывания: «Число A является нечетным».

Для того чтобы узнать, является ли данное число нечетным в Паскале предусмотрена специальная функция Odd, которая возвращает true , если число нечетное и false , если число четное.

Program Boolean2; var a: integer; b: boolean; begin write("Введите число A: "); read(a); b:= Odd(a); writeln("Число A является нечетным - ", b); { Можно обойтись и без b } end.

. Дано целое число A. Проверить истинность высказывания: «Число A является четным».

Для того чтобы узнать является ли число нечетным, используем уже известную нам функцию, затем инвертируем результат.

Program Boolean3; var a: integer; b: boolean; begin write("Введите число A: "); { 6 } read(a); b:= Odd(a); { False } writeln("Число A является четным - ", not b); { True } end.

. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Число B находится между числами A и C».

Program Boolean7; var a, b, c: integer; b1, b2: boolean; begin write("Введите число A, B, C: "); read(a, b, c); b1:= (B > A) and (B < C); b2:= (B > C) and (B < A); { Надо учитывать оба варианта } writeln("Число B находится между числами A и C - ", b1 or b2); end.

. Даны два целых числа: A, B. Проверить истинность высказывания: «Ровно одно из чисел A и B нечетное».

Используем xor.

Program Boolean10; var a, b: integer; c:boolean; begin write("Введите число A, B: "); read(a, b); c:= (Odd(a)) xor (Odd(b)); { Сколько скобок 🙂 } writeln("Ровно одно из чисел A и B нечетное - ", c); end.

. Дано четырехзначное число. Проверить истинность высказывания: «Данное число читается одинаково слева направо и справа налево».

Используем знания, полученные в уроке.

Итак, данная задача проверяет является ли введенное четырехзначное число палиндромом. Наверняка, самый известный палиндром - фраза Мальвины: «А роза упала на лапу Азора.» (Попробуйте прочитать это предложение справа налево)

Program Boolean23; var a, b, c, d, e, f: integer; b1, b2: boolean; begin write("Введите число четырехзначное число: "); read(e); a:= e div 1000; b:= e mod 1000 div 100; c:= e mod 100 div 10; d:= e mod 100 mod 10; f:= d * 1000 + c * 100 + b * 10 + a; writeln("Данное число является палиндромом - ", f = e); end.

На сегодня все! Не забывайте периодически заходить к нам на сайт, подписывайтесь и кликайте по кнопочкам!