p align="left">var A,B : real; i, N : integer; X, Y : array [1..5] of real; begin read (A, B, N); for i := 1 to N do begin read ( X [i] ); Y [i] := (A + B + X[i])/2; Write ( Y [i] ); end; end. Завдання 1: (масиви) Введення одномірного масиву і виведення у вигляді: а) вектора-рядка; б) вектора-стовпчика. a) Var M : array [1..10] of real; i : integer; begin i := 0; repeat i := i + 1; reat (M [i] ); until i =10 ; for i := 1 to 10 do write (X [i] : 5 : 2,''); end. b) Var M : array [1..10] of real; i : integer; begin i := 0; repeat i := i + 1; reat (M [i] ); until i =10 ; for i := 1 to 10 do writeln (X [i] : 5 : 2); end. 4. Стандартні модулі ТР. Їх призначення Модуль - це окремо транслюєма програмна одиниця. Підключення модуля до програми виконують за допомогою ключового слова: USES <ім'я модуля>. Основна частина засобів ТР розташована в стандартних модулях, які поставляються разом з компілятором. Існує вісім стандартних модулів: SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3, GRAPH3 Модуль SYSTEM - основний, в який входять всі процедури і функції стандартного Паскаля і ТР. Він підключається автоматично і не потребує запрошення USES. Модуль DOS - призначений для забезпечення інтерфейса з програмами ОС. Модуль CRT - містить засоби керування дисплеєм в текстовому режимі, клавіатурою, динаміком. За допомогою його процедур можна змінювати колір, створювати вікна, звукові тона. Модуль PRINTER - забезпечує зв'язок між процесором і принтером. Модуль GRAPH - містить 90 графічних процедур і функцій, які дозволяють відтворювати на екрані точки, відрізки, кола та ін.. фігури різних кольорів і розмірів; засоби замальовування та виводу тексту у графічному режимі. Модуль OVERLAY - розбиває великі програми на сегменти перекриття (оверлейні сегменти), які використовують загальну область пам'яті. Модуль TURBO3 i GRAPH3 - для сумісності з версією ТР 3.0. SYSTEM, CRT, DOS розміщені у файлі TURBO.TPL. GRAPH - окремий файл GRAPH.TPU. Всі модулі крім SYSTEM стають доступними після їх підключення: USES <ім'я модуля>. 5. Символьні масиви Символьний тип даних дозволяє працювати з окремими символами тексту. Для обробки більшої кількості текстових одиниць використовують символьні масиви або рядкові типи даних. Розглянемо одномірні масиви, які складаються з елементів символьного типу (Char). Наприклад: Var S: array [1..12] of char; Паскаль містить деякі додаткові засоби роботи з такими масивами: Конкретні значення символьних масивів записують за допомогою зображення рядка та використання їх в присвоюванні та передачі параметрів: S: = `Приклад рядка'; Зображення рядка будується з символів масиву і обмежується апострофами. Якщо необхідно задати апостроф, то його удвоюють {` ” '}. Допускають формування рядків з використанням десяткових кодів символів і спеціальних позначень: ( #7#17C^A^B…) для символьних масивів операцію “+” конкатенації (зчеплення, поєднання). Смисл операції полягає у формуванні нового символьного масиву, кількість елементів якого дорівнює сумі розмірів масивів - операндів, а значення елементів - елементи масивів, які розміщюються послідовно один за одним. Приклад: Var S1 : array [1..8] of char; S2 : array [1..5] of char; Begin S1 := 'рядковий'; S2 := 'масив'; Writln (S1+' '+S2); {результат: на екрані} end. Особливість: в операторах присвоювання рядків символьним масивам необхідна точна відповідність довжини рядків і розмірів масивів; операція конкатенація для символьних масивів не допускається у правій частині присвоювання. Приклад: S : S1+' '+S2; {помилка} У таких випадках необхідно використовувати рядки, тобто рядкові типи даних. 6. Визначення рядкового типу даних Рядкові типи даних є одним з розширень мови Паскаль, які найбільш використовуються. Рядковий тип узагальнює поняття символьних масивів, дозволяє динамічно змінювати довжину рядка. При використанні у виразах рядок обмежується апострофами. Кількість символів в рядку (довжина рядка) може динамічно змінюватись від 0 до 255. Для визначення рядкових даних використовується ідентифікатор STRING, за якими у квадратних дужках вказується максимальна довжина рядка. Якщо значення не вказане, то по замовченню довжина рядка встановлюється 255 байт. Приклад: Line: string [80]; Line 1: string ; Line 2: string [255]; В приведеному прикладі змінна Line може мати будь-яку послідовність символів (кожен з яких має стандартний тип char) довільної довжини в межах від 0 до 80 символів; Line1 і Line2 - від 0 до 255 символів. Таким чином, важливіша різниця між рядками і символьними масивами, що рядки можуть динамічно змінювати свою довжину. Зміну рядкового типу визначають у розділі у розділі опису типів, або безпосередньо у розділі опису змінних. Рядкові дані також можна використовувати у програмі як константу. Формат: type <ім'я типа > = string [max довжина рядка]; var < ідентифікатор > : <ім'я типа >; або var < ідентифікатор > : string [max довжина рядка]; Приклад: Const address = `пл. Соборна, 1'; Type Line = string [125]; Var S1 : Line; S2 : string; S3 : string [50]; Механізм динамічних рядків реалізований в мові Турбо-Паскаль достатньо просто. Для рядкових змінних пам'ять виділяється відповідно максимального значення, а використовується лише частина, яка реально зайнята символами рядка у даний час, тобто для N символів виділяється N+1 байт пам'яті, із яких N байт призначено для зберігання символів рядка, а 1 байт - для значення поточної довжини цього рядка: Елементи рядка нумеруються цілими числами, починаючи з 1. Це іноді використовують для визначення поточної довжини рядка. Наприклад: Line:= ` '; {пустий рядок} WriteLn (ORD (Line [0] )); {на екрані число 0} Line : =`ABCD'; WriteLn (ORD (Line [0])); {на екрані число 4} Однак, для визначення поточної довжини рядка, як правило, використовують стандартну функцію length, яке повертає ціле значення поточної довжини рядка. Але це ми розглянемо далі. У разі присвоювання рядковій змінній виразу з довжиною більше ніж максимально допустимо для даної змінної, то символи за межами максимальної довжини не використовуються (вилучаються). Ця ситуація не є помилковою, тому переривання виконання програми у даному випадку не відбувається. Наприклад: Var Line : string [4]; Begin Line:= ` дуже довгий рядок'; WriteLn (Line); Таким чином рядки можуть змінювати свою довжину. 7. Основні операції над рядковими даними Над рядковими даними виконують такі операції : 1.присвоювання (:=); 2.ввод (Read); 3.вивод(Write); 4.порівняння (відношення); 5.поєднання (зчеплення, конкатенації, - ,+). Перші три операції виконуються стандартно, без особливостей. Тому розглянемо дві останні операції. Операція конкатенації. Використовується для зчеплення декількох рядків в один, при чому довжина результуючого рядка не повинна перевищувати 255 символів (або вказану довжину N). Інакше останні символи будуть відкинуті. Приклади: st := `a'+'b'; st := st + `c'; writeLn (`st = `, st) {результат st =abc} var st : string [2]; begin st :='1' + `2' + `3'; writeLn (st) {на екрані 12} end. Операції порівняння (відношення). Проводить порівняння двох рядкових операндів за допомогою стандартних операторів: = , <>, >, <, >=, <=. Правила порівняння: проводиться з ліва-направо з урахуванням внутрішнього кодування таблиці символів ASCII. Рядок буде більшим, якщо перший не співпадаючий символ має більший номер. У менший по довжині рядок додаються символи значення CHR(0). Тому при однакових, символах короткий рядок завжди менше довгого рядка. Результат виконання операції завжди має логічний тип і приймає значення TRUE або FALSE. Приклади: Вираз результат 1) ` “ ` < `.' TRUE 2) `A' > `2' TRUE 3) `AB' = `A'FALSE 4) `ABC' > `AB' TRUE 5) `12' <'2' TRUE 8. Cтандартні засоби обробки рядків: процедури і функції Функції: 1) CONCAT(S1,S2,…,SN) - функція типа STRING. Виконує послідовне поєднання рядків S1,S2,…,SN , кожен з яких є вираз рядкового типу (STRING). Результатом є рядок не більше 255 символів. Дана функція еквівалентна операції конкатенації: `S1' + `S2' + `S3'… 2) COPY(st : STRING; index : INTEGER; count : INTEGER): STRING; або COPY (st, index, count). Функція копіює (повертає) частину рядка, виділеного з рядка st, довжиною count символів, починаючи з символу під номером index. LENGTH(st : STRING) функція типу INTEGER; повертає довжину рядка. POS(subst, st : STRING): BYTE. Функція шукає у рядку st рядок subst. Результатом є номер позиції, де рядок subst зустрічається перший раз. Якщо рядок subst не знайдено, то результатом буде 0 (нуль). UPCASE(ch) - функція типу CHAR. Повертає для символьного виразу ch, яке повинно представляти собою рядкову (маленьку) латинську букву, відповідно їй велику букву. Якщо значенням функції ch є будь-який інший символ (в тому числі рядкова буква російського алфавіту), функція повертає його без змін. Процедури: DELETE(st : STRING; index, count : INTEGER) або DELETE(st, index, count) - процедура вилучає (знищує) count символів у рядку st починаючи з символу під номером index. INSERT(subst : STRING; st :STRING; index : INTEGER) або INSERT(subst, st, index). - процедура вставляє рядок subst у рядок st, починаючи з символу під номером index. STR(X[:width[:decimals]];st:STRING) - процедура перетворює число Х в рядок символів st так, як це робить це робить процедура WRITELN перед виводом. Параметри width і decimals (якщо вони присутні, тобто дужки [] показують на необов'язковість цих параметрів) задають формат перетворення: загальну ширину поля для представлення числа Х(width) та кількість символів дрібної частини (decimals), якщо X : REAL. VAL(st, x, code) - процедура перетворює рядок символів st в значення числової змінної X (визначеного типу). Параметр code =0, якщо перетворення пройшло успішно, тоді X дорівнює результату перетворення. Якщо виявляється помилковий символ у рядку st, то значення Х не змінюється, а code дорівнює номеру позиції з помилковим символом. Приклади: Var x: real; y: integer; st, st1 : string; begin st: = concat (`12', `345'); {рядок st містить 12345} st1: = copy (st, 3, Length(st)-2); {st1 містить 345} insert (`-' , st1, 2); {рядок st1 містить 3-45} delete (st, pos(`2', st), 3); {рядок st містить 15} str (pi : 6 : 2, st ); {рядок st містить 3,14} val (`3.1415', x, y); {y містить 2, х без змін} end. Висновок Таким чином над рядками можна виконувати операції присвоювання, порівняння, з'єднання (конкатенації), введення та виведення. Для цього використовують широкий набір процедур та функцій.
Страницы: 1, 2
|