Циклы. Возможные ошибки: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) |
Mikst (обсуждение | вклад) |
||
Строка 60: | Строка 60: | ||
=== Переполнение=== | === Переполнение=== | ||
<source lang="Delphi">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.</source> | |||
=== Сравнение вещественных чисел на равенство === | === Сравнение вещественных чисел на равенство === | ||
== Ссылки == | == Ссылки == | ||
[[Алгоритмы_для_начинающих_на_примерах|Алгоритмы для начинающих]] | [[Алгоритмы_для_начинающих_на_примерах|Алгоритмы для начинающих]] |
Версия от 12:32, 28 ноября 2009
Неверный тип переменной цикла
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.