
- •Методичні вказівки до виконання лабораторних робіт з дисциплін:
- •Введення
- •1. Лабораторна робота №1 Керівні структури мови Pascal
- •1.1 Стислі теоретичні відомості
- •1.2 Завдання до роботи
- •2 Лабораторна робота №2
- •2.2 Завдання до роботи
- •3 Лабораторна робота №3 Рядки у мові Pascal
- •3.1 Стислі теоретичні відомості
- •If ch in [‘a’..’z’] then . . .
- •I,j:Word;
- •3.2 Завдання до роботи
- •4 Лабораторна робота №4 Записи у мові Pascal
- •4.1 Стислі теоретичні відомості
- •Ves, Rost : Real;
- •XyRec:Record
- •X,y:Integer;
- •X,y:Integer;
- •4.2 Завдання до роботи
- •5 Лабораторна робота №5 Файли у мові Pascal
- •5.1 Стислі теоретичні відомості
- •BlockWrite(Var f:File;Var Source;Count:Word[;Var WriteOut:Word])
- •5.2 Завдання до роботи
- •6. Порядок виконання і захисту робіт
- •Перелік посилань
- •322618, Г.Дніпродзержинськ, вул.Дніпробудівська, 2.
3 Лабораторна робота №3 Рядки у мові Pascal
3.1 Стислі теоретичні відомості
В Borland Pascal мається можливість розробки програм з розвинутими алгоритмами обробки текстової інформації завдяки підтримці мовою стандартного символьного (Char) та спеціального строкового (String) типів.
Значення типу Char – не пустий символ із алфавіту ПЕОМ. Його можна представити:
- в одинарних лапках (наприклад ‘а’);
- кодом ASCII за допомогою префікса # (наприклад #97);
- за допомогою функції Chr (наприклад Chr (97)).
Управляючі (керуючі) символи (коди 1…31) можуть бути також представлені знаком ^ і літерою алфавіту з тим самим номером (коди 1…26) або службовим знаком (коди 27…31), наприклад ^A – код 1 або ^[ - код 27.
Рядки – це динамічні структури, які мають довжину в межах границь, оголошених при їх описанні, наприклад:
Var
S1 : String[10]; { довжина рядка до 10 символів }
S2 : String; { довжина рядка до 255 символів }
Максимальна довжина рядка – 255 символів. Опис String без вказівки довжини відповідає опису String[255].
Рядки можна описувати як типізовані константи.
Описані в Var рядки необхідно ініціалізувати, так як спочатку вони утримують сміття’.
Рядки містяться в одинарних лапках. Можна також формувати рядки із символів, а також із підрядків (окремих рядків) впереміжку з символами, записаними по ASCII коду через префікс #, або керуючими кодами, наприклад:
#7#32#179#32#32#179
^G’Після сигналу натисніть ’^J’ клавішу пропуску ’^M^J
‘Ф.И.О. ’#179’ група ’#179
‘’ { пустий рядок }
Взагалі, рядок можна розглядати як масив символів, де будь-який символ можна вилучити по його номеру. Символ S[0] утримує код, який дорівнює числу символів у значенні S.
При записі у змінну типа String рядка більшої довжини, ніж оголошено, надлишок “відсікається”.
Рядки різної довжини сумісні по привласненню і порівнянню.
В підпрограмах, працюючих з рядками різної довжини, рекомендується формальні параметри описувати виключно як String та компілювати програму у режимі {$V-}. При описі параметрів підпрограм похідним строковим типом (наприклад String[n]) конструювання типів в описі підпрограм не допускається.
Операції над символами. Символи можна привласнювати та порівнювати одне з одним. Символи вважаються рівними, якщо рівні їх ASCII коди; більшим є символ з більшим ASCII кодом.
Символи можна розглядати як елементи множини Set of Char та застосовувати для неї операцію перевірки на включення in:
Var
ch:Char;
BEGIN
. . .
ch:=‘a’;
If ch in [‘a’..’z’] then . . .
. . .
END.
Стандартні функції, які застосовуються до символьних значень та змінних, подаються нижче:
Chr(X: Byte): Char - повертає символ ASCII-коду X;
Ord(C: Char): Byte - повертає ASCII-код символу С;
Pred(C: Char): Char - видає попередній С символ;
Succ(C: Char): Char - видає наступний після С символ;
UpСase(C: Char): Char - переводить латинські символи до
верхнього регістру.
Операції над рядками. Рядки можна привласнювати, об’єднувати та порівнювати.
При привласнені рядків використовується складний символ :=.
При об’єднані рядків використовується символ +.
Порівнювання рядків відбувається посимвольно. Рядки вважаються рівними, якщо мають однакову довжину та посимвольно еквівалентні. Якщо при посимвольному порівнянні виявиться, що один символ більший іншого (його код більший), то рядок, який його утримує, також вважається більшим. Залишки рядків та їх довжини не грають при цьому ролі.
Стандартні підпрограми для роботи з рядками подаються нижче:
Length(S:String):Byte |
– видає поточну довжину рядка; |
Concat(S1, ..., Sn):String |
– повертає об’єднання рядків; |
Copy(S:String; Start,Len:Integer):String |
- повертає підрядок довжиною Len, який починається з позиції Start рядка S; |
Delete(Var S:String; Start,Len:Integer) |
- вилучає із S підрядок довжиною Len, який починається з позиції Start рядка S; |
Insert (Var S:String; SubS:String;Start:Integer) |
- вставляє в S підрядок SubS, починаючи з позиції Start; |
Pos(SubS,S:String):Byte |
- шукає входження підрядка SubS у рядку S та повертає номер першого символу SubS в S або 0, якщо S не містить SubS |
Str (X[:F[:n]];Var S:String) |
- перетворює чисельне значення Х у строкове S. Можливо задання формату для Х;
|
Val(S:String;Var X; Var ErrCode:Integer) |
- перетворює строкове значення S (рядок цифр) у чисельне значення Х. |
Рядки, які завершуються нулем, або ASCIIZ-рядки. При такому способі реалізації рядків поточна довжина рядка фіксується спеціальним останнім символом - ознакою, у якості якої в Borland Pascal використовується символ з нульовим кодом, або “нуль –символ”. Він позначається \0 або NULL. Такий засіб вказання поточної довжини обмежує максимальну допустиму довжину рядка лише розміром в один сегмент пам’яті (65534 байт).
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
. |
. |
. |
. |
. |
. |
. |
. |
B |
O |
R |
L |
A |
N |
D |
\0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
нуль-символ
ASCIIZ-рядки зберігаються у вигляді символьних масивів з нульовою базою (тобто нижня границя яких дорівнює 0), наприклад:
Const
Ln=765;
Type
Str5=Array[0..5] of Char;
Str78=Array[0..78] of Char;
StrLn=Array[0..Ln] of Char;
Крім того, в Borland Pascal мається предвизначений тип PСhar, який являє собою показник на ASCIIZ-рядок та визначається наступним чином:
Type
PChar=^Char;
При встановленій директиві розширеного синтаксису {$X+} (приймається по умовчанню) символьний масив з нульовою базою являється сумісним з типом PChar. Сумісні по привласненню з типом PChar також і строкові константи, наприклад:
Const
Str91:Array [0..91] of Char='Рядок типу PChar';
Var
p:PChar;
BEGIN
p:='Рядок типу PChar';
WriteLn(p);
p:=Str91;
WriteLn(p);
END.
Припускається передача строкових констант у якості фактичних параметрів підпрограм, якщо відповідні їм формальні параметри мають тип PChar.
Довжина типізованих констант типу PChar обмежена 255-ю символами, як і типізованих констант типу String.
Змінні типу PСhar можна індексувати аналогічно символьному масиву з нульовою базою.
При включеній директиві {$X+} можна використовувати для роботи з вказівниками типу PСhar операції сумування (+) та віднімання (-).
Ці операції використовуються відповідно для збільшення та зменшення зміщення на задану величину. Крім того, операцію віднімання можна використовувати для обчислювання різниці зміщень двох вказівників типу PChar:
Var
Str1,Str2,res:PChar;