Лекція № 4 Тема: Логічний та рядковий типи даних План заняття Операції порівняння логічного типу Функції логічного типу Символьний тип даних Функції для роботи з символьним типом Операції порівняння логічного типу Логічні змінні можуть мати одне з двох значень: true (істинне) або false (хибне). Як і maxint, ці значення належать до наперед визначених сталих, тобто їх не треба описувати. Логічні змінні найчастіше використовують для керування послідовністю виконання операторів програми. Є три логічні операції, які, будучи застосовані до логічних операндів, приводять до результату типу boolean: and - логічна кон'юнкція; or- логічна диз'юнкція; not - логічне заперечення. У ТР є ще одна операція: хоr - додавання за модулем 2. Наприклад, якщо описати var х, у, z: boolean; то можна записувати вирази, які будуть мати логічні значення x and у or z not у and x х and (у or z) Послідовність виконання логічних операцій така: not, and, or. Для її зміни використовують дужки. Правила виконання логічних операцій (х і у- логічні змінні) наведені в табл. Таблиця істинності логічних операцій х у not x x and у х or у x xor y
Логічний (булів) результат дають також операції порівняння: <, <=, =, <>, >=, >, in. Операнди цих операцій можуть бути дійсного, цілого, а також логічного типу. Значення логічного типу можна порівнювати, оскільки прийнято, що false<true. До операндів дійсного типу не варто застосовувати операцію "дорівнює", оскільки умова може не виконуватися внаслідок неточного відображення дійсних чисел у пам'яті комп'ютера, а також помилок заокруглення під час обчислення виразів дійсного типу. Тому замість а=b ліпше записати abs(a-b)<E, де Е - деяке мале значення, що залежить від порядку значень а і b. Якщо їхній порядок невідомий, то Е є функцією одного з них, наприклад: abs(a-b)<abs(a*1E-6) - порівняння з точністю до 0.000001. Операції порівняння мають нижчий пріоритет виконання, ніж логічні операції, тому у разі потреби використовують дужки. Наприклад (цифрами позначена послідовність виконання операцій): 1 6 4 2 5 3 (-3>=5) or not (7<9) and (0<=3) Функції логічного типу Функції eoln і eof дають бульові значення. Їхніми параметрами можуть бути імена файлів. Якщо параметра нема, то за замовчуванням мають на увазі файл input (файл уведення). Функція eoln дає true, якщо з файлу введення надійшов кінець рядка; в усіх інших випадках - false. Функція eof дає true, якщо файл перебуває в стані "кінець файлу", тобто процес дійшов до кінця, в інших випадках - false. Спроба прочитати щось з файлу після того, як значення функції стало true, призведе до помилки. Тому перед читанням треба перевіряти кінець файлу: if eof then write('кінець файлу') else read(sym); Функція odd має цілочисловий аргумент; odd(i) дає true, якщо і непарне, і false, якщо і - парне. Якщо х - змінна логічного типу, то оператор процедури write(x) виведе TRUE або FALSE, залежно від значення змінної. Процедура read не може мати аргументів булевого типу. Символьний тип Значенням змінної символьного типу є символ - елемент деякої скінченної та упорядкованої множини символів. Така множина є в кожній обчислювальній системі, оскільки вона потрібна для обміну інформацією з системою. На жаль, нема єдиної стандартної множини символів, різноманітні системи відрізняються як самими символами, так і порядковими номерами. Однак стандартом мови Паскаль передбачено такі властивості множин: 1) кожний символ має порядковий номер; 2) десяткові цифри впорядковані за зростанням і йдуть одна за одною; 3) букви впорядковані за алфавітом, їхні номери не обов'язково йдуть підряд. Найчастіше застосовують множину символів ASCII (American Standard Code for Information Interchange). У програмах символьні сталі, що мають значення, записують між одинарними лапками: 'а' '*' '3.....(апостроф ставлять двічі). Функції для роботи з символьним типом Для відображення заданої множини символів номери і навпаки є дві функції: ord(C) - дає порядковий номер символу С в заданій упорядкованій множині символів; chr(i) - дає символ з номером і в цій множині. Нехай С1 і С2 мають символьний тип var С1, С2: char; Тоді якщо С1<>С2, то ord(C1)<>ord(C2). Над символьними змінними можна виконувати операції порівняння, причому С1<С2 еквівалентне ord(C1)<ord(C2). З останньої властивості випливає, що ord(T), ord('2'), ..., ord('9') - зростаюча послідовність чисел, що йдуть підряд. Звичайно в множинах ord('0')<>0. Обернена до ord функція chr має цілий аргумент, видає символьне значення і визначена тільки в діапазоні значень функції ord. Наприклад, нехай var і: integer; тоді chr(i) буде визначене, якщо є символ sym такий, що ord(sym)=i. У цьому випадку chr(i)=sym. Зокрема, якщо var і: integer; і відомо, що 0 < c f < 9, то відповідним символом буде chr(cf+ord('0')). Символи з вхідного файлу читають за допомогою стандартної процедури read (пропусками ігнорують, на відміну від уведення цілих і дійсних чисел): var sym: char; read (sym); Оператором процедури write(sym) записують символ у вихідний файл. Зокрема, оператор write(sym: р), де р - ширина поля, виведе пропуски в кількості р-1, і після того - символ sym; Оператор write(' ': р) виведе пропуски в кількості р.