- •Міністерство освіти і науки Україні
- •Закарпатський державний університет
- •Природничо-гуманітарний коледж
- •Методичні вказівки
- •До лабораторних робіт по дисципліні
- •Лабораторна робота № 1. Лінійні програми.
- •Короткі теоретичні відомості.
- •Структура програми.
- •Приклад розділу змінних
- •Тип даних Integer .
- •Тип даних Real.
- •Тип даних Сhar.
- •Тип даних Boolean (логічний).
- •Хід роботи
- •Контрольні питання.
- •Варіанти завдань.
- •Лабораторна робота № 2. Оператори повторення.
- •Короткі теоретичні відомості.
- •1. Оператор циклу з параметром.
- •2. Циклічні програми. Складність циклічної програми.
- •3. Оператори повторення While і Repeat.
- •4. Обмежені типи.
- •5. Мітки. Оператор переходу. Застосування оператора переходу для дострокового виходу з циклу.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 3. Масиви. Алгоритми сортування та пошуку.
- •Короткі теоретичні відомості.
- •1. Складні (складені) типи.
- •2. Регулярний тип. Масиви.
- •3. Пошук елемента в масиві.
- •4. Постановка задачі сортування.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 4 Рядки та засоби їх обробки. Короткі теоретичні відомості.
- •Хід роботи
- •Контрольні питання.
- •Лабораторна робота №5 Процедури та функції. Короткі теоретичні відомості.
- •1. Опис процедур.
- •2.Формальні параметри. Локальні і глобальні об’єкти.
- •3. Оператор процедури. Фактичні параметри.
- •4. Функції.
- •5. Рекурсивно-визначені процедури і функції.
- •Хід роботи
- •Контрольні питання.
- •Лабораторна робота № 5. Складні типи даних: записи. Короткі теоретичні відомості.
- •1. Записи.
- •2 .Записи з варіантами.
- •3.Оператор приєднання.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 6. Множини. Короткі теоретичні відомості.
- •1.Множинний тип.
- •2.Конструктор множини.
- •3. Операції і відношення.
- •4. Застосування множин у програмуванні.
- •Хід роботи.
- •Контрольні питання.
- •Лабораторна робота № 7 Файли. Управління файлами. Короткі теоретичні відомості.
- •Хід роботи.
- •Контрольні питання.
Лабораторна робота № 4 Рядки та засоби їх обробки. Короткі теоретичні відомості.
Рядки і засоби їх обробки.
Значенням рядкового типу даних є рядки. Стандарт мови передбачає використання рядків тільки як констант, що використовуються в операторах виведення Write, Writeln. У розширенні мови Turbo-Pascal рядковий тип даних визначений більш повно.
Визначення рядкового типу слідує діаграмі:
Тут ціле належить діапазону 1..255 і означає максимальну кількість символів у рядку цього типу. Якщо описання типу String використовується без вказівки максимальної кількості символів, це (за замовченням) означає, що під цей тип резервується 255 символів.
Наприклад:
Type Name = String[20]; { рядки з 20-ти символів }
Post = String; { рядки з 255-ти символів }
Процедури і функції типу String.
Над рядками визначена операція конкатенації “+”, результат якої - рядок, в якому операнди з’єднанні в порядку їх слідування у виразі. Наприклад:
'Turbo' + 'Pascal' = 'TurboPascal'; 'Turbo_' + 'Pascal ' + 'System' = 'Turbo_Pascal System';
Тому результатом виконання серії операторів
X := ' Приклад'; У := ' додавання '; Z := ' рядків' ;
Writeln(X + Y + Z); Writeln(Y + ' ' + Z + ' ' + X)
будуть виведені на екран рядки
Прикладдодаваннярядків
додавання рядків Приклад
Тип String допускає і пустий рядок - рядок, який не містить символів: EmptyStr := '' {лапки, що йдуть підряд}. Вона грає роль нуля (нейтрального елемента) операції конкатенації: EmptyStr + X = X + EmptyStr = X
Над рядками визначені також відношення (операції логічного типу)
" = ", " <> ", " < ", " > ", " <= ", " >= ".
Таким чином, кожний із рядкових типів упорядкований, причому лексикографічно. Це означає, що
а) порядок на рядках погоджений з порядком, заданим на символьному типі (Char);
б) порівняння двох рядків здійснюється посимвольно, починаючи з перших символів;
в) якщо рядок А є початком рядка В, то А < В;
г) пустий рядок - найменший елемент типу.
Наприклад:
а) 'с' < 'k', так як Ord(‘c’) < Ord(‘k’);
б) 'abс' < 'abk', так як перші два символи рядків співпадають, а порівняння третіх дає Ord(‘c’) < Ord(‘k’);
в) 'abс' < 'abkd', так як перші два символи рядків співпадають, а порівняння третіх дає Ord(‘c’) < Ord(k);
г) 'ab' < 'abсd', так як рядок 'ab'- початок рядка 'abсd'.
На рядковому типі даних визначені:
Функції:
a) Length(X: String): Byte; - довжина рядка X; { Length(EmptyStr) = 0 }
б) Pos(Y:String; X:String):Byte; - позиція першого символу першого зліва входження підрядка Y у рядок X. Якщо X не містить Y, Pos(Y, X) = 0.
в) Copy(X:String; Index, Count: Integer):String - підрядок рядка X, що починається з позиції Index і містить Count символів.
г) Concat(X1, X2, .., Xk: String): String; - конкатенація рядків Х1, X2, .., Xk. Інша форма запису суми X1+X2+ .. +Xk.
Процедури:
д) Delete(var X: String; Index, Count: Integer); З рядка X видаляється Сount символів, починаючи з позиції Index. Результат поміщується в змінну X.
e) Insert(Y:string; var X: String; Index: Integer); В строку X вставляється рядок Y, причому вставка здійснюється починаючи з позиції Index.
Стандартні процедури введення-виведення Паскаля розширені для введення-виведення рядків. Відмітимо, однак, що для введення декількох рядкових даних треба користуватись оператором Readln. Оператор Read у цих випадках може вести себе непередбачено.
Приклад 2. Дано масив A[1..n] of string[20]. Скласти програму заміни всіх перших входжень підрядка L в A[i] на підрядок R. Рядки L і R вводяться з клавіатури в виді рівності L = R. Результат замін відобразити у масив, елементи якого - рівності виду:
A[i]=результат заміни L на R в A[i].
Program RewriteArray;
Const n = 100; Single = 20; Double = 41;
Type
Sitem = string[Single]; Ditem = string[Double];
SWordArray = array[1..n] of Sitem; DWordArray = array[1..n] of Ditem;
Var
A: SWordArray; B: DWordArray;
L, R: Sitem; X : Sitem;
i, Index : Integer;
Procedure InpWord(var U, V : Sitem);
Var X : Ditem;
j : Integer;
Begin
Writeln('________ Введення рівності L = R __________');
Read(X); j := Pos('=', X);
U := Copy(X, 1, j - 1);
V := Copy(X, j + 1, Length(X))
End;
Procedure InpArray;
begin
Writeln('====== Введення масиву слів ======');
For i:=1 to n do Readln(A[i])
end;
Procedure OutArray;
begin
Writeln('====== Виведення масиву слів ====');
For i:=1 to n do Writeln(B[i])
end;
Begin
InpArray; {введення масиву слів з клавіатури}
InpWord(L, R); {введення і аналіз рівності L = R}
For i := 1 to n do begin
X := A[i]; Index := Pos(L, X);
If Index <> 0
then begin
Delete(X, Index, Length(L));
Insert(R, X, Index)
end;
B[i] := A[i] + '=' + X
end;
OutArray; {виведення масиву слів до друку}
End.
