Циклы. Возможные ошибки
Материал из Вики проекта 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.