Задача тижня 09.01.12 – 15.01.12
Термін незалежності
Розуміння того факту, що Земля під час повного оберту навколо Сонця робить більш ніж 365 обертів навколо своєї осі, а точніше – 365,24219 обертів, стало основою розробки сучасного календаря, в якому поряд із звичайними роками довжиною у 365 днів є роки високосні, довжина яких становить 366 днів. Рік є високосним, якщо його номер поділяється без залишку на 4 і не поділяється на 100, або якщо він поділяється без залишку на 400.
1. Створіть програму, яка визначатиме, скільки днів незалежності святкуватиме Україна 24 серпня заданого року.
Примітка. Акт проголошення незалежності України ухвалено 24 серпня 1991 року.
Вхідні дані
Значення Y (номер року) – натуральне число, вводиться з клавіатури.
Вихідні дані
Значення D (кількість днів існування незалежної України) – ціле число, виводиться на екран.
Якщо значення Y задає рік, що передує року ухвалення Акту, вивести значення D, яке дорівнює -1.
2. Заповніть тестову таблицю за результатами роботи програми
| № | Y | D |
| 1 | 900 | -1 |
| 2 | 1991 | 0 |
| 3 | 1992 | 366 |
| 4 | 2000 | |
| 5 | 2001 | |
| 6 | 2101 | |
| 7 | 3500 | |
| 8 | 4000 | |
| 9 | 4100 | |
| 10 | 4012 | |
| 11 | 4013 |
Аналіз розв’язку задачі «Термін незалежності»
Кількість повних років незалежності відома, тому кількість днів незалежності можна було б визначити як (Y2 – Y1)*365, якби не існувало високосних років. Отже, задача зводиться до визначення кількості високосних років за час незалежності. Кожний високосний рік додає один день до терміну незалежності.
Доречно знайти кількість додаткових днів (тобто кількість високосних років) для періоду з початку календаря до року з номером Y1, потім так само для року з номером Y2. Їх різниця дорівнюватиме шуканій кількості додаткових днів для терміну незалежності:
D1 = Y1 div 4 – Y1 div 100 + Y1 div 400;
D2 = Y2 div 4 – Y2 div 100 + Y2 div 400;
D = (Y2 – Y1)*365 + D2 – D1;
Операція div – ділення цілих чисел з відкиданням дробової частини (операція цілочисельного ділення).
Звертаємо увагу на дві обставини:
D2 – D1 ≠ (Y2 – Y1) div 4 – (Y2 – Y1) div 100 + (Y2 – Y1) div 400, оскільки операція цілочисельного ділення не має властивості розподільності.
Для правильної роботи алгоритму, реалізованого засобами конкретної мови програмування, слід правильно вибрати типи даних цілого типу: для розміщення результату тесту 7 потрібно 16 біт, у тестах 8-11 отримуємо значення, двійковий код яких складає 17 біт.
Тестова таблиця з результатами роботи програми:
| № | Y | D |
| 1 | 900 | -1 |
| 2 | 1991 | 0 |
| 3 | 1992 | 366 |
| 4 | 2000 | 3288 |
| 5 | 2001 | 3653 |
| 6 | 2101 | 40177 |
| 7 | 3500 | 551151 |
| 8 | 4000 | 733773 |
| 9 | 4100 | 770297 |
| 10 | 4012 | 738156 |
| 11 | 4013 | 738521 |
Журі оцінило надіслані розв’язки наступним чином:
| № | Учасник | Кількість балів |
| 1 | ALEX Z | 4 |
| 2 | Kolgatin Andrey | 4 |
| 3 | RomaN | 4 |
| 4 | Макс Синкевич | 4 |
| 5 | forsh3@mail.ru | 4 |
| 6 | Юрий Дончик | 4 |
| 7 | SERGEY | 3 |




