У жовтні розглядаються такі навчальні теми:

1. Методи побудови алгоритмів.

2. Основні поняття мови програмування.

Тьютори:

- Зуб В.В., учитель математики, директор Прилуцької загальноосвітньої школи І-ІІІ ступенів № 7 Прилуцької міської ради, учитель-методист;

- Бондаренко С.М., учитель математики та інформатики Прилуцької загальноосвітньої школи І-ІІІ ступенів № 7 Прилуцької міської ради, учитель-методист.

Теоретичний матеріал до навчальних тем:
1. Методи побудови алгоритмів
2. Основні поняття мови програмування
Самостійна практична робота з 25 вересня по 15 жовтня 2016 року.
Розв'язання задач відбувається на сайті http://www.e-olymp.com/у формі змагання в групі Учні Інтернет-школи "Юний програміст"
Задачі:

Коментарі та розв'язки

Пиріжки

Пиріжок у шкільній їдальні коштує a гривень та b копійок. Знайдіть скільки гривень та копійок заплатить Петрик за n пиріжків.

Вхідні дані: Три натуральних числа a, b, n (0 ≤ a,b, n ≤ 100).

Вихідні дані: Через пропуск два числа: вартість покупки у гривнях та копійках.

Вхідні дані

1 25 2

Вихідні дані

2 50

Дана задача потребує єдиного розуміння: 100коп. = 1грн. Тож краще одразу все перевести у копійки, провести обрахунки, а знайдений результат представити у гривнях і копійках.

var a,b,n,x,y:integer;beginread(a,b,n); x:=(a*100+b)*n div100;
 y:=(a*100+b)*n mod100;
write(x,' ',y);
end.

Знижки

У супермаркеті електроніки, якщо вірити телерекламі, існує система знижок: з двох куплених товарів повністю сплачується тільки вартість дорожчого товару, а інший надається безкоштовно. Якої суми достатньо, щоб оплатити покупку трьох товарів, якщо відома ціна кожного.

Вхідні дані: Три натуральних числа a, b, с – ціни трьох товарів (1 ≤ a,b, с ≤ 10000).

Вихідні дані: Вартість покупки.

Вхідні дані

8 11 6

Вихідні дані

17

 Для розв'язання задачі достатньо зрозуміти, що оплаті підлягають найдорожчий та найдешевший товар. Отож, із трьох даних чисел потрібно вибрати найбільше та найменше. Як це реалізувати – справа особиста. Я пропоную використати команду розгалуження, як найпростішу для розуміння початківцем. 
var a,b,c,min,max:integer;
begin
 read(a,b,c);
if (a>=b) and (a>=c) thenmax:=a;
if (b>=a) and (b>=c) thenmax:=b;
if (c>=b) and (c>=a) thenmax:=c;
if (a<=b) and (a<=c) thenmin:=a;
if (b<=a) and (b<=c) thenmin:=b;
if (c<=b) and (c<=a) thenmin:=c;
 write(min+max);
end.

Три грибники

Три грибники Петро, Василь та Микола, повертаючись з лісу додому, вирішили влаштувати привал, а заодно і перекусити. Як це у нас прийнято, через деякий час кожен почав вихвалятись своїми сьогоднішніми успіхами, а з часо і ділитись знайденими грибами зі своїми товаришами. Перед привалом у кожного з них була деяка цілочисельна кількість грибів.

Спочатку Петро дав Василю та Миколі по стільки грибів, скілько у них вже було. Микола швидко зрозумів, що так будет не по-братському, і дав Василю та Петру по стільки грибів, скільки у них стало. Василь не міг відстати від співтоваришів і також дав кожному з друзів по стільки грибів, скілько у них на цей моменту було у наявності. І тут друзі з подивом виявили, що у всіх стало грибів порівну.

Скілько грибів було у кожного перед привалом, якщо відомо, що всі разом вони зібрали N грибів?

Вхідні дані

У єдиному рядку знаходиться єдине натуральне число N (N ≤ 30000).

Вихідні дані

У єдиному рядку вивести через пропуск кількість грибів перед привалом у Петра, Василя та Миколи. відповідно. Гарантується, що всі вхідні дані коректні.

Вхідні дані

120

Вихідні дані

65 20 35

Розв'язок даної задачі може бути організований двома цікавими шляхами.

1. Провести зворотній перерозподіл з кінця і отримати шукані числа. Даний спосіб також є досить простим для розуміння учнем будь-якого віку. Детальніше див. в таблиці.

Петро Василь Микола
40 40 40
40 / 2 = 20 40 + 20 + 20 = 80 40 / 2 = 20
20 80 20
20 / 2 = 10 80 / 2 = 40 20 + 10 + 40 = 70
10 40 70
10 + 20 + 35 = 65 40 / 2 = 20 70 / 2 = 35
65 20 35

var n,m,v,p:integer;

begin

read(n);

p:=n div 3; m:=p; v:=p;

p:=p div 2; m:=m div 2; v:=v+p+m;

p:=p div 2; v:=v div 2; m:=m+p+v;

v:=v div 2; m:=m div 2; p:=p+m+v;

write(p,' ',v,' ',m);

end.

2. Уважно прочитавши умову можна зрозуміти, що відбувається лінійний перерозподіл наявних грибів, і результат можна отримати, застосувавши математичне поняття "пропорційний поділ". Тобто, a:b:c=65:20:35. Для полегшення обчислень можна провести скорочення і отримати відношення 13:4:7. Доведення даного факту є не таким простим, тому даний спосіб краще розуміють учні старшого віку.

 var a,b,c,n:integer;
begin
read(n); 
a:=n*13div24;
 b:=n*4div24;
 c:=n*7div24;
write(a,' ',b,' ',c);
end.

Скільки до Нового Року?

У Діда Мороза є годинник, який в секундах показує скільки залишилось до кожного Нового Року. Оскільки Дід Мороз вже літня людина, то деякі математичні операції він не в змозі швидко виконувати. Допоможіть Діду Морозу визначити скільки повних днів, годин, хвилин та секунд залишилось до наступного Нового Року, якщо відомо скільки залишилось секунд, тобто розкладіть час в секундах на повну кількість днів, годин, хвилин та секунд.

Вхідні дані

У єдиній стрічці ціле число N (0 < N≤ 31500000) – кількість секунд, що залишилось до Нового Року.

Вихідні дані

В одній стрічці через пропуск чотири цілих числа – кількість повних днів, годин, хвилин та секунд. Після останного числа пропуск відсутній.

Вхідні дані

21009

Вихідні дані

0 5 50 9

Учню достатньо розуміти, що 1хв містить 60с, 1 год – 60*60=3600с, а 1 доба – 24*3600с.

vard,h,m,s,n:longint;
begin
read(n);
d:=n div (24*3600); n:=n mod (24*3600);
h:=n div 3600; n:=n mod 3600;
m:=n div 60; n:=n mod 60;
 s:=n;
 write(d,' ',h,' ',m,' ',s);
end.

Відношення добутку до суми

Обчислити відношення добутку цифр натурального числа до їх суми.

Вхідні дані

Натуральне число n, що не перевищує 2·109.

Вихідні дані

Вивести відношення добутку цифр числа n до їх суми з 3 десятковими цифрами.

Вхідні дані

36

Вихідні дані

2.000

Основна проблема задачі – розкласти число на цифри. При використанні циклу це досить просто зробити, що і реалізовано у наведеній нижче програмі.

Також досить просто це зробити з використанням можливостей рядкових величин, хоч трохи і складніше в реалізації.

Використання команди розгалуження також може дати позитивний результат, але потребує багато перевірок і розуміння, що числа з різною розрядністю будуть мати різну кількість цифр. Це призводить, на мій погляд, до надмірної кількості перевірок. Такий алгоритм роботи потрібно розібрати з учнем-початківцем, але його реалізацію роботи необов'язково.

vard,s,a,n:longint;
begin
read(n);
d:=1; s:=0;
whilen>0 do
 begin
 a:=n mod 10; n:=n div 10;
 s:=s+a; d:=d*a;
 end;
 write(d/s:0:3);
end.

Білі кубики

Професор Самодєлкін задумав виготовити кубики з брусків білого кольору. Довжина кожного ребра дорівнює 1 дм. Після виготовлення кубиків професор вирішив зробити всі кубики також білого кольору. Скільки кубиків із стороною 1 дм зможе виготовити з одного бруска професор, та скільки сторін прийдеться йому пофарбувати, якщо відомо, що довжини сторін брусків - цілі числа і задані також в дециметрах.

Вхідні дані

Один рядок містить три цілих числа – розміри бруска в дм, які не перевищують 1000000.

Вихідні дані

В єдиному рядку записати через пропуск два цілих числа: кількість отриманих кубиків та кількість граней кубиків, які необхідно пофарбувати.

Вхідні дані

1 2 3

Вихідні дані

6 14

Найлегше обчислити загальну кількість отриманих кубиків. Це можна зробити або розмалювавши процес розрізання з проведенням відповідних обчислень (корисно для загального розвитку), або скориставшись елементарними математичними знаннями: кількість кубиків дорівнюватиме відношенню об'єму паралелепіпеда до об'єму кубика. Оскільки останній = 1, то загальна кількість кубиків n = a*b*c.

Визначення кількості нефарбованих граней потребує більшого мозкового напруження. Найкращий варіант – від загальної кількості граней відняти кількість фарбованих граней. Так як один кубик має 6 граней, то загальна кількість граней = 6*n.

Кількість фарбованих граней легко обчислити з використанням формули площі. Даний паралелепіпед має по 2 грані з площами a*b, a*c, b*c. Так як площа 1 грані кубика знову ж =1, то кількість фарбованих граней легко обчислити як 2*(a*b + a*c + b*c).

var a,b,c,n,k:int64;
begin
 read(a,b,c);
 n:=a*b*c;
 k:=6*n-2*(a*b+a*c+b*c);
 write(n,' ',k);
end.
Кiлькiсть переглядiв: 2137