Согласие на обработку персональных данных.

09.05.2021
Новые видео и статья Ваша первая программа на Python.

03.05.2021
Новый выпуск журнала Автоматизация и Программирование.

28.04.2021
Новые видео и статья Возврат значений через параметры.

26.04.2021
Новые видео и статья Как получить содержимое элемента в JavaScript.

24.04.2021
Новые видео и статья Процедура GetDir.



Раздел: Как стать программистом / Секреты программирования /

Возврат значений через параметры

Сегодня рассмотрим один очень простой вопрос, который, однако, не понимают некоторые начинающие программисты. А на мысль написать эту статью меня натолкнул спор с одним начинающим программистом в комментариях о том, что в Паскале значения возвращать могут только функции, но не процедуры...

На самом деле это, конечно, не так. Потому что значения могут возвращать и функции, и процедуры. Только у функций, в отличие от процедур, есть ещё один способ возврата значений - самый простой (для этого в общем-то и придуманы функции и это единственное отличие функций от процедур):

x := MyFunc;

Здесь переменной х присваивается результат работы функции MyFunc. Этот код прост и понятен, поэтому в тех случаях, когда необходимо вернуть одно значение, чаще всего используются именно функции.

Но что делать, если надо вернуть не одно, а несколько значений в несколько переменных? Это возможно. Сделать это можно одним из двух способов. Способ первый - использовать указатели. Но это сложновато для новичков, поэтому данный способ здесь рассматривать не будем.

А вот второй способ простой - надо лишь перед параметром функции/процедуры, в который надо вернуть значение, указать ключевое слово var. Например, так:

procedure MyProc(var x : WORD);
begin
  x := x + 100;
end;

Здесь мы передаём в процедуру значение переменной х, и в эту же переменную возвращаем результат.

Точно также это будет работать и в функциях. Разумеется, таких переменных может быть несколько:

procedure MyProc2(var x, y : WORD);
begin
  x := x + y;
  y := y * y;
end;

Ну а теперь пример программы, где это используется:

program myprog;

var ResP, ResF : WORD;

procedure MyProc(var x : WORD);
begin
  x := x * x;
end;

procedure MyProc2(var x, y : WORD);
begin
  x := x + y;
  y := y * y;
end;

function  MyFunc(var x : WORD) : WORD;
begin
  x := x * x;
  Result := x * x;
end;

//*******************************************************************
// ОСНОВНАЯ ПРОГРАММА
//*******************************************************************
begin
  ResP := 2;
  MyProc(ResP);         //ResP = 2
  WriteLn(ResP);        //ResP = Res * Res = 4

  ResF := MyFunc(ResP); //ResP = 4
  WriteLn(ResP);        //ResP = ResP * ResP = 16
  WriteLn(ResF);        //ResF = ResP * ResP = 256

  ResP := 2; ResF := 3;
  MyProc2(ResP, ResF);
  WriteLn(ResP);        //ResP = ResP + ResF = 5
  WriteLn(ResF);        //ResF = ResF * ResF = 9

  WriteLn('The end. Press ENTER...');
  ReadLn;
end.

Надеюсь, в комментариях пояснений достаточно. Вывод на экран будет таким:

Возврат значений через параметры


Директивы компилятора Директивы компилятора
Как это ни странно, но даже многие опытные программисты не используют директивы компилятора, считая их чем-то ненужным и бесполезным. А между тем, директивы компилятора - это очень классная штука. Если их умело применять в своих программах, то можно существенно сократить время на разработку и уменьшить количество рутинных операций. Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика