По структуре процедура почти полностью аналогична программе. Однако в блоке процедуре отсутствует раздел подключения модулей. Блок состоит из двух частей: описательной и исполнительной. В описательной части содержится описание элементов процедуры.
А в исполнительной части указываются действия с доступными процедуре элементами программы (например, глобальные переменные и константы), позволяющие получить требуемый результат. Раздел инструкций процедуры отличается от раздела инструкций программы только тем, что после ключевого слова End, завершающего этот раздел, ставится точка с запятой, а не точка.
Для обращения к процедуре используется инструкция вызова процедуры. Она состоит из имени процедуры и списка аргументов, заключенного в круглые скобки. Операторы, которые должны выполняться при запуске процедуры, содержатся в операторной части модуля процедуры.
Иногда требуется, чтобы процедура вызывала сама себя. Такой способ вызова называется рекурсией. Рекурсия полезна в случаях, когда основную задачу можно разбить на подзадачи, каждая из которых реализуется по алгоритму, совпадающему с основным.
Подпрограммы Pascal. Параметры–значения и параметры–переменные 4/4
Использование рассмотренных нами на предыдущих занятиях процедур без параметров оправдано только в том случае, если в них не используется обращение к глобальным (объявленным во внешней программе) параметрам. Связано это с тем, что использование таких подпрограмм будет ограничено той программой, для которой они были написаны, и затруднено для других программ.
Параметры, которые записываются в скобках после имени описываемой процедуры называются ФОРМАЛЬНЫМИ ПАРАМЕТРАМИ. После имени формального параметра обязательно указывается его тип.
Указанные после имени процедуры параметры указывают на то, что для выполнения данной процедуры необходимы дополнительные данные.
Для выполнения процедуры в программе необходимо осуществить её ВЫЗОВ. Вызов процедуры с параметрами должен быть сопровождён передачей дополнительных данных, необходимых для работы этой процедуры. Таким образом, во время вызова процедуры ФОРМАЛЬНЫЕ (просто занимающие место) параметры должны быть заменены ФАКТИЧЕСКИМИ (реально существующими) параметрами (дополнительными данными).
Параметры, передаваемые процедуре во время её вызова в программе называются ФАКТИЧЕСКИМИ ПАРАМЕТРАМИ. Фактическими параметрами могут быть как непосредственные значения, так и переменные в которых хранятся требуемые значения.
Параметры-значения (Используются для передачи данных из программы в подпрограмму. Из программы в подпрограмму передаётся копия параметра.)
Параметры-переменные (Используются для передачи данных как из программы в подпрограмму так и из подпрограммы в программу. Из программы в подпрограмму передаётся адрес фактического параметра, то-есть, та ячейка памяти которая его содержит)
Параметры-константы (Используется для передачи данных из программы в подпрограмму. Из программы в подпрограмму передаётся адрес фактического параметра, — та ячейка памяти, которая его содержит. В подпрограмме изменение параметра-константы недопустимо, поэтому передача данных в обратном направлении невозможна. При передаче параметров-констант дополнительных ячеек памяти не выделяется)
Паскаль с Нуля. Оператор вывода. Урок 1
Процедуры без параметров в языке Pascal.
В практике программирования часто встречаются ситуации, когда по ходу выполнения программы приходится производить одни и те же вычисления или действия. Чтобы исключить повторение одинаковых записей и сделать тем самым программу проще и понятнее, можно выделить эти повторяющиеся фрагменты в самостоятельную часть программы, которая может быть использована многократно по мере необходимости. Такая автономная часть программы, реализующая определённый алгоритм и допускающая обращение к ней из различных частей программы, называется подпрограммой. Использование подпрограмм позволяет реализовать один из самых прогрессивных методов программирования — структурное программирование. Язык программирования Turbo Pascal 7.0, даже в сравнении с другими промышленными системами программирования, обладает очень мощными средствами для работы с подпрограммами.
Единственным отличием процедуры без параметров от Pascal-программы состоит в названии заголовка, которое начинается не служебным словом Program, а служебным словом Procedure. Наличие заголовка процедуры обязательно, в отличии от наличия заголовка программы, который может быть опущен. Кроме того любая подпрограмма заканчивается служебным словом End и точкой с запятой, в отличии от End с точкой в Pascal-программе.
Вызов процедур без параметров.
Вызов процедуры без параметров осуществляется по имени данной процедуры в теле программы. Имя процедуры воспринимается как оператор. При выполнении этого оператора выполняется вся подпрограмма.
Преимущества применения подпрограмм.
- Появляется возможность использовать при написании программ, уже готовые, отработанные фрагменты программ, оформленных в виде подпрограмм.
- Возможно применение технологии программирования «сверху-вниз». При использовании такой технологии более сложная и громоздкая задача разбивается на ряд простых и маленьких задач, решение которых сводится к написанию подпрограмм, объединяемых, в конечном итоге, в одну программу.
- Написание больших программ можно разделить между несколькими програмистами одновременно, объединив после этого подпрограммы, написанные ими, в одну программу.
- В результате использования локальных параметров, память используется более рационально, так как память под локальные переменные выделяется только во время работы данной подпрограммы.
Функции в языке Pascal.
Функции — это зависимость одной величины от нескольких, у которых есть какие-то исходные данные. Функция описывается следующим образом:
- Function имя (параметры): Тип результата;
- раздел описаний
- begin
- команды
- имя функции:=выражение
- end;
Сначала идёт слово function, затем имя функции, после в скобках параметры функции и если их нет, то скобки не ставятся, и после двоеточия тип результата функции, и точка с запятой. Затем идёт раздел описаний, поскольку это подпрограмма, которая может иметь свои переменные, константы, типы и т.д.
Затем идёт слово begin — начало программы. После идут исполняемые команды. Дальше имени функции присваиваем конечное выражение, то есть возвращаем результат функции, чтобы в дальнейшем можно было бы какой-то переменной присвоить результат выполнения функции. И в конце идёт слово end c точкой запятой.
Результат функции может быть числом, символом, строкой, логическим выражением. Значение функции не может быть массивом.
Если параметры функции одинаковые, то они указываются через запятую, если разные, то через точку с запятой.
Функции в программе можно использовать на ровне со стандартными функциями, например использовать довольно таки короткие и понятные имена, и в скобках принимать нужные параметры.
1. — Наглядность — у функции есть говорящее имя, например если мы написали программу с использованием функции и через месяц открыли её для какого нибудь исправления или дополнения, то это будет гораздо проще сделать, нежели использовать написать программу с каким нибудь циклом, и потом разбираться что он делает, и хуже будет если мы не оставляли комментарии.
2. — Сокращение объёма исходного текста и исполняемого файла.
3. — Удобство отладки — проще отладить маленький кусочек программы, который решает небольшую часть задачи, чем всю программу.
1. — Возможны дополнительные затраты времени — при переходе в функцию надо запомнить из какого места программы это произошло, надо выделить память под локальные переменные, потом удалить внутренние переменные и вернуться в программу.
2. — Требуется внимательное отношение к использованию переменных программы внутри функции.
Локальные (внутренние) переменные функции:
1. — Создаются в специальной области памяти (стеке) только на время работы функции. Из основной программы недоступны.
2. — Значения локальных переменных на момент начала функции не определены — Есть некоторые люди или начинающие программисты или ленивые люди, которые считают что если мы создаём переменную, то мы автоматически кладём в неё нуль, что совсем не так. При создании переменной мы не записываем в неё нуль, а лишь выделяем какое-то место в памяти для записи в него каких-то данных, но мы также не можем быть уверены что в той ячейке памяти ни чего не сохранилось и она пуста, там ведь могло сохраниться значение какой нибудь предыдущей переменной и это значение будет стандартным в наше переменной. Поэтому следует самим положить в эти переменные нули.
3. — Имена локальных переменных могут совпадать с именами глобальных переменных. В этом случае операции совершаются на локальными переменными, если отсутствует явное указание. Но если мы хотим изменить именно значение глобальной переменной с тем же именем, то достаточно перед этим именем в функции написать имя программы и поставить точку, после чего можно смело писать имя глобальной переменной, которое мы хотим изменить.
Параметры — Значения функции:
Параметры бывают двух типов — параметры значения и параметры переменные. Функции работают не с самими данными, а с их копией, то есть если мы даём функцие массив, то он будет весь копироваться, и если он ещё огромный, то придётся подождать.
1. — Функция может получать на вход переменную, выражение или значение соответствующего (или совместимого) типа. (Никаких выражений и явного указания значений)
2. — Функция работает непосредственно с данными, может изменять их.
3. — Так как копия данных не создаётся, то для экономии времени и памяти рекомендуется объёмные параметры (например, массив) делать параметрами-переменными.
Параметр переменная отличается от параметра значение тем, что перед параметром переменной ставится слово var.
Источник: infopedia.su
Параметры процедур и функций
Глобальные переменные (описанные в главной программе) доступны из любого места программы или подпрограммы, кроме тех случаев, когда в подпрограмме используются локальные переменные с такими же именами. Значит, такие переменные можно использовать для обмена данными между основной программой и подпрограммой. Однако такой способ создает неудобства при отладке и сужает возможность использования процедур и функций в других программах.
Оптимальным способом обмена данными между вызывающей и вызываемой подпрограммой в подавляющем большинстве случаев является использование механизма параметров.
В подпрограммах на языке Паскаль существуют два основных типа параметров:
-
параметр, перед которым отсутствует ключевое слово var или const называется параметром-значением, например:
function AddSquare(a, b: integer): integer;
procedure Mult2(var a: integer);
Формальный параметр-значение при вызове подпрограммы получает, специально созданную в области памяти, копию значения соответственного фактического параметра. В подпрограмме выполняются операции с копией без доступа к переменной вызывающей программы. После окончания работы подпрограммы выделенная под параметр-значение память освобождается. Этот способ называется передачей по значению .
Формальный параметр-переменная при вызове подпрограммы получает адрес области памяти, в которой хранится соответствующий фактический параметр. Поэтому любое изменение формального параметра-переменной в подпрограмме приводит к изменению переменной в вызывающей программе. Такой способ называется передачей по ссылке (или по адресу) .
Пример. В программе используется процедура «Удвоитель».
- procedure Mult2(a: integer; var b: integer);
- begin
- a *= 2;
- b *= 2;
- end;
- begin
- var num1: integer := 10;
- var num2: integer := 10;
- Mult2(num1, num2);
- writeln(num1);
- writeln(num2);
- end;
Переменная num1 передается по значению, поэтому ее значение не меняется.
Значение переменной num2 изменяется, т. к. переменная передается по ссылке (о чем свидетельствует наличие ключевого слова var перед соответственным формальным параметром b ).
Источник: informatics-lesson.ru
3.3. Использование параметров в Паскаль-программах
● Любая программа, запускаемая на выполнение, должна представлять собой выполняемый файл(.exe-файл). В средах турбо-Паскаля такой файл получается в результате компиляции (точнее — компиляции и редактирования связей) главной программы (program). Для операционной системы такие файлы, наряду с .com-файлами и .bat-файлами, являютсякомандами.
Любая команда может иметь параметры, которые передаются в программу, соответствующую команде, при запуске последней. Способ задания параметров зависит от системы. Например, вMS DOSкоманда набирается в командной строке в виде:
Для стандартных команд смысл параметров оговорен при описании команд. Для .exe-файлов, соответствующих пользовательским программам, смысл параметров и способ их обработки в программе определяется пользователем-программистом.
● В турбо-Паскале педусмотрены две стандартные функции для работы с параметрами (функции модуля DOS):
function paramcount:word;- возвращает (передает в программу) число параметров;
function paramstr(:word):string;- возвращает значение параметра с заданным номером.
Параметры нумеруются, начиная с единицы.
Операционная система также всегда передает программе полное имя файла, где эта программа находится. Строка–значение этого имени передается как paramstr(0). Этот параметр не входит в общее число параметров.
В программе, использующей параметры, все параметры трактуются как отдельные строки (тип string).
● Обработка программы с параметрами:
- откомпилировать программу согласно инструкции;
- задать через пробелы параметры в секции RUN/PARAMETERS;
- запустить программу: RUN/RUN;
- откомпилировать программу с сохранением на диске .exe-файла согласно инструкции;
- запустить на выполнение этот .exe-файл командой MS DOS с параметрами:
- данные хранятся в файлах на диске;
- текст программы от запуска к запуску менять не следует;
- входные файлы также не должны изменяться.
Источник: studfile.net