Var X,Y,M:real;
Begin
Clrscr;
Write(‘Введіть швидкість літального апарату: ‘);
Readln(X);
Write(‘Введіть відстань між населеними пунктами: ‘);
Readln(Y);
If (X<=0) or (Y<0) then writeln(‘He коректні вхідні дані.’)
else
begin
Solution(X,Y,M); {Виклик процедури}
Writeln(‘Тривалість польоту -> ‘,М:6:2);
end;
Readkey;
End.
ЗАДАЧА № 463
Умова: Створити підпрограму, яка б із тексту S вилучала вказаний символ х і обчислювала кількість вилучень. У програмі організувати виклик цієї підпрограми.
Розв’язування: Очевидно, що підпрограма, яка виконує дану задачу, повинна мати три формальних параметри. Позначимо їх наступним чином: S - заданий текст (змінна рядкового типу string); x - символ, що підлягає вилученню (змінна символьного типу char); count- кількість вилучень (числова змінна цілого типу, наприклад byte).
Параметр х повинен бути параметром-значенням (вхідний параметр), а параметри 5 та соип/параметрами-змінними (вихідні параметри). Рядок 5 фактично є і вхідним, і вихідним, тому що за умовою задачі саме в ньому необхідно здійснити вилучення заданих символів.
Для виконання поставленої задачі, на наш погляд, зручніше використовувати цикл з передумовою, тому що після вилучення символів з рядку він змінює свою довжину, і використання циклу з параметром (for) може призвести до помилки. Крім того, зверніть увагу на те, що зміна індексу і (номер поточної позиції рядка) виконується тільки у випадку, якщо шуканий символ не знайдено. Це пов’язано з тим, що рядок може містити цей символ у сусідніх позиціях, і після вилучення поточного символу на ту саму позицію попадає знову шуканий символ.
Оформлення основної програми, на наш погляд, не повинно викликати сумнівів. Зазначимо лише, що відповідні фактичні параметри у запропонованій програмі будуть називатися Л (заданий текст), ch (символ, що підлягає вилученню), ^(кількість вилучень). Програма, що виконує запропонований алгоритм, має наступний вигляд:
Program Example_463;
Uses crt; (Підключення бібліотеки}
Procedure Solution (x:char; var S:string; var count:byte);
var і:byte; (локальна змінна для організації циклу}
Begin
count:=0; і:=1;
while i<=length(S) do
begin
if S[i]=x
then
begin
count:=count+l;
delete(S,i,l);
end
else i:=i+1;
end;
End;
Var A:string; ch:char; N:byte;
Begin
clrscr;
writeln(‘Введіть текст: ‘);
readln(A);
write(‘Введіть шуканий символ: ‘);
readln(ch);
Solution(ch,A,N);
writeln(‘Результуючий текст: ‘,A);
writeln(‘Кількість виконаних вилучень: ‘,N);
readkey;
End.
Домашнє завдання:
• повторити теоретичний матеріал за попередні уроки;
• задачі з запропонованого підручника №419, №424, №426, №430.