Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Laba#8

.pdf
Скачиваний:
9
Добавлен:
17.05.2015
Размер:
240.48 Кб
Скачать

Міністерство освіти і науки України Вінницький національний технічний університет Інститут РТЗП

Кафедра ПМБА

ЛАБОРАТОРНА РОБОТА №8

з дисципліни: „Обчислювальна техніка та програмування”

на тему:

«Робота з рядками»

Виконав: ст. гр. 1РА – 09

_____________________

Перевірив: асистент каф. ПМБА Белзецький Р.С.

Вінниця 2010 р.

Лабораторна робота №8

Робота з рядками

Мета роботи: Набути навичок роботи з багатовимірними масивами.

ТЕОРЕТИЧНІ ВІДОМОСТІ

У реальних завданнях часто зустрічаються об'єкти символьного типу – рядка. Рядок в Pascal трактується як послідовність символів. До складу рядка можуть входити букви латинського алфавіту, кирилиця, цифри, усілякі знаки, дужки, пробіл і ін. Кожний символ строкової величини займає 1 байт пам'яті (десятковий код від 0 до 255, зафіксований у кодовій таблиці ASCII).

Фрагмент таблиці символьного кодування ASCII

Кількість символів у рядку називається її довжиною. Довжина рядка може динамічно змінюватися від 0 до 255. Порожній рядок має нульову довжину.

Строкова константа – послідовність символів, вкладених в апострофи. Наприклад:

Це рядкова константа', '123'.

Таким чином, при використанні у вираженнях рядок обов'язково береться в лапки.

2

Два наступні один за одним апострофа (''), позначають порожній рядок, тобто рядок з нульовою довжиною.

Строкова змінна описується в розділі опису змінних:

Var <ім'я> : string [<максимальна довжина рядка>]

Наприклад:

Var

Name: string[20];

St: string;

Якщо максимальна довжина не зазначена, то вона приймається рівною 255 ( за замовчуванням).

Елементи рядка ідентифікуються іменем рядка з індексом, взятим у квадратні дужки. Тобто до будь-якого символу в рядку можна звернутися точно так, як до елемента одномірного масиву по його номеру.

Наприклад: N[5], S[i], slovo[k+1]

Індекс може бути позитивною константою, змінної, вираженням цілого типу. Значення індексу не повинне виходити за межі опису.

Для зберігання й обробки окремих символів використовують змінні типу char. Значенням змінної такого типу може бути будь-який один символ.

Наприклад: var a: char; ch: char;

Вираза, у яких операндами служать строкові дані, називаються строковими. Над строковими даними припустимі операції зчеплення.

Операція зчеплення (конкатенації) (+) застосовується для з'єднання декількох рядків в один результуючий рядок. Зчіплювати можна як строкові константи, так і строкові змінні.

Наприклад:

'бейсик' + 'паскаль' + 'Сі' + '–' + 'мови програмування високого рівня'.

В результаті вийде рядок:

Бейсик Паскаль Сі – 'мови програмування високого рівня'. Довжина результуючого рядка не повинна перевищувати 255 символів.

3

Операції відношення =, <, >, <=, >=, <> дозволяють зробити порівняння двох рядків, у результаті чого виходить логічне значення (True або False). Операції відношення мають більш низький пріоритет, ніж операції зчеплення. Порівняння рядків здійснюється ліворуч праворуч до першого незбіжного символу, і той рядок вважається більшим, у якій перший незбіжний символ має більший номер у таблиці символьного кодування. Якщо рядки мають різну довжину, але в загальній частині символи збігаються, вважається, що більш короткий рядок менший, ніж більш довгий. Рядки рівні, якщо вони повністю збігаються по довжині й містять ті самі символи.

Наприклад:

Вирз

 

Результат

’True1' <

’True2'

True

’Student’

> ’STUDENT’

True

'студент'

<> 'Студент'

True

'группа' = 'группа'

True

Усі останні дії над рядками й символами реалізуються за допомогою вбудованих процедур і функций.

Функції для роботи з даними строкового типу

Звертання до

Дія

 

 

Приклад

 

функції

 

 

 

 

 

Copy (S, Poz,

Виділяє з рядка S підрядок

 

 

S:= 'IBM-PC';

N)

довжиною N символів,

 

S1:=Copy(S,5,2);

 

починаючи з позиції Poz. Тут

 

Результат: S1=’PC’

 

N і Poz – цілочислові вирази.

 

Concat(S1,…,Sn)

Виконує зчеплення

 

 

S1:=’Test’;

 

 

(конкатенацію) рядків

 

 

S2:= '-';

 

 

S1,S2,..,Sn в один рядок.

 

 

S3:='5';

 

 

 

 

S:=Concat(S1,S2,S3);

 

 

 

 

Результат: S:= 'test-5'

 

Length(S)

Визначає поточну довжину

 

S:=

'test-5';

 

рядка S. Результат – значення

 

n:=Length(S);

 

цілого типу.

 

Результат: n=5

 

 

 

Lowercase(S)

Повертає копію рядка S, у

 

 

S:= ’STUDENT’;

 

 

якій усі символи перетворені в

 

S:=Lowercase(S);

 

 

символи нижнього регістру (у

 

Результат:S=’student’

 

 

малі літери). Працює тільки з

 

 

 

буквами латинського

 

 

 

 

 

алфавіту.

 

 

 

 

4

Uppercase(S)

 

Повертає копію рядка S, у

 

S:= ’student’;

 

 

якій усі символи перетворені в

 

S:=Uppercase(S);

 

 

символи верхнього регістру (у

 

Результат:S=’STUDENT’

 

 

прописні букви). Працює

 

 

 

тільки з буквами латинського

 

 

 

 

 

 

 

алфавіту.

 

 

 

 

 

Trim(S)

 

Видаляє з рядка S лідируючі й

 

S:='

Студент

';

 

 

 

завершальні пробіли, а також

 

S:=Trim(S);

 

 

 

 

керуючі символи.

 

Результат: S='Студент'

 

 

 

 

Trimleft(S)

 

Повертає копію рядка S з

 

S:='

Студент

';

 

 

 

вилученими лідируючими

 

S:=Trimleft(S);

 

 

пробілами й керуючими

 

Результат:

 

 

 

 

символами.

 

'

 

 

 

 

 

S='Студент

 

Trimright(S)

 

Повертає копію рядка S з

 

S:='

Студент

';

 

 

 

вилученими завершальними

 

S:=Trimright(S);

 

 

пробілами й керуючими

 

Результат:

 

 

 

 

символами.

 

 

 

 

 

 

 

S='

Студент'

Chr(X)

 

Повертає символ, зазначений

 

for i:=65 to 71 do

 

 

його Ascii-Кодом. Тут Х

 

S:=S+Chr(i);

 

 

значення цілого типу.

 

Результат: S=’ABCDEFG '

 

 

Результат – значення типу

 

 

 

Char.

 

 

 

 

 

Ord(S)

 

Повертає Ascii-Код

 

S:='F';

 

 

 

 

зазначеного символу. Тут S

 

Cod:=Ord(S);

 

 

 

змінна типу Char. Результат –

 

Результат: Cod=70

 

 

 

значення цілого типу.

 

 

 

 

 

 

Pos(S1, S2)

 

Виявляє перша поява в рядку

 

S:=’abcdef’;

 

 

 

 

S2 підрядка S1. Результат –

 

n:=Pos(’cd’,S);

 

 

ціле число, рівне номеру

 

Результат: n=3

 

 

 

 

позиції, де перебуває перший

 

 

 

 

 

символ підрядка S1. Якщо

 

 

 

 

 

 

 

така поява не виявлена, то

 

 

 

 

 

 

 

результат рівний 0.

 

 

 

 

 

5

Процедури для роботи з даними строкового типу

Звертання до процедури

Дія

 

 

Delete(S, Poz, N);

Видалення N символів з

 

рядка S, починаючи з позиції

 

Poz.

 

 

Insert(S1,S2,Poz);

Вставка рядка S1 у рядок

 

S2, починаючи з позиції

 

Poz.

Str(X[:N[:M]],S);

Перетворює числове

 

значення X у рядок S.

 

Параметр X є вирз

 

цілочислового або дійсного

 

типу, а параметри N і M – це

 

цілочисловий вираз, що

 

визначають форматування

 

рядка S.

Val(S,x,Cod);

Перетворює рядок S у

 

числове значення. Параметр

 

S повинен містити

 

послідовність символів, яка

 

може бути сприйнята як

 

дійсне число зі знаком.

 

Параметр x може бути як

 

дійсним, так і цілочислового.

 

У параметр Cod заноситься

 

код виконання перетворення:

 

0, якщо перетворення

 

виконане успішно, або номер

 

позиції, у якій відбулася

 

помилка.

Приклад

S:=’abcdef’;

Delete(S,3,2);

Результат: S=’abef’ S:='ЭВМ PC’; Insert( 'IBM- ',S,5);

Результат:

S='ЭВМ IBM-PC' x:= -23.60; Str(x:6:1,S);

Результат: S=' -23.6' a:=-23.60; b:=20.5; Str(a+b:6:1,S);

Результат: S=' -3.1'

S:='-23.60'; val(S,x,Cod);

Результат: x=-23,6

6

ВІКНО ФОРМИ ДОДАТКУ

7

ЛІСТИНГ ПРОГРАМИ

unit DIYI_NAD_SLOVAMY;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

CheckBox4: TCheckBox; Button1: TButton; Button2: TButton; Edit2: TEdit;

procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject);

private

{Private declarations } public

{Public declarations }

end;

var

Form1: TForm1;

var f,f1, s,s1: string; i,n,k: integer; implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject); begin

close;

end;

procedure TForm1.Button1Click(Sender: TObject); begin

// робим всі букви заглавні s:=Edit1.Text;

s1:='';

8

for i:=1 to length(s) do case s[i] of

'а'..'я' : s1:=s1+chr(ord(s[i])-32); else s1:=s1+s[i];

if CheckBox1.Checked then Edit1.text:=s1; end;

//підраховуємо кількість цифр в стрічці n:=0;

for i:=1 to length(s) do

if (S[i]>='0') and (S[i]<='9') then n:=n+1;

if CheckBox2.Checked then Edit2.text:=inttostr(n);

//забираємо +

S:=Edit1.Text+' '; {для роботи з останнім символом} s1:=''; {вихідна стрічка}

for i:=1 to length(s) do if (S[i]='+') then

begin

if (s[i+1]>='0') and (s[i+1]<='9') then s1:=s1+s[i]

end else

s1:=s1+s[i];

if CheckBox3.Checked then Edit1.text:=s1; // Забираємо непотрібні пробіли s:=Trim(Edit1.Text);

S1:='';

for i:=1 to length(s) do

if (S[i]<>' ') then S1:=S1+S[i] else

if (S[i+1]<>' ') then S1:=S1+' '; K:=Length(s)-Length(s1);

if CheckBox4.Checked then Edit1.text:=S1; end;

end.

9

Контрольні питання

1.Як описуються змінні символьного типу?

2.Опишіть стандартні функції для роботи із символьними змінними.

3.Як описуються строкові змінні?

4.Як записується строкова константа?

5.Яка максимальна довжина рядка?

6.Що загального між рядком і символьним масивом?

7.Які операції застосовні до строкових змінних і констант?

8.Опишіть із прикладами стандартні функції обробки строкових даних.

9.Опишіть роботу стандартних процедур обробки строкових даних.

10.Як можна звернутися до елементів рядка?

11.Як в Memo можна обробити кілька рядків?

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]