Содержание:
Логический тип данных Boolean в Паскале
Мы уже научились писать программы, основанные на линейных алгоритмах, в Паскале. И даже уже составляем нелинейные алгоритмы — с ветвлением — в которых используются логические выражения, которые принимают значения true
или false
.
Значения логического типа:
TRUE
FALSE
В примере ниже, на экран выводится результат логического выражения:
1 2 3 4 5 6 | 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. |
boolean
в pascal:1 2 3 4 5 6 | var a:boolean; begin a:=true; if a=true then writeln ('истина') else writeln('ложь'); end. |
Для создания сложных условий используются специальные логические операции: and
, or
, not
и xor
.
[Название файла: task_bool1.pas
]
Рассмотрим пример с использованием логической операции XOR
:
1 2 3 4 5 6 7 8 9 10 11 | 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. |
Рассмотрим еще одно решение задачи в Паскале с использованием логической переменной:
[Название файла: task_bool2.pas
]
Рассмотрим решение более сложной задачи с переменной логического типа:
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. |
Здесь каждый разряд получается путем использования операций деления нацело и взятия остатка от деления: s_n
— это цифра сотого разряда, d_n
— цифра десятого разряда, e_n
— единицы.
N > 0
. С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N
цифра «2». Если имеется, то вывести TRUE
, если нет — вывести FALSE
.
[Название файла: task_bool3.pas
]
Минимальное и максимальное число в Паскале.
[Название файла: task_bool4.pas
]
task_bool4.pas
]При организации поиска минимального или максимального числа среди ряда чисел всегда на помощь приходит старенький «бабушкин» алгоритм:
- Представим ситуацию, что мы жарим пирожки, и уже нажарили целую большую горку; теперь надо выбрать из них самый большой, т.е. в нашем случае максимальный.
- Берем верхний пирожок, т.е. первый, и говорим, что он пока самый большой и откладываем его в сторону.
- Затем берем второй и сравниваем с самым большим, если этот второй пирожок оказывается больше — откладываем его на место «бывшего самого большого» и говорим, что теперь он самый большой.
- Берем следующий и повторяем действия. Так осуществляем данную процедуру со всеми пирожками.
Иногда в качестве первоначального максимума назначается самое малое возможное число (в зависимости от контекста задачи). А в качестве минимума — напротив, самое большое возможное число. Например, если сказано, что необходимо найти максимальное / минимальное среди положительных чисел, меньших 1000, то:
max:=0; min:=1000;или
max:=integer.MinValue;; // минимальное среди типа Integer min:=integer.MaxValue;; // максимальное среди типа Integer
PascalABC.NET
:
max()
и min()
:
print(max(2,8)); // 8 print(min(2,8)); // 2 |
Рассмотрим теперь решение задачи на Паскале нахождения максимального числа:
Pascal | PascalABC.NET | ||||
|
|
Аналогично осуществляется поиск минимального из чисел.
Для лучшего понимания темы поиска максимального или минимального значения предлагаем посмотреть видео урок:
youTube
[Название файла: task_max1.pas
]
[Название файла: task_max2.pas
]
[Название файла: task_max3.pas
]
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:
В задача номер два ошибка в объявлении переменных. Они не совпадают использующимся.
спасибо, исправлено