ЗАДАЧА № 38
Постановка задачі:
Перевірка коректності введення. Дано три числа, що задають величини кутів трикутника. Визначити, чи можна побудувати трикутник, що має задані кути. Якщо ні, користувач повинен ввести інші дані.
Текст програми:
Program Task_38;
Uses crt;
Var a, b, c: integer;
Begin
Clrscr;
Repeat
Write(‘Введіть величини кутів трикутника: ‘);
Readln(а, b, с);
Until (a>0)and(b>0)and(c>0)and(a+b+c)=180;
End.
ЗАДАЧА № 39
Постановка задачі:
На дверях ліфта висіло загрозливе попередження про те, що двері самі зачиняються в той самий момент, коли зайвий за вагою пасажир переступить поріг ліфта. Котрий пасажир постраждає, якщо ліфт витримує вагу не більше S кг, а вага пасажирів, що стоять у черзі до ліфта, дорівнює відповідно a1, а2, а3, . . . ап?
Аналіз алгоритму:
У цій задачі зручніше використовувати цикл з післяумовою, тому що спочатку необхідно дати можливість «увійти» пасажиру в ліфт, а потім перевіряти, чи витримає його ліфт. Умовою виходу з циклу буде перевищення сумарної ваги пасажирів, що увійшли в ліфт, деякого заданого критичного значення. Для зберігання ваги чергового пасажира в цій задачі ми будемо використовувати одну й ту саму змінну А, оскільки після перевірки вага пасажира нас уже не цікавить.
Текст програми:
Program Task_39;
Uses crt;
Var N:word; {I – номер пасажира, що увійшов у ліфт}
Sum, A, S:real;
{Sum – сумарна вага пасажирів, що знаходяться в ліфті,
А – вага чергового пасажира, що увійшов до ліфта,
S – критична вага, що може бути піднята ліфтом}
Begin
Clrscr;
Sum:=0;
N:=0; {На початку роботи програми в ліфті немає пасажирів}
Write(‘Введіть критичну вагу, що піднімає ліфт: ‘);
Readln(S);
Repeat
Write(‘Введіть вагу чергового пасажира: ‘);
Readln(A);
Sum:=Sum+A;
N:=N+1;
Until Sum>S;
Writeln(‘Постраждає ‘, N,‘–й пасажир.‘);
Readkey;
End.
ЗАДАЧА № 40
Постановка задачі:
Капосний папуга навчився висмикувати у дідуся Василя волосся, яке ще залишилося у того на голові. Почавши з однієї волосини, він щодня збільшував порцію вдвічі. Через скільки днів дідусеві не знадобиться гребінець, якщо спочатку в нього на голові було аж N волосин?
Аналіз алгоритму:
Аналогічно до попередньої задачі, аналізувати наявність волосся на голові слід після того, як папуга вже висмикнув чергову порцію волосся. А «знущання» над дідусем скінчиться тоді, коли гребінець йому стане непотрібним, тобто кількість волосся на голові дорівнюватиме нулю. Зверніть увагу, що в цій задачі змінна S використовується для підрахунку чергової порції волосся, що підлягає висмикуванню капосним папугою.
Текст програми:
Program Task_40;
Uses crt;
Var S, N, Sum:longint; {S – кількість волосся, що буде висмикнутим,
Sum – кількість волосся, що залишилося в дідуся на голові,
N – початкова кількість волосся}
Day:word; {Day – номер дня, який папуга знущається над дідусем}
Begin
Clrscr;
Write(‘Початкова кількість волосся в дідуся на голові: ‘) ;
Readln(N) ;
If N=0 Then writeln(‘Дідусь уже лисий, папузі нічого робити!’)
Else
begin
Day:=0;
Sum:=N;
S:=1; {Початкова кількість волосся, що буде висмикнуте папугою}
Repeat
Sum:=Sum–S; {Зменшення дідусевого волосся}
S:=S*2;
Day:=Day+1; {Підрахунок номеру дня}
Until Sum<=0;
Writeln(‘Папуга знущався над дідусем ‘, Day,‘ днів.‘);
End;
Readkey;
End.
ЗАДАЧА № 41
Постановка задачі:
На скільки років необхідно покласти в банк суму X грошових одиниць, щоб одержати суму N грошових одиниць (N > X), якщо банк нараховує 200 % річних?
Аналіз алгоритму:
Очевидно, що умовою виходу з цього циклу буде отримання заданої суми грошей. Якщо за умовою задачі N > X, то кожну перевірку ми будемо виконувати після того, як до вкладеної суми додамо щорічний банківський процент.
Текст програми:
Program Task_41;
Uses crt;
Var X, N:real; {X – початковий внесок, N – бажана сума}
Rez :real; {Rez – результуюча сума на рахунку}
Years:longint; {Years – термін, протягом якого сума перебувала в банку}
Begin
Clrscr;
Write(‘Введіть початкову суму внеску: ‘);
Readln(X);
Write(‘Введіть бажану суму внеску: ‘);
Readln(N);
If N<=X Then writeln(‘Bи вже маєте бажану суму!’)
Else
Begin
Rez:=X;
Years:=0;
Repeat
Rez:=3*Rez; {200% річних збільшують за рік внесок втричі}
Years:=Years+l;
Until Rez>=N;
Writeln(‘Ви отримаєте бажану суму через ‘, years, ‘ років.’) ;
End;
Readkey;
End.
ЗАДАЧА № 42
Постановка задачі:
Скласти програму, яка б допомогла працівникам ДАІ визначати кількість порушників перевищення швидкості на трасі, якщо відомо, що на даному проміжку траси встановлено обмеження на швидкість Vmax, a прилад фіксує швидкість автомобілів V1 V2, . . . , Vn.
Аналіз алгоритму:
У даній задачі ніяким чином не обумовлена умова виходу з циклу, тому є пропозиція: процес підрахування порушників необхідно закінчити тоді, коли чергове введене число буде недодатним (дійсно, з від’ємною або нульовою швидкістю автомобіль рухатися не може). Для тимчасового зберігання значення швидкості чергового автомобіля ми будемо знову використовувати одну змінну.
Текст програми:
Program Task_42;
Uses crt;
Var V, Vmax:real; {V – швидкість автомобіля,
Vmax – максимально дозволена швидкість}
Count:longint; {Count – кількість порушників}
Begin
Clrscr;
Count:=0; {На початку роботи порушники відсутні}
Write(‘Значення максимально дозволеної швидкості: ‘);
Readln(Vmax);
Vmax:=abs (Vmax); {Знаходження модуля для виключення помилки введення від’ємної максимальної швидкості}
Repeat
Write(‘Значення швидкості чергового автомобіля: ‘);
Readln(V);
If V>Vmax then Count:=Count+1;
Until V<=0;
Writeln(‘Кількість порушників: ‘, Count);
Readkey;
End.
ЗАДАЧА № 43
Постановка задачі:
Дано натуральне число п і дійсні числа а1, а2, …, ап. Відомо, що в заданій послідовності є хоча б одне нульове значення. Розглядаючи члени послідовності, що розташовані до першого нульового члена, визначити середнє арифметичне членів.
Аналіз алгоритму:
Для розв’язку цієї задачі значення п є зайвим, якщо серед членів послідовності буде хоча б один нульовий елемент, тому ми враховувати цю змінну не будемо (хоча дітям можна пояснити, що у випадку відсутності нульового члена послідовності значення змінної п може використовуватись як додаткова умова для виходу з циклу, щоб виключити зациклення програми).
Отже, оскільки ми не знаємо, коли зустрінеться нульовий елемент, у програмі знаходиться сума всіх чисел послідовності (змінна sum) та кількість введених чисел (змінна count), а після виходу з циклу вже знаходиться безпосередньо середнє арифметичне членів послідовності як результат ділення суми на кількість чисел, зменшену на одиницю. Зменшення на одиницю відбувається тому, що фактично в тілі циклу буде підраховано один зайвий нульовий елемент (останній).
Текст програми:
Program Task_43;
Uses crt;
Var count:word; {count – кількість членів послідовності до першого нульового елемента}
a, Sum:real; {a – черговий член послідовності,
Sum – сума членів послідовності до першого «0»}
SA:real; {SA – середнє арифметичне}
Begin
Clrscr;
Sum:=0;
count:=0; {Початкові значення дорівнюють «0»}
repeat
write(‘Введіть черговий член послідовності: ‘) ;
readln(a);
Sum:=Sum+a;
count:=count+1;
until a=0;
SA:=Sum/(count–1);
Writeln(‘Середнє арифметичне = ‘, SA:8:2);
Readkey;
End.
Немає коментарів:
Дописати коментар