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

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
(Новая: == Ссылки == Алгоритмы для начинающих)
 
мНет описания правки
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
__NOTOC__
=== Невозвращение значения функции по одной из ветвей алгоритма===
<source lang="Delphi">function Bad(x: integer): integer;
begin
  if x>0 then
    Result := 777
  // При x<=0 значение функции непредсказуемо 
end;
begin
  writeln(Bad(-2)); 
end.</source>
=== Описание переменной цикла, используемого в процедуре, как глобальной===
<source lang="Delphi">var i: integer;
procedure Bad;
begin
  for i := 1 to 10 do // Переменная-параметр цикла for должна описываться подпрограмме, где используется цикл
    write(i);
end;
begin
  for i := 1 to 10 do
    Bad;
end.</source>
=== Передача выходных параметров по значению ===
<source lang="Delphi">procedure BadInc(i: integer);
begin
  i := i + 1;
end;
var i: integer;
begin
  i := 5;
  writeln(i);
  BadInc(i); // меняется копия переменной i, а не сама переменная i. Нееобходимо использовать var-параметр
  writeln(i);
end.</source>
== Ссылки ==
== Ссылки ==
[[Алгоритмы_для_начинающих_на_примерах|Алгоритмы для начинающих]]
*[[Программы для начинающих]]
*[http://pascalabc.net/ru/programmyi-i-algoritmyi-dlya-nachinayuschih.html Сайт PascalABC.NET: Программы и алгоритмы для начинающих]

Текущая версия от 15:50, 19 января 2010

Невозвращение значения функции по одной из ветвей алгоритма

function Bad(x: integer): integer;
begin
  if x>0 then 
    Result := 777 
  // При x<=0 значение функции непредсказуемо  
end;

begin
  writeln(Bad(-2));  
end.

Описание переменной цикла, используемого в процедуре, как глобальной

var i: integer;

procedure Bad;
begin
  for i := 1 to 10 do // Переменная-параметр цикла for должна описываться подпрограмме, где используется цикл
    write(i);
end;

begin
  for i := 1 to 10 do
    Bad;
end.

Передача выходных параметров по значению

procedure BadInc(i: integer);
begin
  i := i + 1;
end;

var i: integer;

begin
  i := 5;
  writeln(i);
  BadInc(i); // меняется копия переменной i, а не сама переменная i. Нееобходимо использовать var-параметр
  writeln(i);
end.

Ссылки