Раздел: Как стать программистом / Секреты программирования /
Возврат значений через параметры
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), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |