1. Рядки та дії з ними. Дане типу рядок — це послідовність довільних символів (тобто елементів типу char). Сталі типу рядок записують за допомогою двох штрих-символів, які охоплюють текст. Рядок може містити від 0 до 255 символів. Наприклад, 'Україна', 'Львівська політехніка', '' – порожній рядок нульової довжини, ' ' – рядок, що містить один символ-пропуск. Змінну типу рядок оголошують за допомогою слова string так:
var <змінна>: string[n];
де n –довжина рядка, n<256. Довжину рядка можна не зазначати. Приклад. const slovo=’University’; var fraza1: string[45]; fraza2: string; Над змінними типу рядок визначені операції з’єднання (+) та порівняння (<, <=, >, >=, =, <>). Порівняння двох рядків здійснюється зліва направо до перших різних символів, причому 'A'<'B', 'B'<'C' тощо. “Більшим” вважається символ, який розташований в алфавіті далі (він має більший номер у таблиці кодів комп’ютера ASCII, див. § 14). Числовий код символу дає функція ord, наприклад, ord('B')=66, ord('A')=65. Зворотну дію виконує функція chr: chr(66) дає 'B'. Приклад. Нехай t1='New', t2=' Year'. Тоді з'єднанням цих рядків буде s:=t1+t2 (s матиме значення 'New Year'). Тут s > t1. Приклад. Вивести на екран малі літери латинського алфавіту та їхні коди можна так: for v:= 'a'to 'z'do writeln(v, ord(v):5). 2. Функції та процедури для дій з рядками. Над даними типу рядок визначені такі стандартні функції:
length(<рядок>) — визначає кількість символів у рядку; copy(r, m, n) — дає n символів рядка r, починаючи з символу з номером m; concat(r1, r2, ..., rn) — з'єднує рядки r1, ..., rn в один рядок; pos(r1, r2) — визначає номер символу, з якого починається входження рядка r1 у рядок r2.
та процедури:
insert(r1, <змінна>, n) — вставляє рядок r1 у рядок, заданий змінною, починаючи з позиції n; delete(<змінна>, m, n) — вилучає n символів з рядка, заданого змінною, починаючи з позиції m; str(<число>, <змінна>) — переводить числове дане в дане типу рядок;
де зазначена змінна посилає в процедуру вхідне дане типу рядок і отримує назад інший рядок – результат виконання процедури. Приклад. Нехай змінна Lviv має значення 'Львівська політехніка'. Розглянемо приклади функцій та їхні значення:
Функція length(Lviv) copy(Lviv, 15, 11) concat(Lviv,' – 2000') pos('т', Lviv)
Значення 21; техніка; Львівська політехніка – 2000; 15.
Наступні процедури нададуть змінній Lviv таких значень:
Значення змінної Lviv 'НУ Львівська політехніка' 'Львів' '2000' Lviv1=1256, Ozn=0
Є два способи опрацювання даних типу string. Перший — можна опрацьовувати весь рядок як єдине ціле, застосовуючи до нього функції та процедури, другий — можна розглядати рядок як масив, складений з елементів-символів, і опрацьовувати його за правилами роботи з елементами масиву. Приклад. Деякі значення змінним fraza1 та fraza2 з попереднього прикладу можна надати, а потім вивести тексти на екран так:
fraza1:=’Ви любите канікули?’; for i:=1 to 19 do read(fraza2[i]);{Вводимо текст з клавіатури} writeln(fraza1); writeln(fraza2).
Задача 1. Кодування інформації. Вилучити з фрази а пропуски, коми і крапки, інші символи продублювати. Вивести результат.
program MyCode; var a, b, c : string; i : integer; begin write('Введіть текст: '); readln(a); b := ''; for i := 1 to Length(a) do begin c := Copy(a, i, 1); if (c <> ',') and (c <>'.') and (c <>' ' ) then b := b + c + c end; writeln(b); readln end.
{Вводимо будь-яку фразу} {Зверніть увагу на коментар унизу:} { або так: c := a[i]; }
Задача 2. Скласти програму, яка скрізь у заданому тексті mytext замінить деяке слово іншим словом такої ж довжини (word1 на word2).
program FindAndChange; uses Crt; var mytext, word1,word2 : string; i,k : integer; begin clrscr; write('Введіть текст: '); readln(mytext); write('Введіть шукане слово: '); readln(word1); write('Введіть інше слово: '); readln(word2); k := length(word1); for i := 1 to length(mytext) - k do if copy(mytext, i, k) = word1 then begin delete(mytext, i, k); insert(word2, mytext, i) end; writeln(mytext); readln end.
Задача 3. Нехай задано рядок 'Я люблю інформатику'. Визначити довжину рядка. Вивести на екран друге слово цього рядка.
program Ryadok; uses Crt; const r1: string = 'Я люблю інформатику'; var i,k,m,n1,n2: integer; begin clrscr; m:=0; k:=length(r1); writeln('Довжина рядка k=', k); for i:=1 to k do if r1[i]=' ' then begin m:=m+1; if m=1 then n1:=i; if m=2 then n2:=i end; for i:=n1+1 to n2–1 do write(r1[i]); readln end.
{Визначаємо довжину рядка} {Переглядаємо всі символи рядка} {Шукаємо пропуск} {Визначаємо номер першого та другого пропусків} {Виводимо слово між двома пропусками}
Завдання 1. Розв’яжіть попередню задачу, використовуючи функцію pos для визначення позиції пропуска і процедуру delete для отримання другого слова. Завдання 2. Деякий текст закодуйте кодом Цезаря, замінивши кожну букву на четверту за нею букву з алфавіту. Завдання 3. Розв’яжіть задачі № 13а і 13б свого варіанта.