Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка - Основи програмування і алгоритмічні мови.DOC
Скачиваний:
29
Добавлен:
02.05.2014
Размер:
512.11 Кб
Скачать

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;