Циклы. Возможные ошибки
Материал из Вики проекта PascalABC.NET
Неверный тип переменной цикла
var x: real; begin for x := 1 to 10 do // переменная - параметр цикла не может иметь вещественный тип write(x); end.
Изменение переменной цикла в теле цикла
Пример 1.
var i: integer; begin for i := 1 to 10 do begin write(i); i := i + 2; // Нельзя изменять значение переменной цикла внутри цикла end; end.
Пример 2.
var i: integer; begin for i := 1 to 10 do begin read(i); // Нельзя изменять значение переменной цикла внутри цикла write(i); end; end.
Использование одинаковой переменной цикла в заголовках вложенных циклов
var i,j: integer; begin for i := 1 to 10 do for i := 1 to 10 do // ошибка: во вложенном цикле нельзя использовать параметр цикла с тем же именем begin write(i); end; end.
Неинициализированная переменная
var i: integer; p: real; begin // Забыли инициализировать p := 1 for i := 1 to 10 do p := p * 2; write(p); end.
Зацикливание
var x: integer; begin x := 1; while x>0 do // ошибка: условие все время остается истинным begin writeln(x); x := x + 1; end; end.
Переполнение
var n: integer; x: real; begin n := integer.MaxValue; // максимальное целое writeln(n); n := n + 1; // следующее за максимальным целым writeln(n); writeln; x := real.MaxValue; // максимальное вещественное writeln(x); x := x * 2; // бОльшее, чем максимальное вещественное writeln(x); // в ряде компиляторов возникает ошибка переполнения. // Здесь x получает значение "бесконечность" end.
Сравнение вещественных чисел на равенство
begin if 0.3*3 = 0.9 then // Значения не равны ввиду ошибки округления при работе с вещественными числами writeln('Равны') else writeln('Не равны'); end.
