оператор присваивания :=
оператор ввода read(x1,x2,...,xn) или readln(x1,x2,...,xn)
оператор вывода write(x1,x2,...,xn) или writeln(x1,x2,...,xn)
условный оператор if условие then оператор 1 else оператор 2
оператор варианта case управляющая переменная of
набор значений1: оператор1;
набор значений2: оператор2;
...
набор значенийn: операторN
else
альтернативный оператор
end;
оператор цикла с предусловиями while ... do
оператор цикла с постусловием repeat ... until
оператор цикла for ... do
оператор break осуществляет немедленный выход из циклов repeat, while, for.
оператор continue начинает новую итерацию цикла, даже если предыдущая не была завершина.
оператор exit осуществляет выход из подпрограммы.
оператор halt прекращает выполнение программы и возвращает код завершения в операционную систему.
Объяснение:
procedure F(n: integer);
begin
if n>0 then begin
Write (n);
F(n-2);
F(n div 4);
end
end;
begin
F(9);
end.
На выходе будет 97531112
Если нужна трассировка, её можно сделать примерно так:
procedure F(n: integer);
begin
Writeln('Вход');
if n>0 then begin
Writeln ('В выходную строку: ',n);
Writeln('Вызов F(n-2)');
F(n-2);
Writeln('Вызов F(n div 4)');
F(n div 4);
end;
Writeln('Выход')
end;
begin
F(9);
end.
Результат трассировки:
Вход
В выходную строку: 9
Вызов F(n-2)
Вход
В выходную строку: 7
Вызов F(n-2)
Вход
В выходную строку: 5
Вызов F(n-2)
Вход
В выходную строку: 3
Вызов F(n-2)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 1
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
Вызов F(n div 4)
Вход
В выходную строку: 2
Вызов F(n-2)
Вход
Выход
Вызов F(n div 4)
Вход
Выход
Выход
Выход
бро, я в 5 классе... но раз ты так хочешь..
Теория
div - это целочисленное деление. Это значит что при деление на числа, остаток отбрасывается.
Пример (10 div 3):
1. Если мы просто разделим 10 на 3, то мы получим 3.3333. При деление целочисленным делением (div-ом), дробная часть отбрасывается. И ответ будет просто 3.
Вот еще примеры:
2 div 2 = 1 | (2 / 2 = 0)
2 div 3 = 0 | (2 / 3 = 0.66)
5 div 3 = 1 | (5 / 3 = 2)
13 div 6 = 2 | (13 / 6 = 2.16)
Решение
Изначально s = 0, а i = 3
Цикл repeat-until означает что цикл будет совершаться, пока условие в until не будет выполнено.
Мы попадаем в цикл. Сначала выполняется s + 5, что будет равно 5, а после выполняется div с i: 5 div 3. Мы получаем ответ 1 и это же значение заносится в переменную s. От переменной i отнимается 1 и оно становится 2.
После итерации цикла, происходит проверка условия until. Так как 2 не меньше 1, цикл вновь запускается
Вторая итерация. s уже равна 1, значит: 1 + 5 div 2 -> 6 div 2 -> 3. s = 3. От i опят отнимается единица.
Опять завершаем цикл и проверяем условие 1 не меньше 1 (они равны), значит будет еще одна итерация.
Третья итерация. s = 3, значит 3 + 5 div 1 -> 8 div 1 -> 8. В s заносится 8. От i отнимаем 1 и i = 0
Так как 0 < 1, условие выполняется и мы выходим из цикла. Программа завершена. В s находится цифра 8, в i лежит 0