Пошук

неділю, 10 січня 2010 р.

XIV. Допоміжні алгоритми

ЗАДАЧА № 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.

Немає коментарів:

Дописати коментар