- •Лабораторна робота.№10
- •Стандартні процедури I функції обробки рядків.
- •Приклади програмування
- •Практична частина. Завдання до лабораторної роботи:
- •Варіанти завдань. Загальний рівень
- •Для самостійної роботи
- •Додаток до лабораторної роботи Методичні поради до підготовки і виконання лабораторних робіт з використанням текстових файлів.
Л.В.Рибакова МОДУЛЬ №2 Лабораторна робота 10
Лабораторна робота.№10
Тема: Використання змінних рядкового типу.Стандартні процедури i функції обробки рядків.
Мета роботи: Закріпити знання і відпрацювати вміння та навички використовувати в Рascal- програмі рядкові змінні i стандартні процедури та функції для їх обробки .
Теоретична частина.
Рядковий тип - стандартний в TURBO-PASCAL.
Рядок ‑ це скінчена послідовність символів кодової таблиці ASCII (розширеної).
Рядок постійно містить у собі будь-які символи обмежені, апострофами. Дов-жина рядка не перевищує 255 символів.
На зберігання рядка відводиться пам‘яті: кількість символів плюс один. Це так звана біжуча довжина.
Для опису використовуються службове слово string.
Type str=string [максимальна довжина рядка];
var s1:str;
Або у розділі змінних :
var s2:string [максимальна довжина рядка].
var t : string[20];
s : string;
Максимальна довжина - кількість символів в рядку, ціле число з діапазону [0..255]. Якщо довжина рядка при описувнні змінної не вказана, то вона дорівнює 255.
До окремого символу в рядку можна звернутися по номеру даного символу в рядку . Наприклад t[1], t[2] - відповідно 1-й та 2-й символи рядкової змінної t.
Рядковий вираз складається з рядкових констант, змінних, функцій i знаків операцій. Допустимі операції зімкнення (+) i відношення. Допускається поєднання в одному виразі операторів символьного (char) i рядкового (string) .
Стандартні процедури I функції обробки рядків.
Процедури.
Delete (st, poz, N) - знищення N символів рядка st, почавши з позицi1 poz.
Приклад:
‘ЕОМ IBM PC ’ --> Delete (str,8,3) -->‘ЕОМ IBM ’
'річка Інгул '--> Delete (str,1,5) -->' Інгул '
Insert (str1,str2,poz) - вставка рядка str1 в str2, починаючи з позицi1 poz.
Приклад:
var s1, s2, s3: string [11];
s1:=’кібернетика’; s2:='наука '; s3:=insert(s1,s2,7);
В результаті отримаємо s3 - ’наука кібернетика;
Str (X [: Size], Str) - перетворення числового виразу в рядок. Після виразу може бути записаний формат Size аналогічний формату виведення даних .
Val (Str, X, ErCode) - перетворення рядка Str в вираз X Код помилки ErCode- цiлочисельна змінна, яка дорівнює номеру першого помилкового елемента (якщо помилка відсутня код=0).
Функції.
Copy (st, poz, N) - виділяється з рядка st пiдрядок довжиною N символів, починаючи з позиції poz.
Concat (str1, str2... strN) - виконує з’єднання рядків str1, str2... strN. Сума символів всіх з'єднань не повинна перевищувати 255. Якщо в отриманому рядку сума символів перевищує 255 рядок відсікається до 255 символів.
Length (st) - обчислює довжину в символах рядка st.
Pos (str1, str2) - відшукує першу появу в рядку str2 пiдрядка str1.
Приклади програмування
{Програма визначення кількість символів у слові}
uses crt;
const n=50;
var tekst1,tekst:string;
k :array[1..n] of integer;
dl, ns, m, l, j, i :integer;
Begin
ClrScr;
writeln(' введіть речення з крапкою на кінці `);
writeln(' між словами вставте прогалину ');
Readln (tekst);
tekst1:=tekst;
dl:=length(tekst);
if tekst[dl]<>'.' then
begin
writeln(' Ви не поставили "."');
writeln(' повторіть з початку’);
halt;
end;
Insert ('’, tekst, dl); i: =0;
while tekst<>'.' do
begin
i:=i+1;
l:=pos(' ', tekst);{починаючи з позиції l ' ' входить у текст}
k[i]:=l-1; {формує масив довжин}
Delete (tekst, 1,l); {видаляє перевірене слово з тексту}
end;
m:=k[1];ns:=1;
for j:=2 to i do
if k[j]>m then
begin
m:=k[j];ns:=j;
end;
writeln ('В тексті - ');
writeln (tekst1);
for j:=1 to i do
writeln (' cлово',j:3,' складається з ', k[j],'-символів');
writeln (ns,'-e слово в тексті найдовше і складається з);
writeln (m:3,'-символів'); readln; END.
{Дано текст. Визначити скільки разів кожна буква латинського алфавіту з‘являється в тексті і відносну частоту появи.}
program pidrachunok;
uses crt;
type mas=array['A'..'Z'] of word;
var s:string;
i:char;
a:mas;
j,k:word;
begin
clrScr;
for i:='A' to 'Z' do
a[i]:=0;
writeln('введіть текст'); readln(s);
for j:=1 to length(s) do begin
for i:='A' to 'Z' do
if i=s[j] then a[i]:=a[i]+1
end;
for j:=1 to length(s) do begin
for i:='a' to 'z' do
if i=s[j] then a[upcase(i)]:=a[upcase(i)]+1
end;
writeln('буква':7,'кіл-ть':10,'частота':10); k:=0; j:=0;
for i:='A' to 'Z' do begin
k:=k+1;
if k>23 then begin
j:=j+1; gotoxy(30,j)
end;
writeln(i:5,a[i]:9, a[i]*100/length(s):11:2);
end;
Repeat Until KeyPreSSed;
end.