Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_PASCAL_ukr.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
365.06 Кб
Скачать

Лабораторна робота 5

Теоретический материал

Справочник по процедурам и функциям

Ціль роботи: познайомити з поняттям "стринг" і виробити навички роботи із символьною інформацією в мові програмування Pascal навчитися використовувати рядки символів і безлічі при рішенні завдань.

Загальні відомості

Змінні типу String аналогічні масивам типу Char. Їхньою відмінністю є те, що число символів (довжина рядка) може динамічно мінятися в інтервалі від одиниці до заданого верхнього значення.

Перед виконанням роботи необхідно ознайомитися із правилами опису й використання рядків, припустимих операцій над ними, що відповідають стандартними процедурами й функціями.

Приклади

Приклад1. Дано текст, слова в якому, можуть розділятися пробілами, комами, крапками й т.д. Потрібно надрукувати всі слова з подвоєною буквою "н". Етапи рішення завдання:

  1. Розіб'ємо завдання на кілька блоків а) Формування тіла програми, оголошення змінних; б) Уведення тексту; в) Очищення тексту від "непотрібних" символів до першого слова; г) Обчислення довжини першого слова; д) Пошук у слові букви "н"; е) Підрахунок вартим рядом букв "н"; ж) Печатка знайденого слова; з) Видалення першого слова; і) Якщо текст не закінчився повернення до пункту (в).

  2. Реалізуємо ці блоки на Паскале

a)

program example1;

var st, st1:string;

i,j,k,n:integer;

flag:boolean;

const

znak=[' ','.',',',':',';','!','?'];

begin

end.

Призначення змінних:

t-t- містить уведений текст

st1 - зберігає перше слово тексту

i,j,k,n - допоміжні змінні

flag - указує, що дане слово шукане

б) writeln('Уведіть текст'); readln(st);

в) repeat

while st[1] in znak do delete(st,1,1);

г) i:=1 while (not (st[i] in znak)) and (i<=length(st)) do inc(i);

st1:=copy(st,1,i-1);

flag:=false;

д) while (pos('н',st1)>0) and (not flag) do begin

е) j:=pos('н',st1); n:=j; k:=0;

while st1[n]='н' do begin inc(n); inc(k); end;

if k=2thenflag:=true;

delete(st1,j,k)

end;

ж) if flag then writeln(copy(st,1,i-1));

з) delete(st,1,i);

и) until st='';

Приведемо програму цілком:

program example1;

var st, st1:string;

i,j,k,n:integer;

flag:boolean;

const

znak=[' ','.',',',':',';','!','?'];

begin

writeln('Уведіть текст');

readln(st);

repeat

while st[1] in znak do delete(st,1,1);

i:=1;

while (not (st[i] in znak)) and (i<=length(st)) do inc(i);

st1:=copy(st,1,i-1);

flag:=false;

while (pos('н',st1)>0) and (not flag) do begin

j:=pos('н',st1); n:=j; k:=0;

while st1[n]='н' do begin inc(n); inc(k); end;

if k=2thenflag:=true;

delete(st1,j,k)

end;

ifflagthenwriteln(copy(st,1,i-1));

delete(st,1,i);

untilst='';

readln;

end.

Контрольні питання

  1. Як описуються строкові змінні?

  2. Яка максимальна довжина рядка припустима в Pascal?

  3. Які операції припустимі над строковими даними?

  4. У чому відмінність строкової змінної від масиву символів?

  5. Які стандартні процедури й функції для роботи з рядками ви знаєте?

  6. Що виведе функція Copy(x,Pos(' ',x)+1,18), якщо x='Сила є - розуму не треба'?

  7. Чому дорівнює значення x[0] після присвоювання x:='питання'?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]