Давайте попробуем проанализировать результаты выполнения этой программы. Первоначально переменная x получит значение 1. Так как условие x<11 при этом значении x будет истинным, что начнется выполнение тела цикла. Внутри тела цикла значение переменной x увеличится на единицу (то есть станет равным 2). Эта двойка будет выведена на экран. После этого снова будет проверено условие x<11, которое также будет истинным. Таким образом, снова будет выполняться тело цикла, внутри которого произойдет увеличение значения переменной x (теперь оно станет равным 3) и вывод его на экран.

    Мы пропустим несколько итераций и проанализируем "поведение" компьютера, когда x=10. Допустим, что это значение компьютер только что вывел на экран (то есть выполнился второй оператор тела цикла). После этого происходит проверка условия x<11, которое, естественно, является истинным. Раз это условие истинно, то выполняется тело цикла. Здесь переменная x становится равной 11, но так как проверка истинности условия не происходит при выполнении тела цикла, то тело цикла продолжает выполняться, и на экране появляется число 11. Таким образом, при выполнении этой программы на экране компьютера мы получим числа 2, 3, 4, ..., 10, 11.


Как изменить эту "неправильную" программу, чтобы она выводила первые 10 натуральных чисел (конечно, не переставляя обратно строки x:=x+1; и WriteLn(x);)?

Готовую программу можно получить здесь.