урок №5
Пряме відношення до програмування має дисципліна, яка називається математичною логікою. Основу математичної логіки становить алгебра логіки, або числення висловів. Під висловом розуміється будь-яке твердження, відносно якого можна однозначно сказати, істинно воно або помилково. Наприклад, «Місяць - супутник Землі» - це правда, «5> 3» - це правда, «Москва - столиця Китаю» - помилково; «1 = 0» - помилково. Істина або брехня є логічними величинами. Логічні значення наведених вище висловлювань однозначно визначені; іншими словами, їх значення є логічними константами.
Логічне значення нерівності х <0, где х — переменная, является переменной величиной. В зависимости от значения х оно может быть либо истиной, либо ложью. В связи с этим возникает понятие логической переменной.
Основи формального апарату математичної логіки створив в середині XIX в. англійський математик Джордж Буль. У його честь числення висловів називають булевої алгеброю, а логічні величини - Булевського.
Поодинокі вислови можуть бути об'єднані в складові логічні формули за допомогою логічних операцій.
Є три основні логічні операції: заперечення, кон'юнкція (логічне множення) і диз'юнкція (логічне додавання).
Операція заперечення позначається в математичній логіці значком ¬ і Новомосковскется як частка не. Це одномісна операція.
Наприклад, ¬ (x = у) Новомосковскется «ні (х одно y)». В результаті вийде істина, якщо х не дорівнює у, і брехня, якщо х одно у. Заперечення змінює значення логічної величини на протилежне.
Операція кон'юнкції позначається і Новомосковскется як частка і. Це двомісна операція. Наприклад, (х> 0) (х <1) Новомосковскется «х больше 0 и х меньше 1». Данная логическая формула примет значение истина, если х
(0,1), і брехня - в іншому випадку. Отже, результат кон'юнкції - істина, якщо істинні обидва операнда. Знак операції диз'юнкції v Новомосковскется як частка або. Наприклад, (х = 0) v (х = 1) Новомосковскется «х дорівнює 0 або х дорівнює 1». Формула дає істину, якщо х - двійкова цифра (0 або 1). Отже, диз'юнкція дає в результаті істину, якщо хоча б один операнд - істина.
У Паскалі логічні значення позначаються службовими словами false (брехня) і true (істина), а ідентифікатор логічного типу - boolean.
Крім величин (констант і змінних) типу boolean логічні значення false, true приймають результати операцій відносини.
Операції відносини (рис. 18) здійснюють порівняння двох операндів і визначають, істинно або хибно відповідне відношення між ними.

Приклади запису відносин: х<у; a+b>= C / d; abs (m-n)<=l. Примеры вычисления значений отношений:

Логічні операції виконуються над операндами булева типу. Є чотири логічні операції: Not - заперечення; And - логічне множення (кон'юнкція); Or - логічне додавання (диз'юнкція). Крім цих трьох обов'язкових операцій в Турбо Паскалі є ще операція - виключає АБО. Її знак - службове слово Хоr. Це двомісна операція, яка в результаті дає значення істина, якщо обидва операнда мають різні логічні значення.
Операції перераховані в порядку убування пріоритетів. Результати логічних операцій для різних значень операндів наведені в табл. 3.5.

Операції відносини мають найнижчий пріоритет. Тому якщо операндами логічного операції є відносини, то їх слід укладати в круглі дужки. Наприклад, математичного нерівності 1 ≤ х ≤ 50 відповідає наступне логічне вираз:
Логічний вираз є логічна формула, записана на мові програмування. Логічний вираз складається з логічних операндів, пов'язаних логічними операціями і круглими дужками. Результатом обчислення логічного виразу є булева величина (false або true). Логічними операндами можуть бути логічні константи, змінні, функції, операції відносини. Один окремий логічний операнд є найпростішою формою логічного виразу.
Приклади логічних виразів (тут d, b, с - логічні змінні; х, у - речові змінні; k - ціла змінна):
Якщо d = true; b = false; c = true; x = 3.0; y = 0.5; k = 5, то результати обчислення будуть наступними:
У прикладі використана логічна функція odd (k). Це функція від цілого аргументу k, яка приймає значення true, якщо значення k непарне, і false, якщо k парне.
Логічний оператор присвоювання має структуру, представлену на рис. 19.

Приклади логічних операторів присвоювання:
2) b: = (x> y) and (k<>0);
3) c: = d or b and not (odd (k) and d).
Програмування розгалужень на Паскалі
Основні теми параграфа:
♦ оператор розгалуження на Паскалі;
♦ програмування повного і неповного розгалуження;
♦ програмування вкладених розгалужень;
♦ логічні операції;
♦ складні логічні вирази.
Оператор розгалуження на Паскалі
У мові Паскаль є оператор розгалуження. Інша його назва - умовний оператор, Формат повного оператора розгалуження наступний:
if <логическое выражение> then <оператор1>
Тут if - «якщо», then - «то», else - «інакше».
Програмування повного і неповного розгалуження
Порівняйте запис алгоритму БІД1 з попереднього параграфа з відповідною програмою.

Дуже схоже на переклад з української мови на англійську. Зверніть увагу на наступне відмінність: в програмі немає спеціального службового слова, що позначає кінець розгалуження. Тут ознакою кінця оператора розгалуження є крапка з комою. (Зрозуміло, залишати в програмі порожній рядок зовсім не обов'язково. Тут це зроблено тільки заради наочності.)
Простий формою логічного виразу є операція відносини. Як і в АЯ, в Паскалі допускаються всі види відносин (нижче вказані їх знаки):
<(меньше);>= (Більше або дорівнює);
> (Більше); = (Дорівнює);
<= (меньше или равно); <> (не дорівнює).
А тепер запрограмуємо на Паскалі алгоритм БІД2, в якому використано неповне розгалуження.

Знову все дуже схоже. Гілка else в операторі розгалуження може бути відсутнім.
Програмування вкладених розгалужень
Запишемо на Паскалі програму визначення більшого з трьох чисел, Блок-схема яка показана на рис. 6.6. Структура цього алгоритму - вкладені розгалуження. Алгоритм на АЯ (БІТ2) наведено в попередньому параграфі.


Зверніть увагу на те, що перед else крапка з комою не ставиться. Вся розгалужені частина структури алгоритму закінчується на точці з коми після оператора D: = C.
Складемо програму впорядкування значень двох змінних.

Цей приклад ілюструє наступне правило Паскаля: якщо на якійсь з гілок оператора розгалуження знаходиться декілька послідовних операторів, то їх потрібно записувати між службовими словами begin і end. Конструкція такого виду:
begin <последовательность операторов> end
називається складовим оператором. Отже, в описаній вище загальній формі розгалуження <оператор1> і <оператор2> можуть бути простими (один) і складовими операторами.
Нарешті, складемо ще один, третій варіант програми визначення більшого числа з трьох.
Неважко зрозуміти сенс цієї програми. Тут використані три послідовних неповних розгалуження. А умови розгалужень є складні логічні вирази, що включають логічну операцію and (І). З логічними операціями ви зустрічалися, працюючи з базами даних і з електронними таблицями.
Нагадаємо, що операція and називається логічним множенням або кон'юнкція. Її результат - «істина», якщо значення обох операндів - «істина». Очевидно, що якщо А> В і А> С, то А має найбільше значення і т. Д. У Паскалі присутні всі три основні логічні операції:
and - І (сполучення),
or - АБО (диз'юнкція),
not - НЕ (заперечення).
Складні логічні вирази
Зверніть увагу на те, що відносини, які пов'язують логічними операціями, полягають в дужки. Так треба робити завжди! Наприклад, потрібно визначити, чи є серед чисел А, В, С хоча б одне негативне. Це завдання вирішує наступний оператор розгалуження:
if (A<0) or (B<0) or (C<0)
then write ( 'YES') else write ( 'NO');
Вираз, справжнє для негативного числа, може бути записано ще й так:
Коротко про головне
Оператор розгалуження (умовний оператор) Паскаля має вигляд:
if <логическое выражение>
then <оператор1> else <оператор2>
На гілках умовного оператора можуть перебувати прості або складові оператори. Складовою оператор - це послідовність операторів, укладена між службовими словами begin і end.
У складних логічних виразах використовуються логічні операції: and, or, not.
Запитання і завдання
1. Як програмується на Паскалі повне і неповне розгалуження?
2. Що таке складовою оператор? В яких випадках складовою оператор використовується в операторі розгалуження?
3. Виконайте на комп'ютері всі програми, наведені в цьому параграфі.
4. Складіть не менше трьох варіантів програми визначення найменшого з трьох даних чисел.
5. Складіть програму сортування за зростанням значень в трьох змінних: А, В, С.
6. Складіть програму обчислення коренів квадратного рівняння за даними значенням його коефіцієнтів.