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

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

Lazarus IDE: Основы программирования в Windows Lazarus IDE: Основы программирования в Windows

Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее...

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

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

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.

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

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


Первые шаги в программирование Первые шаги в программирование

Очень небольшая книга, которую можно прочитать буквально за 15 минут. Но эти 15 минут дадут вам представление о том, что такое программирование. И вы даже напишите свою первую программу. Для тех, кто интересуется программированием, но ещё не знает, что это такое, и не пробовал создавать программы (или пробовал, но не получилось). Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

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