2 семестрп / Lab_7
.doc
Лабораторна робота 7
Тема: Розробка та реалізація програми з використанням рядкового типу даних
Ціль роботи: оволодіння навичками складання програми з використанням рядкового типу та виконання її у середовищі системи програмування Тurbo Раscal 6.0.
Короткі теоретичні відомості
Рядок - це послідовність довільних символів, які при використанні беруться в апострофи. В рядку може міститися від 0 до 255 символів: Опис рядкового типу складається з ключового слова string, за яким в квадратних дужках може бути записано максимальну кількість символів, яку може мати змінна описуваного типу. Наприклад, var SI:string[30];
Символи рядка мають номери від 0 до 255, причому ASCII код символу з номером 0 дорівнює поточній довжині даного рядка. До окремого символу рядка можна звернутися за допомогою індексу, так само, як при звертанні до елемента масиву.
Для контролю правильності діапазону значень номера символу призначена директива компілятора {$R+}. Якщо встановлена така директива, то при спробі доступу до елемента, наприклад, S[76] масиву з попереднього приклада, буде зафіксована помилка. За замовчуванням встановлюється директива компілятора {$R-}, тобто перевірка не проводиться.
Над даними рядкового типу визначено операції додавання (конкатенації), відношення і оператор присвоєння.
Зчеплення двох чи більше рядків в один реалізується за допомогою операції конкатенації, яка позначається знаком "+". Додаватися можуть рядки довільної довжини, але необхідно, щоб довжина рядка-результату не перевищувала 255. Так, у результаті конкатенації ‘Turbo ‘+ ‘Pascal ‘+’’+’v.6.0’ маємо ‘Turbo Pascal v.6.’ Відзначимо: пара апострофів, що йдуть підряд, зображає порожній символ. Він не відображається на екрані і не має порядкового номера.
Довільні два рядки можна порівнювати один з одним за допомогою операцій відношення (=, <>, <, >, <=% >=). Порівняння рядків відбувається зліва направо, до першого відмінного символу. Два рядки рівні, якщо вони мають однакову довжину і складаються з однакових символів, що йдуть в одному порядку. Меншим буде той рядок, в якому символ, що не збігається, має менший порядковий (ординальний) номер. Якщо рядки мають різну довжину, але в спільній частині збігаються, то меншим є коротший рядок;
Вираз Результат
‘PASCAL’> ‘Pascal’ False
‘Turbo ‘>=’Turbo’ True
Оператор присвоєння використовується для присвоєння рядковій змінній результату виразу рядкового типу. Якщо вираз рядкового типу містить більше символів, ніж може містити рядкова змінна, то зайві праві символи відкидаються. В операторі присвоєння допускається змішування символьного і рядкового типів. Якщо при цьому символьній величині присвоюється рядок, поточна довжина якої більше 1, то виникає помилка при виконанні.
Для обробки рядків є стандартні процедури і функції При подальшому описі ціх процедур і функцій під типом anystring розуміємо будь-який рядковий тип. Для обробки рядків є такі стандартні процедури: Delete, Insert, Str, Val.
Для обробки рядків є такі стандартні функції: Length, Pos, Copy, Concat.
Завдання 7.1
Визначити дію фрагмента програми і обчислити значення змінних X та Y після його виконання, якщо var X, S: string[18] ; A: string[1]; Y:integer; X:='N'+'alb2c3d4' ; S:='24'+'Nr; Y: =512.
Фрагмент програми: x:=concat(copy(x,1,2),s,copy(x,8,length(x)-7));
y:=length(x);
Розв’язок
Цей фрагмент програми перетворює значення рядкової змінної X у цілечислене і присвоює результат змінній Y. Після його виконання Х=4a244d4 Y=7.
Завдання 7.2
Скласти програму для виконання наступних дій і виконати її у середовищі системи програмування Тurbо Раscal 6.0
Умова: визначення кількості цифр у рядку.
Розв’язок
program lr7;
var
c:char;
k,kw,kp:integer;
begin
writeln('vvedit simvolniy raydok');
k:=0;
kw:=1;
kp:=0;
repeat
read(c);
if c in ['0'..'9'] then
k:=k+1;
if not (c in ['a'..'z','A'..'Z','а'..'я','А'..'Я','0'..'9',':',';',',','.','!','?','(',')','-']) then
kw:=kw+1;
until eoln;
writeln('chislo cifr=',k);
end.
Результати роботи програми:
vvedit simvolniy raydok
Мені сьогодні виповнилося 19
chislo cifr=2
Висновок:
Захист
Program 7z;
Var Text, Slovo1, Slovo2 : String;
i, DlinaSlova, P : Integer;
begin
write('Введите строку : ');
readln(Text);
write('Какое слово заменить ? ');
readln(Slovo1);
Write('На какое слово заменить ? ');
readln(Slovo2);
writeln;
DlinaSlova:=Length(Slovo1);
P:=Pos(Slovo1,Text);
While P>0 do
begin
Delete(Text, P, DlinaSlova);
Insert(Slovo2, Text, P);
P:=Pos(Slovo1, Text);
end;
writeln('Новый текст: ', Text);
readln
end.
ЛР07-
6.050103.1157-01