Циклы. Возможные ошибки: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Строка 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.

Сравнение вещественных чисел на равенство

Ссылки

Алгоритмы для начинающих