Глава 3. Основы алгоритмизации и программирования (PDF)

Summary

This document provides an introduction to programming concepts using Pascal. It covers topics such as logical expressions, program examples, and boolean operations. The text includes code snippets and examples demonstrating program behavior. The document's focus on program logic and syntax makes it useful for those learning programming.

Full Transcript

## Глава 3. Основы алгоритмизации и программирования ### Пример 15.1. Примеры логических выражений: - 3 < 7 - логическое выражение, значение которого true; - 2+2*2 = 8 - логическое выражение, значение которого false; - abs(-5) > abs (3) - логическое выражение, значение которого true; - y >= sqr(x)...

## Глава 3. Основы алгоритмизации и программирования ### Пример 15.1. Примеры логических выражений: - 3 < 7 - логическое выражение, значение которого true; - 2+2*2 = 8 - логическое выражение, значение которого false; - abs(-5) > abs (3) - логическое выражение, значение которого true; - y >= sqr(x) - логическое выражение, значение которого можно определить, только зная значения переменных х и у. При х = 2 и у = 10 значение выражения true. При х = 10 и у = 2 - false. ### Проверим истинность этих выражений в программе: ```pascal var a1, a2, a3, a4, a5: boolean; x, y: integer; begin a1:= 3 < 7; writeln('al =', al); a2= 2+ 2 * 2 = 8; writeln('a2=', a2); a3: abs(-5) > abs (3); writeln('a3 =', a3); x := 2; y := 10; a4:= y > = sqr(x); writeln('a4 = ', a4); x := 10; y := 2; a5 := y >= sqr(x); writeln('a5 =', a5); end. ``` ### Результат работы программы: **Окно вывода** al = True a2 = False a3 True a4 True a5= False По умолчанию false < true. В языке программирования Pascal для работы с условиями определен логический тип данных boolean. Величины типа boolean, могут принимать два значения: - false (ложь) - true (истина). Значения false и true получают-ся в результате выполнения операций сравнения над числовыми данными. Для сравнения используют знаки, указанные в таблице. PascalABC | Операция | PascalABC | |---|---| | Равно (=) | = | | Не равно (7) | <> | | Больше (>) | > | | Меньше (<) | < | | Больше или равно | >= | | Меньше или равно (<=) | <= | Сравнивать можно константы, переменные, арифметические и логические выражения. **Логическое выражение** - выражение, принимающее одно из двух значений: true или false. Логические выражения можно присваивать переменным типа boolean, a также выводить их значения на экран: будет выведено слово false или true соответственно (пример 15.1). Условия для исполнителя являются частным случаем логических выражений. ### Пример 15.2. Написать программу, которая выведет на экран значение true или false в зависимости от того, является ли введенное число х четным или нет. **Этапы выполнения задания** І. Исходные данные: х (введенное число). ІІ. Результат: a (true или false). III. Алгоритм решения задачи. 1. Ввод исходных данных. 2. Вычисление значения логической переменной: Число является четным, если остаток от деления его на 2 равен нулю. Значение переменной а определяется значением выражения x mod 2 = 0. 3. Вывод результата. IV. Описание переменных: x integer, a boolean. **V. Программа:** ```pascal var x: integer; a: boolean; begin write ('Введите х ='); read(x); a := x mod 2 = 0; write ('Число четное ',a); end. ``` **VI. Тестирование** Запустить программу и ввести значение х = 6. **Результат:** **Окно вывода** Введите х = 6 Число четное True Запустить программу и ввести значения х = 11. **Результат:** **Окно вывода** Введите х = 11 Число четное False ### 15.2. Составные условия С высказываниями можно производить логические операции (НЕ, И, ИЛИ). Для логических переменных также определены логические операции, соответствующие операциям над высказываниями: not, and, or. **Логические выражения**, в которых наряду с простыми условиями (сравнениями) используются логические операции, называют **составными условиями**. ### Приведем таблицы истинности логических операций. | Логическая переменная | A | B | not A | A and B | A or B | |---|---|---|---|---|---| | True | True | True | False | True | True | | True | True | False | False | False | True | | True | False | True | False | False | True | | True | False | False | False | False | False | | False | True | True | True | False | True | | False | True | False | True | False | True | | False | False | True | True | False | True | | False | False | False | True | False | False | ### Пример 15.2. **V. Программа:** ```pascal var x: integer; a: boolean; begin write ('Введите х ='); read(x); a := x mod 2 = 0; write ('Число четное ',a); end. ``` **VI. Тестирование** Запустить программу и ввести значения х = 6. **Результат:** **Окно вывода** Введите х = 6 Число четное True Запустить программу и ввести значения х = 11. **Результат:** **Окно вывода** Введите х = 11 Число четное False В языке PascalABC реализована логическая операция xor (исключающее ИЛИ). Этой операции соответствует высказывание: «Только одно из двух высказываний может быть истинно». **Таблица истинности для операции xor:** | A | B | A xor B | |---|---|---| | True | True | False | | True | False | True | | False | True | True | | False | False | False | Все логические операции могут применяться к числам типа integer. Число рассматривается в двоичном представлении, и операции применяются к битам числа. Бит, равный 1, представляется как истина, а бит, равный нулю, как ложь. ### Пример 15.3. Определение порядка действий для выражения (а, д boolean, с, b integer): a or (cb) and d Первым выполняется сравнение c и b, затем логическая операция and, потом or. ### Пример 15.4*. Рассмотрим выражение: ab and c < d Если а, в, с, а имеет тип integer, то получим ошибку: «Операция '<' не применима к типам boolean и integer» (с помощью знака '<' нельзя сравнивать число и логическую переменную). Если переменные имеют тип real, то возникнет ошибка: «Операция 'and' не применима к типу real». Правильная запись выражения: (ab) and (c < d) Все вышеперечисленные ошибки возникают потому, что операция and обладает большим приоритетом по отношению к операциям <. Поэтому сначала будет производиться попытка выполнить операцию b and c, а затем сравнения. ### В логических выражениях могут встречаться как арифметические операции, так и логические. Порядок выполнения операций определяется их приоритетом: 1. not; 2. *, /, div , mod , and; 3. +, -, or; 4. =, <>, <, >, <=, >=. (Рассмотрите пример 15.3.) Операции с одинаковым приоритетом выполняются по порядку, слева направо. Для изменения порядка выполнения операций применяют скобки (пример 15.4). ### При составлении программ часто нужно строить отрицания сложным логическим выражениям. Для этого полезно использовать тождества, известные из алгебры логики (пример 15.5), и следующую таблицу: | Условие | Противоположное условие (отрицание условия) | |---|---| | a < b | a >= b | | a > b | a <= b | | a = b | a <> b | ### Пример 15.5. Построение отрицаний: not not a = a; not (a and b) = (not a) or (not b); not (a or b) = (not a) and (notb). Рассмотрим выражение not a < b с переменными а и в типа integer. Здесь операция not относится к переменной а, поэтому в двоичном представлении числа а биты, равные 1, будут заменены на 0, а биты, равные 0, на 1. Затем полученный результат сравнится с числом в. Для отрицания сравнения выражение нужно записать так: not (a < b). ### Пример 15.6. Написать программу, которая выдаст на экран значение true или false в зависимости от того, находится ли число В между числами А и С. **Этапы выполнения задания** І. Исходные данные: переменные А, В, С (вводимые числа). ІІ. Результат: rez (True или False). III. Алгоритм решения задачи. 1. Ввод исходных данных. 2. Вычисление значения логической переменной: Рассмотрим два случая: - Верно неравенство: A < B < C. Этому неравенству соответствует логическое выражение: (A <B) and (В < C). Присвоим переменной r1 значение этого выражения. - Верно неравенство: A > B > C. Этому неравенству соответствует логическое выражение: (A > B) and (В > С). Присвоим переменной r2 значение этого выражения. - Ответом на задачу будет значение логического выражения r1 or r2. 3. Вывод результата. IV. Описание переменных: A, B, C integer, r1, r2, rez boolean. Для работы с логическими величинами могут использоваться функции. **Функция Ord (порядковый номер значения)** позволяет преобразовать логическое значение в числовое: Ord(false) = 0, a Ord(true) = 1. **Функции Pred (предшествующее значение)** и **Succ (последующее значение)** позволяют преобразовывать логические значения: ? D := Pred(true); {D = false} E := Succ(false); {E = true} **V. Программа:** ```pascal var A, B, C: integer; r1, r2, rez: boolean; begin writeln('Введите А, В, C'); read(A, B, C); r1 := (A<B) and (B < C); r2 := (A > B) and (B > C); rez:= r1 or r2; write ('Число В между числами АиС- ',rez); end. ``` **VI. Тестирование.** Запустить программу и ввести значения А = 5, B = 0, C = -5. **Результат:** **Окно вывода** Введите А, В, С 5 0 -5 Число В между числами А и С True Запустить программу и ввести значения A = −2, B = -7, C = 5. **Результат:** **Окно вывода** Введите А, В, С -2 -7 5 Число В между числами А и С- False **VII. Анализ результатов.** Для полного тестирования программы нужно проверить все возможные случаи взаимного расположения A, B, C (их всего 6). ### Упражнения 1. Сформулируйте и реализуйте обратную zadacu для примера 15.2: для всех тех случаев, для которых в исходной zadacu было true, нужно вывести false и, наоборот, для всех тех случаев, в которых в исходной zadacu получалось false, получить true. 2. B PascalABC определена логическая функция odd(x). Значение этой функции true, если число х является нечетным, и false, если х четное. Измените программу priмера 15.2, используя функцию odd.