ЗАДАЧА № 69
Постановка задачі:
Баба–Яга записалася на курси водіїв літальних апаратів. Але справи в неї були кепські, бо вона ніяк не могла запам’ятати, яким чином визначається тривалість польоту, якщо відомі швидкість і відстань. Довелося їй звернутися по допомогу до Хлопчика–Мізинчика, який швиденько написав їй шпаргалку, куди Бабі–Язі треба було лише підставити свої значення. Як виглядала послідовність дій у цій шпаргалці і як нею користувалася Баба–Яга?
Аналіз алгоритму:
Очевидно, що «шпаргалку» Хлопчика–Мізинчика можна оформити як допоміжний алгоритм. Параметрами, що передаються у цей алгоритм, будуть швидкість літального апарату та відстань, яку необхідно подолати, а вихідним параметром – шукана тривалість польоту. Вхідні параметри процедури повинні бути параметрами–значеннями, а вихідний параметр – параметром–змінною. Позначимо у підпрограмі формальні параметри наступним чином: V – швидкість літального апарату; S –відстань, що необхідно подолати; Т – тривалість польоту.
В основній програмі ті самі змінні будуть мати відповідно імена: X, Y та М (імена змінних у основній програмі бажано, щоб не збігалися з іменами локальних параметрів підпрограми, тому їх вибір є випадковим).
Текст програми:
Program Task_69;
Uses crt;
Var X, Y, M:real;
Procedure Solution (V, S: real; var T: time);
Begin T:=S/V; End;
Begin
Clrscr;
Write(‘Введіть швидкість літального апарату: ‘);
Readln(X);
Write(‘Введіть відстань між населеними пунктами: ‘);
Readln(Y);
If (X<=0) or (Y<0)>
else
begin
Solution(X, Y, M); {Виклик процедури}
Writeln(‘Тривалість польоту –> ‘, М:6:2);
end;
Readkey;
End.
ЗАДАЧА № 70
Постановка задачі:
Створити підпрограму, яка б із тексту S вилучала вказаний символ х і обчислювала кількість вилучень. У програмі організувати виклик цієї підпрограми.
Аналіз алгоритму:
Очевидно, що підпрограма, яка виконує дану задачу, повинна мати три формальних параметри. Позначимо їх наступним чином: S – заданий текст (змінна рядкового типу string); x – символ, що підлягає вилученню (змінна символьного типу char); count – кількість вилучень (числова змінна цілого типу, наприклад byte).
Параметр х повинен бути параметром-значенням (вхідний параметр), а параметри S та count - параметрами-змінними (вихідні параметри). Рядок S фактично є і вхідним, і вихідним, тому що за умовою задачі саме в ньому необхідно здійснити вилучення заданих символів.
Для виконання поставленої задачі, на наш погляд, зручніше використовувати цикл з передумовою, тому що після вилучення символів з рядку він змінює свою довжину, і використання циклу з параметром (for) може призвести до помилки. Крім того, зверніть увагу на те, що зміна індексу і (номер поточної позиції рядка) виконується тільки у випадку, якщо шуканий символ не знайдено. Це пов’язано з тим, що рядок може містити цей символ у сусідніх позиціях, і після вилучення поточного символу на ту саму позицію попадає знову шуканий символ.
Оформлення основної програми, на наш погляд, не повинно викликати сумнівів. Зазначимо лише, що відповідні фактичні параметри у запропонованій програмі будуть називатися A (заданий текст), Ch (символ, що підлягає вилученню), N (кількість вилучень).
Текст програми:
Program Task_70;
Uses crt;
Var A:string; ch:char; N:byte;
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+1;
delete(S, i, 1);
end
else i:=i+1;
end;
End;
Begin
clrscr;
writeln(‘Введіть текст: ‘);
readln(A);
write(‘Введіть шуканий символ: ‘);
readln(ch);
Solution(ch, A, N);
writeln(‘Результуючий текст: ‘, A);
writeln(‘Кількість виконаних вилучень: ‘, N);
readkey;
End.
Немає коментарів:
Дописати коментар