Для того, чтобы эта программа заработала надо добавить перед описанием процедуры F следующую строчку: procedure G(n: integer);forward; Так как в процедуре F есть вызов процедуры G описанной дальше по тексту программы. После исправления кода и запуска программы с F(12) получим 17 звездочек. По шагам это будет выглядеть так:
Вызов процедуры F и выполнение * n = 12 * n = 12 Вызов процедуры G и выполнение * n = 11 * n = 11 Вызов процедуры F и выполнение * n = 9 * n = 9 Вызов процедуры G и выполнение * n = 8 * n = 8 Вызов процедуры Fи выполнение * n = 6 * n = 6 Вызов процедуры G и выполнение * n = 5 * n = 5 Вызов процедуры F и выполнение * n = 3 * n = 3 Вызов процедуры G и выполнение * n = 2 * n = 2 Вызов процедуры F и выполнение * n = 0
Var - список переменных переменные а,с присваивают тип integer, т.е. целые числа; b присваивает тип string, т.е строковый тип begin - начало программы readln - оператор ввода, окончание ln осуществляет переход на новую строку str(a,b) - т.е. преобразовать данные числа в строку переменная b так же присваивает тип строковый Val(b,a,c) где: b- строка, а-результат, с-позиция с которой произошла ошибка преобразования или 0 writeln(а) - оператор вывода, окончание ln осуществляет переход на новую строку end. - конец программы
procedure G(n: integer);forward;
Так как в процедуре F есть вызов процедуры G описанной дальше по тексту программы.
После исправления кода и запуска программы с F(12) получим 17 звездочек. По шагам это будет выглядеть так:
Вызов процедуры F и выполнение
* n = 12
* n = 12
Вызов процедуры G и выполнение
* n = 11
* n = 11
Вызов процедуры F и выполнение
* n = 9
* n = 9
Вызов процедуры G и выполнение
* n = 8
* n = 8
Вызов процедуры Fи выполнение
* n = 6
* n = 6
Вызов процедуры G и выполнение
* n = 5
* n = 5
Вызов процедуры F и выполнение
* n = 3
* n = 3
Вызов процедуры G и выполнение
* n = 2
* n = 2
Вызов процедуры F и выполнение
* n = 0
переменные а,с присваивают тип integer, т.е. целые числа; b присваивает тип string, т.е строковый тип
begin - начало программы
readln - оператор ввода, окончание ln осуществляет переход на новую строку
str(a,b) - т.е. преобразовать данные числа в строку
переменная b так же присваивает тип строковый
Val(b,a,c) где: b- строка, а-результат, с-позиция с которой произошла ошибка преобразования или 0
writeln(а) - оператор вывода, окончание ln осуществляет переход на новую строку
end. - конец программы