Трьом Товстунам подали на десерт кремові тістечка. Маса одного тістечка — Х кг, а маса Товстунів відповідно X1 кг, Х2 кг та Х3 кг. Перший Товстун з'їв N тістечок. Кожний наступний Товстун з'їдав у два рази більше від попереднього, але при цьому він не міг з'їсти більше половини своєї власної ваги. Скільки тістечок було з'їдено Товстунами за обідом?
Другий та третій Товстуни за умовою можуть з'їсти тістечок у два рази більше, ніж попередній Товстун, але не можуть з'їсти більше половини своєї ваги. Тому фактично в задачі необхідно перевірити, чи не перевищує кількість тістечок, що може з'їсти кожний Товстун, дозволену масу, і у відповідності до цього підрахувати кількість тістечок, що були з'їдені.
Наприклад, якщо другий Товстун може з'їсти 2 N тістечок, то вага цієї їжі буде 2 N Хкг. Але за умовою він не може з'їсти більше половини своєї ваги, тобто більше ніж X1 /2 кг. Тому якщо вага тих тістечок, що Товстун може з'їсти, не перевищує поріг X1 /2 кг, то ми до загальної кількості тістечок додаємо всі можливі, тобто 2 N, якщо ж перевищує, то ми додаємо тільки ту кількість тістечок, що не дозволяє перевищити припустимий поріг, тобто X1 /2 /X (дозволена вага їжі поділена на вагу одного "тістечка). Якщо в цьому випадку число вийде нецілим, то це означає, що Товстун з'їв тістечко не повністю. Щоб такого не трапилось, ми робимо відкидання дробової частини після ділення за допомогою функції trunc.
Програма, що реалізує цей алгоритм, має наступний вигляд:
Program Example_12;
Uses crt;
Var X,X1,X2,X3:real;
N,Counter : integer; {N - кількість тістечок, що з'їв перший Товстун; Counter - загальна кількість з'їдених тістечок}
Begin
Clrscr;
Write('Введіть вагу тістечка: ');
Readln(X);
Write('Введіть вагу Товстунів (1-го, 2-го та 3-го): ');
Readln(X1, Х2, ХЗ);
Write('Введіть кількість тістечок, що з'їв перший Товстун ') ;
Readln(N);
If (X<=0)or(X1<=0)or(X2<=0)or(X3<=0)or(N<=0)
Then writeln('Помилкові вхідні дані')
Else
Begin
Counter:=N; {3'їв перший Товстун}
If N*2*X<=X2/2 Then Counter:=Counter+2*N
Else Counter:= Counter+ trunc(X2/2/X);
If N*4*X<=X3/2 Then Counter:=Counter+4*N
Else Counter:= Counter+ trunc(X3/2/X);
Writeln('Кількість з'їдених тістечок: ', Counters
End;
Readkey;
End.
Приклад № 13
Дано натуральне число N (N>= 1000). Визначити суму першої і останньої цифр даного числа.
Для розв'язання цієї задачі ми скористаємося стандартними операціями цілочисельного ділення та остачі від ділення цілих чисел (операції divта mod).Нагадаємо, що результатом ділення числа націло на 10 буде ефект відкидання «молодшої» цифри числа (відповідно при діленні на числа 100, 1000, 10000 тощо будемо «відкидати» дві, три або чотири цифри числа). Результатом ж операції знаходження залишку від ділення на 10 буде остання цифра числа (відповідно при знаходженні залишку від ділення на 100, 1000, 10000 будемо отримувати дві останні, три останні, чотири останні цифри числа).
Наприклад:
234 div 10 = 23
9213 div 100 = 92
52 mod 10 = 2
2845 mod 1000 = 845.
Виходячи з усього сказаного, програма буде мати вигляд:
Program Example_13;
Uses crt;
Var N, First, Last : word;
{First - перша цифра числа; Last - остання цифра числа}
Begin
Clrscr;
Write('Введіть число: ');
Readln(N); Last := N mod 10;
If (N>=0) and (N<10) then First:=0;
If (N>=10) and (N<100) then First:=N div 10;
If (N>=100) and (N<1000) then First:=N div 100;
If (N=1000) then First:=l;
Writeln('Сума першої та останньої цифр дорівнює', First+Last);
Readkey;
End.
Приклад № 14
Квадратний багаточлен заданий коефіцієнтами а, b, с,де а ≠ 0. Визначити, чи корені відповідного рівняння є парними числами.
Для розв'язання цієї задачі необхідно нагадати дітям алгоритм знаходження коренів квадратного рівняння:
1) обчислити дискримінант;
2) якщо ми отримали від'ємне число, то коренів для розв'язку квадратного рівняння з даними коефіцієнтами а, b, с не існує;
3) якщо дискримінант невід'ємний, то корені рівняння знаходяться. Парність коренів можна визначити, використовуючи операцію знаходження залишку від цілочисельного ділення на 2 (парне число при цьому у залишку має 0, а непарне — 1). Зверніть увагу на те, що парність або непарність можна визначити тільки для цілих чисел.