program z1;//имя программы
var a:real;b,c,d:integer;//объявление глобальных переменных
function M (x,y:integer): integer;//название функции, параметры, тип результата
begin//тело функции
if x>y then M:=x else M:=y//неполный условный оператор
end;
begin//тело программы
read (a,b);//ввод значений переменных
if frac(a) >= 0.5 then c:=trunc(a)+1 else c:=trunc(a);//математическое округление
d:= M (b,c);//вызов функции
write(d)//вывод результата
end.
Объяснение:
картинка 1 - блок-схема программы
картинка 2 - блок-схема функции
математическое округление, чтобы 2,5 было равно 3, а не 2 как при использовании функции round
Месяц находим методом половинного деления.
Двоичная запись числа 366 размещается в 9 битах (в 8 битах размещается только 256 чисел , а в 9 битах - уже 512).
То есть , понадобится задать 8 вопросов и девятой фразой будет ответ.
В году 365 (366) дней. Пусть 366, для 365 рассуждение то же.
Рассмотрим самый худший вариант
Середина года - день номер 366/2=183. Это 1 июля.
Первый вопрос: День рождения в первой половине года?
Допустим, да.
Второй вопрос: День рождения в первом квартале?
Допустим, нет. Следовательно во втором.
Второй квартал - это дни с номерами от 92 до 182. Середина - среднее арифметическое. (92+182)/2=137. Это дата 17 мая.
Третий вопрос: День рождения позднее 17 мая?
Допустим, нет.
Следовательно, интервал дат 1 апреля - 17 мая, 91 день. Опять делим на 2, сужая интервал до 22 дней. Это дата 22 апреля.
Четвертый вопрос: День рождения позднее 22 апреля?
Допустим, нет.
Новый диапазон поиска - 23 апреля - 17 мая. Половиним его.
Пятый вопрос: День рождения позднее 29 апреля?
Допустим, нет.
Поиск сузился до 23 - 29 апреля. Снова берем половину.
Шестой вопрос: День рождения позднее 26 апреля?
Допустим, нет.
Интервал дат 23-26 апреля. Половиним.
Седьмой вопрос: День рождения позднее 24 апреля?
Допустим, да.
Интервал дат 25-26 апреля.
Восьмой вопрос: День рождения 25 апреля?
Допустим, нет
Девятая фраза: Ваш день рождения 26 апреля.
A:array[0..10000] of integer;
B,i:integer;
Begin
i:=0;
Read(B);
While B<>0 do
Begin
A[i]:=B;
i:=i+1;
Read(B);
End;
B:=0;
i:=0;
While A[i]<>0 do
Begin
if A[i] mod 5 = 0 then B:=B+1;
i:=i+1;
End;
Write('Количество чисел, кратных пяти: ',B);
End.