вівторок, 23 червня 2015 р.

Тема: Символьні та рядкові типи даних.

Рядок –це послідовність символів кодової таблиці ЕОМ.
При використанні у виразах рядок охоплюється з двох сторін апострофами. Кількість символів в рядку може змінюватися від 0 до 255.
Для опису рядкових величин використовують ідентифікатор string, після якого в квадратних дужках записується максимальне значення довжини рядка для даної величини.
Формат:
Var
   < ідентифікатор >: string[максимальна довжина рядка];
Приклад.
Var r1: string[10];
       r2: string[4];
Якщо довжина рядка не вказана, то вона автоматично приймає значення 255 байт.
Рядкові величини можна використовувати  в програмі у вигляді констант.
Приклад.
Const
   Name=’інформатика’;

1.      Основні вказівки і функції опрацювання рядкових величин .
1. Char –символьний тип   (займає 1 байт пам’яті)
Опис даних символьного типу:
          Const  name1= ‘v’; — опис символьної константи,
          Var name2: CHAR; — опис символьної змінної.
Допустимі всі операції порівняння:
                                                    <, <=, =, >, >=, <>.
Функції для роботи з символами.
CHR(N) — символ з кодом N.  Наприклад: chr(65)    
ORD(S) — код символу S. Наприклад: ord(‘A’)              
SUCC(S) — наступний символ.  Наприклад: succ(‘K’)   
PRED(S) — попередній символ. Наприклад: pred(‘K’)   
UPCASE(S) — переводить літери у верхній регістр. Наприклад: upcase(‘m’)  
2. Рядок — впорядкована послідовність символів кодової таблиці ASCII.
Опис даних рядкового типу:
          Const  <ім’я>=‘ліцей’
         Var   <ім’я>:array[1..50] of char;
         Var  <ім’я>:string[максимальна довжина рядка];
Приклад. Const R1=‘computer’;
               Var R2: STRING;
                      R3: STRING [20];
                      R3:array[1..20] of char;         
Кількість символів в рядку називається його довжиною. Довжина рядка може бути від 0 до 255. Рядкові величини можуть бути константами і змінними. Рядкова константа – це послідовність символів між апострофами.
Над рядковими величинами допустимі операція склейки (конкатенації) (+) та  операції відношення (=,<,>,<=,>=,<>).
Для рядкових величин визначені такі функції та процедури:
1.Функція Concat. Функція Concat здійснює об’єднання рядків Rl; R2, R3 в один рядок в такому порядку, в якому вони записані.
              Формат Concat(Rl,R2,R3);   або   R1+R2+R3  (string)
Приклад.   Program Fconcat;
                  Const Rl='Moвa ';   R2='програмування ';   R3=’Turbo Pascal';
                  Var R:string[35];
            begin
              R:=concat(Rl,R2,R3);
              writeln(R); end.
2. Функція Length. Функція Length видає фактичну довжину рядка, який міститься в даній змінній.
При підрахуванні довжини рядка враховуються всі символи, в тому числі і проміжки!!!
          Формат: Length(R); (integer)
Приклад. Program Flength;
                 Const R=’Turbo Pascal’;
                 Var N: integer;
                    begin
                       N:=length(R);
                       writeln('n=',N); end.
3. Функція Copy. Функція Copy копіює фрагмент довжиною N рядка R, починаючи з позиції Poz.
                        Формат Copy(R, Poz, N);     (string)
Приклад. Program Fcopy;
               const R='Turbo Pascal';
               var  R1: string[6];
            begin
             R1:=Copy(R, 7, 6);
             writeln(R1);  end.
4. Функція  Pos. Функція Pos знаходить номер позиції Р, з якої починається перше входження слова C в рядку R. Якщо слово C в рядку R не знайдено, то буде надруковано число 0.
                    Формат  Pos(C,R);   (integer)
Приклад.  Program Fpos;
             Const R=‘інформатика'; C=‘форма';
             Var P: integer;
                begin
                  P:=Pos(C, R);
                  writeln('P=',P); end.
5. Процедура Insert. Процедура Insert вставляє слово R1 в рядок R, починаючи з позиції Poz.
                  Формат Insert(R1, R, Poz);     (string)
Приклад. Program PInsert;
                 Var Poz: integer;
                       R, R1: string[35];
               begin
                R:='Moвa Pascal';
                R1:=’Turbo  ‘;
                insert(R1, R, 6);
                writeln(R); end.
6. Процедура  Delete. Процедура Delete знищує слово, яке починається з вказаної позиції Poz і має задану довжину N в рядку R.
                      Формат Delete(R, Poz, N);         (string)
Приклад.  Program PDelete;
              Var R:string[35];
           begin
               R:='Moвa Turbo Pascal';
               delete(R, 6, 6);
               writeln(R);  end.
Зверніть увагу!!! Стала нульової довжини – ‘’
         Рядок символів вводиться і виводиться як одна змінна.
         Значення типу  string  вводяться за  допомогою тільки процедури  readln і за один раз може бути введений лише один рядок.
Завдання. Ввести довільний текст. Перевірити, чи в ньому кількість відкритих дужок дорівнює кількості закритих дужок. Вивести повідомлення “так” або  “ні”.
Учням пропонується розмістити в правильному порядку елементи блок-схеми з використанням інтерактивної дошки.
Текст програми.
          Program Sumvol;
          uses crt;
         var R:string[100];
                i,k1,k2,l:integer;
        begin
       clrscr;
        writeln('Vvestu text:');
        readln(r);
        k1:=0;
       k2:=0;
       l:=length(R);
        for i:=1 to l do
             begin
            if copy(R,i,1)='(' then k1:=k1+1;
            if copy(R,i,1)=')' then k2:=k2+1;
           end;
       if k1=k2 then write('yes') else write('no');
   readln;   end.
I. Завдання 1. Скласти програму обчислення кількості букви «А» в реченні.
Приклад розв’язування задачі та складання програми.

Program z1;
Var S: string;
N, i,k:integer;
Bеgin
Writeln(‘->s’); readln(s);
N:= length(s);
K:=0; For i:=1 to n do
If s[i]=’a’ then k:=k+1;

Writeln(‘k=’,k); End.

Типовые задачи на строковые переменные

Дана строка, содержащая 20 символов. Подсчитать сколько раз буква F встречается в данной строке.
program zadacha (input, output);
{подсчет количества повторений буквы F в слове)
var
s : string[20];
i, k: integer;
begin
writeln ( ' введите слово. Количество символов в нем не должно превышать 20 ') ;
read (s) ;
k:=0;
for i:=1 to 20 do
if s[i] ='f' then k:=k+1; writeln (' буква F встречается', k, ' раз(а)')
end.
Дана строка, содержащая 20 символов. Подсчитать количество цифр, входящих в данную строку.
program zadacha (input, output); {подсчет количества цифр в слове)
var
s: string[20];
n: string[10];
k, i, j: integer;
begin
writeln (' Введите строку символов');
read (s) ;
n:='0123456789';
for i:=1 to 20 do
for j:=1 to 10 do
if s[i] = n[j] then k:=k+l; write(' в строке ', s, ' ', k, ' -цифр')
end.
Проверить является ли слово палиндромом
Дано произвольное слово. Проверить является ли оно палиндромом. (Пример: слова палиндромы - казак, шалаш, мадам, фраза «a роза упала на лапу азоpа » и т. д.)
program zadacha (input, output) ;
{проверить, является ли слово палиндромом}
var
s : string;
l, i, m, k: integer;
begin
writeln ('Введите слово');
read (s) ;
k:=0;
l : = length (s) ;
m: = trunc(l/2) ;
for i:=1 to m do
if s[i] <> s[l+1-i] then k:=1;
if k=1 then writeln (' слово', s, ' не палиндром')
else writeln (' слово', s, ' -палиндром ')
end.
Сжатие строки
Дана строка символов. Получить новую строку из первоначальной строки, без точек.
program zadacha (input, output) ; {сжатие строки}
var
s, h: string;
i, k: integer;
begin
writeln (' Введите строку символов');
read (s) ;
for i:=1 to length(s) do if s[i] <> '.' then
begin
k:=k+1;
h[k]:= s[i]
end;
for i:=1 to length(s) do write ( h[i] )
end.
Формирование новой строки
И заданной строки получить новую строку, удалив все "*" и повторив каждый символ, отличный от звездочки дважды. Распечатать полученную строку.
program zadacha (input, output); {формирование новой строки}
var
s, h : string;
i, k, l, j: integer;
begin
writeln (' Введите строку символов');
read (s) ;
k:=l;
l:=length(s);
j:=l;
for i:=1 to l do
if s[i] <> '*' then begin h[j]:=s[i]; h[j+1]:=s[i]; j:=j+2
end;
for i:=1 to 2*1 do write ( h[i] )
end.
Определение наименьшего слова в строке
Определить наименьшую длину слова в строке. Считать, что все слова отделены пробелами.

program zadacha (input, output); {определение наименьшего слова в строке}
var
s: string;
i, l, min, lw: integer;
begin
writeln (' Введите строку символов');
read (s) ;
lw:=0; {длина текущего слова}
l:= length(s);
min: = l;
for i:=1 to l do
if s[i] <> ' ' then lw:= lw+1
else if (min>lw) and (lw>0) then
begin
min = lw;
lw:=0
end;
writeln (' min= ', min)
end.