- •2.1. Теоретичні відомості 20
- •Передмова
- •Лабораторна робота № 1
- •1.1. Теоретичні відомості
- •1.1.1. Система вiкон середовища
- •1.1.1.1. Вікна редагування
- •1.1.1.2. Вікна діалогу
- •1.1.1.3. Інформаційні вікна
- •1.1.1.4. Вікна меню
- •1.1.1.5. Робота з меню
- •1.1.1.5.1. Меню роботи з файлами (File)
- •1.1.1.5.2. Меню редагування (Edit)
- •1.1.1.5.3. Меню пошуку інформації (Search)
- •1.1.1.5.4. Меню виконання програми (Run)
- •1.1.1.5.5. Меню компіляції (Compile)
- •1.1.1.5.6. Меню відлагодження (Debug)
- •1.1.1.5.7. Меню вiкон (Window).
- •1.1.1.5.8. Меню інформаційної допомоги (Help)
- •1.1.1.5.9. Локальне меню.
- •1.1.2. Основні прийоми роботи в середовищі
- •1.2. Завдання
- •1.3. Контрольні запитання з теми
- •Лабораторна робота № 2
- •2.1. Теоретичні відомості
- •2.1.1. Загальна структура Pascal-програми
- •2.1.1.1. Заголовок програми
- •2.1.1.2. Описова частина Pascal-програми
- •2.1.1.2.1. Розділ позначок (міток)
- •2.1.1.2.2. Розділ констант
- •2.1.1.2.3. Розділ типів
- •2.1.1.2.3.1. Цілочисельний тип
- •2.1.1.2.3.2. Дійсний тип
- •2.1.1.2.4. Розділ опису змінних
- •2.1.2. Арифметичнi вирази та операцiї
- •2.1.2.1. Арифметичні функції
- •2.1.2.2. Скалярні функції
- •2.1.2.3. Арифметичні операції мови Pascal
- •2.1.2.4. Правила запису арифметичного виразу
- •2.1.3. Простi оператори
- •2.1.3.1. Оператор присвоєння
- •2.1.3.2. Пустий оператор
- •2.1.4. Введення та виведення в Pascal
- •2.1.4.1. Процедури введення
- •2.1.4.2. Процедури виведення
- •2.4.3. Формати оператора виведення
- •2.2. Завдання
- •2.3. Контрольні запитання з теми
- •3.1.3. Перелічувальний тип
- •3.1.4. Вирази та операцiї вiдношення
- •3.1.5. Логiчнi вирази та операції
- •3.1.6. Структуровані оператори
- •3.1.6.1. Складений оператор
- •3.1.6.2. Умовні оператори
- •3.2. Завдання
- •3.3. Контрольні запитання з теми
- •Лабораторна робота № 4
- •4.1. Теоретичні відомості
- •4.1.1. Iнтервальний тип
- •4.1.2. Масив (регулярний тип)
- •4.1.3. Оператори повтору
- •4.1.4. Використання стандартний процедур Break і Continue в операторах циклів repeat, while та for
- •4.2. Завдання
- •4.3. Контрольні запитання з теми
- •Лабораторна робота № 5
- •5.1. Теоретичні відомості
- •5.1.1. Стрінговий тип (тип літерний рядок)
- •5.1.2. Стрінгові вирази
- •5.2. Завдання
- •5.3. Контрольні запитання з теми
- •Лабораторна робота № 6
- •6.1. Теоретичні відомості
- •6.1.1. Операції з даними перелічувального типу
- •6.1.2. Завдання
- •6.2.1. Множини
- •6.2.1.1. Операції з множинами
- •6.2.2. Завдання
- •6.2. Контрольні запитання з теми
- •Лабораторна робота № 7
- •7.1. Теоретичні відомості
- •7.1.1. Записи з варiантами
- •7.2. Завдання
- •7.3. Контрольні запитання з теми
- •Лабораторна робота № 8
- •8.1. Теоретичні відомості
- •8.1.1. Ініціалізація графічного режиму
- •8.1.2. Системи координат
- •8.1.3. Вибір кольорів в графічному режимі
- •8.1.4. Завдання стилів ліній та заливки контурів
- •8.1.5. Виведення тексту в графічному режимі
- •8.1. 6. Процедури для рисування фігур
- •8.2. Завдання
- •8.3. Контрольні запитання з теми
- •Лабораторна робота № 9
- •9.1. Теоретичні відомості
- •9.1.1. Процедури користувача
- •9.1.2. Функцii користувача
- •9.1.3. Параметри
- •9.1.4. Рекурсивні підпрограми
- •9.1.5. Область дії ідентифікаторів
- •9.2. Завдання
- •9.3. Контрольні запитання з теми
- •Лабораторна робота № 10
- •10.1. Теоретичні відомості
- •10.1.1. Стандартні процедури для текстових файлів
- •10.1.2. Функції для роботи з текстовими файлами
- •10.1.3. Приклад обробки інформації в текстових файлах
- •10.2. Завдання
- •10.3. Контрольні запитання з теми
- •Лабораторна робота № 11
- •11.1. Теоретичні відомості
- •11.1.1. Стандартні процедури обробки файлів з типом
- •11.1.2. Стандартні функції обробки файлів з типом
- •11.1.3. Приклад обробки інформації в файлах з типом
- •11.2. Завдання
- •11.3. Контрольні запитання з теми
- •Додаток 1 Повідомлення про помилки Повідомлення про помилки періоду компіляції
- •Повідомлення про помилки, що виникають під час виконання програми
- •Помилки, що виявляються dos
- •Помилки введення - виведення
- •Критичні помилки
- •Фатальні помилки
- •Додаток 2 Методичні вказівки до виконання лабораторних робіт та написання звітів
- •Додаток 3 Зразок виконання звіту до лабораторної роботи Лабораторна робота № 7.
- •Література
5.1. Теоретичні відомості
5.1.1. Стрінговий тип (тип літерний рядок)
Літерний рядок являє собою послідовність символів. Оскільки кожний окремий символ належить до типу Char, літерний рядок, або стрінг (String) можна подати як сукупність, або масив однорідних елементів типу Char. Стрінг може виступати в програмі як константа, або як змінна. Константа-стрінг подається або за допомогою ідентифікатора в розділі опису констант: Const name='Jack'; або безпосередньо записом у виді послідовності символів обмежених апострофами: Writeln('Кінець програми');
Кількість символів в літерному рядку (довжина рядка) лежить в межах 0-255. Літерний рядок може використовуватися як змінна, яка попередньо повинна бути описана. Формат опису стрінгової змінної в розділі опису змінних має вид:
Var
ідентифікатор : String[ML];
де ідентифікатор – ім’я літерної змінної, String – службове слово, ML – максимальна довжина (кількість символів) даного літерного рядка. Наявність ключового слова String без вказання розміру означає максимальний розмір рядка (255 символів).
Приклад: Var
line : String [30];
Окрім безпосереднього опису стрінгової змінної в розділі Var, можна ввести спочатку стрінговий тип (літерний рядок обмеженої довжини) в розділі опису типів, а потім звертатися до цього типу у розділі Var.
Приклад: Тype
ST = String [80]; Var s1, s2, s3 : ST;
В даному випадку ST – це введений нами тип String обмежений 80 символами; величини s1, s2, s3 належать до цього типу. Тип ST можна було б, подати в виді масиву Сhar: Type ST = array [1..80] of Сhar;
Оскільки змінна стрінг являє собою послідовність символів, Pascal надає можливість (так само як в масиві) звертатися до кожного окремого символа в літерному рядку за форматом ідентифікатор [і], де ідентифікатор – ім’я стрінг-змінної, і – індекс (номер елемента в стрінгу), 0 < і < N, де N – довжина рядка.
Для визначення величини пам`яті в байтах, необхідної для розміщення стрінга в ОЗП, до значення максимальної величини додається одиниця. Додат-ковий байт розміщується на початку рядка (в елементі з індексом [0]). В цьому елементі записується дійсна довжина літерного рядка, записаного в даний момент по вказаному імені.
5.1.2. Стрінгові вирази
Вирази, в яких операндами є стрінгові константи, змінні та функції, називаються стрінговими виразами. Над стрінгами виконуються такі операції:
Присвоєння.
Приклад:
Var St1 : String [6];
St1:='інститут';
Значення St1 обмежуються лише 6 символами і становить 'інстит.'
Об’єднання.
Приклад:
St1:='Група '; St2:='МІ';
St:=St1+St2; Write (st);
Результат: Група МІ
До окремих символів літерного рядка можна звертатися за номером (індексом) даного символа в рядку:
Приклад:
St:='Група'; St[1]:='Т'; Write (St);
Результат: Трупа.
Для обробки літерних рядків в Паскаль-системі є такі стандартні функції:
Copy(St, Pos, N) – виділяє із стрінга St підрядок довжиною N символів, починаючи з позиції Pos.
Приклад: Write(Copy('трансформатор'; 6, 5)); друкує: фoрма.
Аналогом цієї функції в Бейсіку є MID$(St,Pos,N);
Concat(St1, St2,...,StN) – виконує об'єднання рядків St1,...,StN в тому порядку, в якому вони записані.
3. Length(St) – обчислює справжню(в символах) величину St.
Аналогом цієї функції в Бейсіку є функція Len(St).
Pos(St1, St2) – визначає номер позиції, з якої St1 входить в St2. Якщо входження відсутнє – результат рівний нулю.
Приклад: Pos('форма','трансформатор') => 6.
Аналогом цієї функції в Бейсіку є функція INSTR.
Крім стандартних функцій в Pascal для обробки стрінгових величин використовують такі стандартні процедури:
1. Str(N,St) – перетворює числове значення N в стрінг St.
Аналогом цієї процедури є в Бейсіку функція N=Str$(St).
Val(St,N,Cod) – перетворює стрінг St в величину цілого, або дійсного типу і вміщує результат в N. St не повинен містити пробілів на початку та кінці. Cod – цілочисельна змінна, яка рівна 0, якщо перетворення пройшло корректно, без помилок. В разі помилки в перетворенні, при наявності нечислового символа в St, Cod містить номер позиції першого помилкового символа. N при цьому невизначено.
Аналогом цієї процедури в Бейсіку є функція N=Val(St).
Delete(St,Pos,N) – процедура вилучення N символів рядка St, починаючи з позиції Pos. При Pos>255 виникає помилка.
Приклад: St="аввгд"; Delete(St,4,2); Результат: "авве".
4. Insert(Str1,Str2,Pos) – вставка рядка Str1 в рядок Str2, починаючи з позиції Pos.
Приклад:
Var S1,S2 : String[12];
S1:=' МІ-'; S2:='Група 31'; S3:=Inster(S1,S2,6)
Результат: 'Група МІ-31',
5. UpCase(Ch) – функція, яка перетворює малу літеру Ch в велику. Параметр і результат мають літерний тип. Функція обробляє літери лише латинського алфавіту.
Приклад: Ch:='а'; B:=UpCase(Ch); Результат: 'A'.
Серед множини операцiй над лiтерними рядками найбiльш поширеними є об'єднання, обчислення довжини тексту, копіювання фрагмента тексту, пошук фрагмента тексту, вирiзування фрагмента з тексту.
Введемо такі позначення:
S – змінна типу String PASCAL-програми;
Q – змінна типу String PASCAL-програми (фрагмент тексту);
P – позиція літерної змінної;
N – кількість символів.
Операцiя об'єдання, як вказувалось вище, позначаеться на PASCAL знаком "+", наприклад: S:=S+Q;
Деякі інші, найбільш поширенні операції над літерними рядками, подані в таблиці7.
Таблиця 7
Операція |
Функції Pascal |
Довжина рядка Копія фрагмента Пошук фрагмента Заміщення фрагмента Вставлення фрагмента Вилучення фрагмента |
N:=Length(S) Q:=Copy(S,P,N) P:=Pos(Q,S) - Insert(Q,S,P) Delete(S,P,N) |
Побудову конкретних програм обробки текстiв на мові PASCAL розглянемо на прикладах.
Приклад 1:
Скласти програму для перевiрки того, чи дана лiтерна змiнна є "перевертнем" (так звуться слова, що читаються однаково з лiва на право i з права на лiво).
На PASCAL програма запишеться так:
Program Turn;
Var S, Q : String;
i : Byte;
BEGIN
Writeln('Введiть рядок');
Readln(S);
Q:='';
For i:=1 to Length(S) do Q:=Copy(S,i,1)+Q;
If S=Q then Writeln('Лiтерний рядок ',S,' перевертень.')
else Writeln('Лiтерний рядок ',S,' не перевертень.')
END.
Приклад 2:
Скласти програму, яка пiдраховуе, скiльки разiв в даному словi X (як його частина) зустрiчаеться деяке слово Y.
Розглянемо варіант розв'язку цієї задачі на мовi PASCAL:
Program Search;
Var S, Q, W : String;
K, N, P : Byte;
BEGIN
Writeln('Введiть рядок ');
Readln(S);
Writeln('Введiть фрагмент рядка ');
Readln(Q); W:=S; K:=0;
While Pos(Q,W)>0 do
begin
Delete(W,Pos(Q,W),Length(Q));
K:=K+1
end;
Writeln('В лiтерний рядок ',S, ' фрагмент ',Q,' входить ',K,' разiв')
END.
Тут використовується допоміжний літерний рядок W, з якого пос-лідовно вилучаються фрагменти Q.
Приклад 3:
Вважаючи словом групу символiв, роздiлених пробiлами (всерединi слова пробiли вiдсутнi), вивести на екран всі слова рядка.
На PASCAL програма запишеться так:
Program Print_Word;
Var i : Byte;
S, Q : String;
Begin
Writeln('Введiть рядок');
Readln(S);
i:=1;
Repeat
Q:='';
While (S[i]<>' ') and (i<=Length(S)) do
begin
Q:=Q+S[i];
i:=i+1
end;
if Q<>'' then Writeln(Q);
i:=i+1
Until i>Length(S);
End.
