субота, 11 жовтня 2014 р.

Рядки

Рядки
1. Рядки (string). Дане типу рядок — це послідовність довільних символів (тобто елементів типу char). Сталі типу рядок записують за допомогою двох штрих-символів, які охоплюють текст. Рядок може містити від 0 до 255 символів. Наприклад, 'Україна', 'Львівська політехніка', '' – порожній рядок нульової довжини, ' ' – рядок, що містить один символ-пропуск.
Змінну типу рядок оголошують за допомогою слова string так:
   var <змінна>: string[n];
де n –довжина рядка, n<256. Довжину рядка можна не зазначати.
Приклад.
            const slovo=’University’;
            var fraza1: string[45]; fraza2: string;
        Над змінними типу рядок визначені операції з’єднання (+) та порівняння (<, <=, >, >=, =, <>). Порівняння двох рядків здійснюється зліва направо до перших різних символів, причому 'A'<'B', 'B'<'C' тощо. “Більшим” вважається символ, який розташований в алфавіті далі. Числовий код символу дає функція 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)                                                   21;
copy(Lviv, 15, 11)                                      техніка;
concat(Lviv,' – 2000')                       Львівська політехніка – 2000;
pos('т', Lviv)                                                           15.
Наступні процедури нададуть змінній Lviv таких значень:  
Процедура                                                          Значення змінної Lviv                    
insert('НУ ', Lviv, 1)                                      'НУ Львівська політехніка'
delete(Lviv, 6, 16)                                                          'Львів'
str(2000, Lviv)                                                                '2000'
val('1256', Lviv1, Ozn)                                        Lviv1=1256, Ozn=0

Є два способи опрацювання даних типу string. Перший — можна опрацьовувати весь рядок як єдине ціле, застосовуючи до нього функції та процедури, другий — можна розглядати рядок як масив, складений з елементів-символів, і опрацьовувати його за правилами роботи з елементами масиву.
Приклад. Деякі значення змінним fraza1 та fraza2 з попереднього прикладу можна надати, а потім вивести тексти на екран так:                                                                        
fraza1:=’Ви любите канікули?’;
for i:=1 to 19 do read(fraza2[i]);{Вводимо текст з клавіатури}
writeln(fraza1); writeln(fraza2).

Задача 1. Кодування інформації. Вилучити з фрази а пропуски, коми і крапки, інші символи продублювати. Вивести результат.                                                            
program MyCode;
uses Crt;
var a, b, c : string; i : integer;
begin
   clrscr;
   write('Введіть текст: ');
   readln(a);                                                            {Вводимо будь-яку фразу}
   b := '';
   for i := 1 to Length(a) do
      begin
      c := Copy(a, i, 1);                                  {Зверніть увагу на коментар унизу:}
      if (c <> ',') and (c <>'.') and (c <>' ' )                      { або так: c := a[i]; }
         then b := b + c + c
      end;
   writeln(b);
   readln
end.                                                                         

Задача 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.                                                                         


Немає коментарів:

Дописати коментар