Циклы. Возможные ошибки: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) Нет описания правки |
Mikst (обсуждение | вклад) (→Ссылки) |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
__NOTOC__ | |||
=== Неверный тип переменной цикла === | === Неверный тип переменной цикла === | ||
<source lang="Delphi">var x: real; | |||
begin | |||
for x := 1 to 10 do // переменная - параметр цикла не может иметь вещественный тип | |||
write(x); | |||
end.</source> | |||
=== Изменение переменной цикла в теле цикла=== | === Изменение переменной цикла в теле цикла=== | ||
'''Пример 1.''' | |||
<source lang="Delphi">var i: integer; | |||
begin | |||
for i := 1 to 10 do | |||
begin | |||
write(i); | |||
i := i + 2; // Нельзя изменять значение переменной цикла внутри цикла | |||
end; | |||
end.</source> | |||
'''Пример 2.''' | |||
<source lang="Delphi">var i: integer; | |||
begin | |||
for i := 1 to 10 do | |||
begin | |||
read(i); // Нельзя изменять значение переменной цикла внутри цикла | |||
write(i); | |||
end; | |||
end.</source> | |||
=== Использование одинаковой переменной цикла в заголовках вложенных циклов=== | === Использование одинаковой переменной цикла в заголовках вложенных циклов=== | ||
<source lang="Delphi">var i,j: integer; | |||
begin | |||
for i := 1 to 10 do | |||
for i := 1 to 10 do // ошибка: во вложенном цикле нельзя использовать параметр цикла с тем же именем | |||
begin | |||
write(i); | |||
end; | |||
end.</source> | |||
=== Неинициализированная переменная=== | === Неинициализированная переменная=== | ||
<source lang="Delphi">var | |||
i: integer; | |||
p: real; | |||
begin | |||
// Забыли инициализировать p := 1 | |||
for i := 1 to 10 do | |||
p := p * 2; | |||
write(p); | |||
end.</source> | |||
=== Зацикливание=== | === Зацикливание=== | ||
<source lang="Delphi">var x: integer; | |||
begin | |||
x := 1; | |||
while x>0 do // ошибка: условие все время остается истинным | |||
begin | |||
writeln(x); | |||
x := x + 1; | |||
end; | |||
end.</source> | |||
=== Переполнение=== | === Переполнение=== | ||
<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> | |||
=== Сравнение вещественных чисел на равенство === | === Сравнение вещественных чисел на равенство === | ||
<source lang="Delphi">begin | |||
if 0.3*3 = 0.9 then // Значения не равны ввиду ошибки округления при работе с вещественными числами | |||
writeln('Равны') | |||
else writeln('Не равны'); | |||
end.</source> | |||
== Ссылки == | == Ссылки == | ||
[[ | *[[Программы для начинающих]] | ||
*[http://pascalabc.net/ru/programmyi-i-algoritmyi-dlya-nachinayuschih.html Сайт PascalABC.NET: Программы и алгоритмы для начинающих] |
Текущая версия от 15:49, 19 января 2010
Неверный тип переменной цикла
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.