Pascal-Паскаль
Программирование. Логические типы данных Pascal-Паскаль
- Скачено бесплатно: 27152
- Куплено: 414
- Pascal-Паскаль->Программирование. Логические типы данных Pascal-Паскаль
Программирование. Логические типы данных Pascal-Паскаль
Логические типы данных Pascal-Паскаль
В Турбо Паскале логический тип данных носит название BOOLEAN. Значением логического типа может быть одна из двух констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:
Ord(false)=0
Ord(true)=1
False Succ(false)=true
Pred(true)=false
Все реализации языка Pascal, в том числе и Turbo Pascal, вплоть до версии 6.0 содержали только один логический тип данных Boolean, элементы которого могут принимать лишь два логических значения: True (истина) и False (ложь). В Turbo Pascal версии 7.0 добавлены еще три логических типа данныхByteBool, WordBool и LongBool.
| Название логического типа данных | Значению False соответствует | Значению True соответствует | Размер памяти для логического типа данных |
|---|---|---|---|
| Boolean | Число 0 | 1 | 1 байт |
| ByteBool | Число 0 | Любое число, отличное от 0 | 1 байт |
| WordBool | Число 0 в обоих байтах | 2 байта | |
| LongBool | Число 0 во всех байтах | 4 байта |
Отметим, что новые логические типы данных были введены для обеспечения совместимости разрабатываемых программ с Windows, в которой значению False соответствует 0, а значению True – любое, отличное от 0, число.
Логические переменные должны быть описаны предложением:
Var <имя_переменной>: boolean;имя_переменной>
Величины логического типа данных можно присваивать, выводить, но нельзя вводить процедурой read.
Пример переменных с булевым значением
Логические выражения
Логические выражения (условия) – это выражения, которые могут принимать лишь одно из двух значений: true (истина) или false (ложь). Для построения логических выражений используются операции отношения, которые обозначаются знаками: = (отношение на равенство), <> (отношение на неравенство), < (отношение меньше), >(отношение больше), = (отношение больше или равно).
Сложные условия составляются из простых с помощью логических операций: and (логическое «И»), or (логическое «ИЛИ») и not (логическое «НЕ»). При составлении сложных условий операнды логического выражения берутся в скобки (это важно!).
Пример логических выражений:
При вычислении логических выражений операции выполняются в следующем порядке: not, and, or, операции отношения, арифметические операции. Если порядок выполнения операций нужно изменить, то применяют скобки.
Программирование
Исходники Pascal (127)
Справочник
Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту
Счетчики
2008—2024 © pascal.helpov.net | All Rights Reserved
Условный оператор
Проверьте истинность второго отношения при подстановке следующих значений:
Определение. Выражение, о котором после подстановки в него значений переменных можно сказать, истинно (верно) оно или ложно (неверно), называется булевым (логическим) выражением.
Примечание. Название “булевы” произошло от имени математика Джорджа Буля, разработавшего в XIX веке булеву логику и алгебру логики.
Определение. Переменная, которая может принимать одно из двух значений: True (правда) или False (ложь), называется булевой (логической) переменной. Например,
| К:=True; Flag:=False; Second:=a+sqr(x)>t |
Задача. Вычислить значение модуля и квадратного корня из выражения (х-у).
Для решения этой задачи нужны уже знакомые нам стандартные функции нахождения квадратного корня — Sqr и модуля — Abs. Поэтому Вы уже можете записать следующие операторы присваивания:
| Koren:=Sqrt(x-y); Modul:=Abs(x-y) |
В этом случае программа будет иметь вид:
| Program Znachenia; Uses Crt; Var x, y : integer; Koren, Modul : real; Begin ClrScr; write (‘Введите значения переменных х и у через пробел ‘); readln (x, y); Koren:=Sqrt(x-y); Modul:=Abs(x-y); write (‘Значение квадратного корня из выражения (х-у) равно ‘, Koren); write (‘Значение модуля выражения (х-у) равно ‘, Modul); readln; End. |
Казалось бы, задача решена. Но мы не учли области допустимых значений для нахождения квадратного корня и модуля. Из курса математики Вы должны знать, что можно найти модуль любого числа, а вот значение подкоренного выражения должно быть неотрицательно (больше или равно нулю).
Поэтому наша программа имеет свою допустимую область исходных данных. Найдем эту область. Для этого запишем неравенство х-у>=0, то есть х>=у. Значит, если пользователем нашей программы будут введены такие числа, что при подстановке значение этого неравенства будет равно True, то квадратный корень из выражения (х-у) извлечь можно. А если значение неравенства будет равно False, то выполнение программы закончится аварийно.
Задание. Наберите текст программы. Протестируйте программу со следующими значениями переменных и сделайте вывод.
- х=23, у=5;
- х=-5, у=15;
- х=8, у=8.
Каждая программа, насколько это возможно, должна осуществлять контроль за допустимостью величин, участвующих в вычислениях. Здесь мы сталкиваемся с разветвлением нашего алгоритма в зависимости от условия. Для реализации таких условных переходов в языке Паскаль используют операторы If и Case, а также оператор безусловного перехода Goto.
Рассмотрим оператор If.
Для нашей задачи нужно выполнить следующий алгоритм:
если х>=у,
то вычислить значение квадратного корня,
иначе выдать на экран сообщение об ошибочном введении данных.
Запишем его с помощью оператора If. Это будет выглядеть так.
| if x>=y then Koren:=Sqr(x-y) else write (‘Введены недопустимые значения переменных’); |
Теперь в зависимости от введенных значений переменных х и у, вычисление квадратного корня может выполняться или не выполняться.
В общем случае полная форма конструкции условного оператора имеет вид:
Условный оператор работает по следующему алгоритму.
Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется , расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется .
Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай.
Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin . End называется составным оператором.
| if then begin оператор 1; оператор 2; . end else begin оператор 1; оператор 2; . end; |
Определение. Составной оператор — объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).
| begin оператор 1; оператор 2; end; |
С учетом полученных знаний преобразуем нашу программу.
| Program Znachenia; Uses Crt; Var x, y : integer; Koren, Modul : real; Begin ClrScr; write (‘Введите значения переменных х и у через пробел ‘); read (x, y); if x>=y then begin Koren:=Sqr(x-y); Modul:=Abs(x-y); write (‘Значение квадратного корня из выражения (х-у) равно ‘, Koren); write (‘Значение модуля выражения (х-у) равно ‘, Modul); end else write (‘Введены недопустимые значения переменных’); readln; End. |
Составным оператором является и такой оператор
| begin S:=0; end. |
Cимвол “;” в данном случае разделяет оператор присваивания S:=0 и пустой оператор.
Пустой оператор не влечет никаких действий и в записи программы никак не обозначается.
Например, составной оператор
включает лишь один пустой оператор.
Если Вы обратили внимание, программа на языке Паскаль всегда содержит один составной оператор — раздел операторов программы.
Внимание! Перед служебным словом Else разделитель (точка с запятой) не ставится.
Отметим, что большинство операторов в программах на языке Паскаль заканчиваются точкой с запятой, но после некоторых операторов точка с запятой не ставится. Сформулируем общие правила употребления точки с запятой:
-
Каждое описание переменной и определение константы заканчиваются точкой с запятой.
Рассмотрим еще один пример.
Задача. Вывести на экран большее из двух данных чисел.
| Program Example1; Var x, y : integer; Begin writeln(‘Введите 2 числа ‘); readln(x,y); if x>y then writeln (x) else writeln (y); readln; End. |
Можно также использовать и сокращенную (неполную) форму записи условного оператора. Эта форма используется тогда, когда в случае невыполнения условия ничего делать не надо.
Неполная форма условного оператора имеет следующий вид.
Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются.
Задача. Составить программу, которая, если введенное число отрицательное, меняет его на противоположное.
| Program Chisla; Var x : integer; Begin writeln(‘Введите число ‘); readln(x); if x then x:=-x; writeln (x); readln; End. |
Типы данных в языке программирования Паскаль
Любая программа является совокупностью данных и алгоритмов их обработки, записанных с помощью операторов. Данные во время работы программы хранятся в оперативной памяти. Очевидно, исполнителю необходимы сведения о том, как они хранятся, какие действия над ними можно выполнять.
Тип данных, задаваемый при их описании, однозначно определяет форму внутреннего представления, диапазон допустимых значений и множество возможных операций.
Рассмотрим классификацию типов данных, придерживаясь систематизации, принятой в PascalABC.Net.
Простые типы
К простым типам в PascalABC.Net относят целые и вещественные типы, логический, символьный, перечислимый и диапазонный тип. Все простые типы за исключением вещественного называются порядковыми типами.
Целые типы
Определены несколько целых типов данных (см. Таблица 1), отличающихся диапазоном допустимых значений и наличием знака: старший двоичный разряд воспринимается как знаковый (для отрицательных чисел), либо как обычный разряд числа.
Таблица 1. Целые типы данных

Вещественные типы
Существует несколько вещественных типов данных, которые отличаются точностью и диапазоном представления (см. Таблица 2). Точность вещественного числа определяется длиной мантиссы, а диапазон значений – длиной порядка.
Таблица 2. Вещественные типы данных

Символьный тип
Символьный тип служит для представления элементов из допустимого набора (для реализации PascalABC.Net — кодировка Unicode). Для обозначения типа данных используется ключевое слово char . Под каждый символ в PascalABC.Net отводится 2 байта (в других реализациях языка Паскаль отводится 1 байт, поскольку в качестве элементов набора используется расширенная таблица ASCII).
Логический тип
Для обозначения логического типа используется ключевое слово boolean . Множество значений этого типа включает два значения: false (ложь) и true (истина). Под величину логического типа отводится в памяти 1 байт.
Перечисляемый тип
Часто при написании программ возникает необходимость использования связанных между собой именованных констант, имеющих различные значения (например, дни недели, месяцы в году и т. д.). В этом случае удобно воспользоваться перечисляемым типом данных, возможные значения которого задаются упорядоченным набором констант.
type typeName = (value1, value2, . valuen);
Диапазонный тип
Диапазонный (интервальный) тип применяется в случае, если необходимо использовать подмножество значений целого, символьного или перечислимого типа.
- var
- range: -100..100;
- intCh: ‘a’..’z’;
Тип, на основе которого строится подмножество, называется базовым. Занимаемое место в памяти машины значениями диапазонного типа определяется используемым базовым типом.
Структурированные типы
К структурированным типам в PascalABC.NET относят массивы, записи, множества и файлы. Эти типы данных будут рассматриваться далее в соответствующих уроках.
Copyright © 2014-2021, Урок информатики
Все права защищены
Pascal: Занятие № 4. Логический тип данных Boolean, поиск максимума и минимума в Паскале
![]()
Сайт labs-org.ru предоставляет лабораторные задания по теме для закрепления теоретического материала и получения практических навыков программирования на Паскале. Краткие теоретические сведения позволят получить необходимый для этого минимум знаний. Решенные наглядные примеры и лабораторные задания изложены по мере увеличения их сложности, что позволит с легкостью изучить материал с нуля. Желаем удачи!
Логический тип данных Boolean в Паскале
Мы уже научились писать программы, основанные на линейных алгоритмах, в Паскале. И даже уже составляем нелинейные алгоритмы — с ветвлением — в которых используются логические выражения, которые принимают значения true или false .
Значения логического типа:
TRUE
FALSE
В примере ниже, на экран выводится результат логического выражения:
1 2 3 4 5 6
var A: integer; begin A := 5; write(A > 0); end.
var A: integer; begin A := 5; write(A > 0); 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); end.
var A: integer; b: boolean; begin A := 5; b:=A > 0; write(b); end.
Пример: Рассмотрим пример работы с типом boolean в pascal:
1 2 3 4 5 6
var a:boolean; begin a:=true; if a=true then writeln ('истина') else writeln('ложь'); end.
var a:boolean; begin a:=true; if a=true then writeln (‘истина’) else writeln(‘ложь’); end.
Для создания сложных условий используются специальные логические операции: and , or , not и xor .
Задача Boolean 1. Дано целое положительное число. Проверить истинность высказывания: «оно является четным»
[Название файла: task_bool1.pas ]
Рассмотрим пример с использованием логической операции XOR :
Пример: Запросить два целых: X, Y. Проверить истинность высказывания: «Только одно из чисел X и Y является нечетным»
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.
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».
[Название файла: 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.
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 .
[Название файла: task_bool3.pas ]
Задача Boolean 4. Дано целое положительное. Проверить истинность высказывания: «Данное число является нечетным трехзначным».
Минимальное и максимальное число в Паскале.
[Название файла: task_bool4.pas ]
При организации поиска минимального или максимального числа среди ряда чисел всегда на помощь приходит старенький «бабушкин» алгоритм:
- Представим ситуацию, что мы жарим пирожки, и уже нажарили целую большую горку; теперь надо выбрать из них самый большой, т.е. в нашем случае максимальный.
- Берем верхний пирожок, т.е. первый, и говорим, что он пока самый большой и откладываем его в сторону.
- Затем берем второй и сравниваем с самым большим, если этот второй пирожок оказывается больше — откладываем его на место «бывшего самого большого» и говорим, что теперь он самый большой.
- Берем следующий и повторяем действия. Так осуществляем данную процедуру со всеми пирожками.
Иногда в качестве первоначального максимума назначается самое малое возможное число (в зависимости от контекста задачи). А в качестве минимума — напротив, самое большое возможное число. Например, если сказано, что необходимо найти максимальное / минимальное среди положительных чисел, меньших 1000, то:
max:=0; min:=1000;
max:=integer.MinValue;; // минимальное среди типа Integer min:=integer.MaxValue;; // максимальное среди типа Integer
max:=integer.MinValue;; // минимальное среди типа Integer min:=integer.MaxValue;; // максимальное среди типа Integer
PascalABC.NET :
Можно использовать стандартные функции max() и min() :
print(max(2,8)); // 8 print(min(2,8)); // 2
print(max(2,8)); // 8 print(min(2,8)); // 2
Рассмотрим теперь решение задачи на Паскале нахождения максимального числа:
Пример: В компьютер вводятся 10 чисел. Выводить максимальное из введенных чисел.
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13
var i, chislo, max:integer; begin // первое введенное число //сразу определяем как максимальное: readln(max); for i:=2 to 10 do begin readln (chislo); if chislo > max then max:= chislo end; writeln(max) end.
var i, chislo, max:integer; begin // первое введенное число //сразу определяем как максимальное: readln(max); for i:=2 to 10 do begin readln (chislo); if chislo > max then max:= chislo end; writeln(max) end.
1 2 3 4 5 6 7 8 9 10 11 12
begin // первое введенное число //сразу определяем как максимальное: var maximum:=readInteger(); for var i:=2 to 10 do begin var chislo:=readInteger(); // используем стандартную функцию max(): maximum := max(chislo,maximum); end; writeln(maximum) end.
begin // первое введенное число //сразу определяем как максимальное: var maximum:=readInteger(); for var i:=2 to 10 do begin var chislo:=readInteger(); // используем стандартную функцию max(): maximum := max(chislo,maximum); end; writeln(maximum) end.
Аналогично осуществляется поиск минимального из чисел.
Для лучшего понимания темы поиска максимального или минимального значения предлагаем посмотреть видео урок:
Задача Max 1. В танцевальном клубе участвуют 10 представительниц женского пола. Определите, может ли самая старшая из них быть матерью самой младшей (в таком случае разница в возрасте может составлять не менее 17 лет).
[Название файла: task_max1.pas ]
Задача Max 2. Найти минимальное и максимальное из 10 введенных чисел и вывести сумму их порядковых номеров.
[Название файла: task_max2.pas ]
Задача Max 3. Средняя продолжительность жизни лабораторной мыши – 10 лет. Найдите максимальный показатель продолжительности жизни у пяти белых мышей и у пяти мышей-альбиносов. У каких мышей показатель уровня жизни выше?
[Название файла: task_max3.pas ]
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме: