Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Обращение к процедуре паскаль

#14 Процедуры и функции в Паскаль. Как объявлять и использовать

Primary tabs

Forums:

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

Чем процедуры отличаются о функций

Различия между процедурами и функциями в Паскаль:

  1. Функции возвращают значения (а значит их вызовы можно использовать везде, где можно использовать литералы, переменные и выражения).
  2. Процедуры не возвращают данных, и потому не могут быть частью, например выражений.

Сигнатура процедур и функций

Процедуры и функции принимают какие-то значения «на вход» — это те данные, с которыми процедура или функция будут работать.

Сигнатура — характеристика функции, которая говорит о том, что нужно передавать в функцию и на результат какого типа следует рассчитывать после её выполнения.
Или, если речь идёт о процедуре — то просто «данные каких типом нужно передать в процедуру, чтобы она сработала»

Вызов процедуры и её сигнатура

Сигнатура процедуры определяется:

  1. Именем процедуры
  2. Числом, типом входящих переменных и их порядок следования

Например, рассмотрим реализацию процедуры $sum1()$, которая складывает два числа и выводит сумму на экран:

Иллюстрацией к сигнатуре этой процедуры служит её заголовок:

— где фактически написано, что для нормальной работы этой процедуре требуется получить (а программисту во внешнем коде передать) два значения целого типа, рассмотрим пример вызова этой процедуры с передачей параметров:

Вызов функции и её сигнатура

Сигнатура функции определяется:

  1. Именем функции
  2. Числом, типом входящих переменных и их порядок следования
  3. Типом возвращаемого значения

Процедуры

Рассмотрим пример программы с процедурой:

  • переменная $z$ в процедуру $sum()$ передана по ссылке, это значит, что если её изменить в теле процедуре, то она изменится и в том месте, откуда её передали в процедуру (например, в теле основной программы).
  • Переменные же $x$ и $y$ переданы по значению — это надо понимать так, что если их значения будут изменяться внутри процедуры (в данном случае), то «снаружи» эти изменения видны не будут.

Функции

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

Примеры кода — разбор решений

Пример №1 — функция не принимающая аргументов

Напишите функцию, которая не принимает аргументов и возвращает число $55$

Пример №2 — функция: входящие аргументы разного типа, локальные переменные подпрограммы

Напишите функцию, которая принимает два аргумента: первый целого типа, а второй вещественного, и возвращает разницу между их произведением и их суммой.

Решение:

Задачи для самостоятельного решения

  1. Напишите функцию, которая возвращает сумму трёх целых чисел.
  2. Напишите процедуру, которая выводит на экран сумму трёх целых чисел.
  3. Напишите процедуру, которая принимает переменную целого типа по ссылке, просит пользователя ввести значение в консоли и инициализирует переменную этим значением (убедитесь, что в теле программы значение изменилось).

Источники и полезные материалы:

Обращение к процедуре паскаль

В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.

Для использования подалгоритма в качестве подпрограммы ему необходимо присвоить имя и описать алгоритм по правилам языка Паскаль. В дальнейшем, при необходимости вызвать его в программе, делают вызов подпрограммы упоминанием в нужном месте имени соответствующего подалгоритма со списком входных и выходных данных. Такое упоминание приводит к выполнению входящих в подпрограмму операторов, работающих с указанными данными. После выполнения подпрограммы работа продолжается с той команды, которая непосредственно следует за вызовом подпрограммы.

Читать еще:  Учебник по си шарп

В языке Паскаль имеется два вида подпрограмм — процедуры и функции.

Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными — передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы).

Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове — фактическими.

Описание и вызов процедур и функций

Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур.

Формат описания процедуры имеет вид:

Формат описания функции:

Формальные параметры в заголовке процедур и функций записываются в виде:

и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.

Вызов процедуры производится оператором, имеющим следующий формат:

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

Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.

Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:

При вызове процедур и функций необходимо соблюдать следущие правила:

  • количество фактических параметров должно совпадать с количеством формальных;
  • соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.

Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными — они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.

Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.

Аналогичную задачу, но уже с использованием функций, можно решить так:

Волгоградский государственный педагогический университет
Кафедра алгебры, геометрии и информатики

Урок 13. Процедуры и функции в Pascal. Часть 2

Итак, сегодня мы с вами на learnpascal.ru продолжаем изучать функции и процедуры — важнейшую часть структурного программирования. В этом уроке мы рассмотрим только процедуры и функции. И даже не будем практиковаться, оставим это для последующих уроков.

Структура программы.

Программы на языке Паскаль состоят из заголовка программы, раздела описаний и тела программы. Раздел описаний может включать следующие подразделы: меток, констант, типов, переменных, процедур и функций. Последовательность подразделов в структуре программы произвольная, но естественно, что если вводится переменная нового типа, заданного в Туре, то подраздел Туре предшествует подразделу Var. Принцип нашего языка программирования «то, что используется, должно быть описано» сохраняется и для раздела описаний.

Читать еще:  Объединение ячеек css

Структура процедуры и функции

Структура процедуры.

До этого момента времени мы использовали из раздела описаний только описание переменных и типов. На этом занятии мы начнем изучать процедуры. Структура процедуры повторяет структуру программы. Отличия выделены «полужирным» шрифтом.

Напишу простую программу с процедурой, складывающей два числа.

Итак, что вы видите? Точнее, что вам не понятно в данной программе? Я думаю, что вы не можете понять, почему перед z стоит var, а перед x, y — нет. Но всему свое время.

Обратимся к примеру, приведенному на рисунке выше. Слева приведен фрагмент текста основной программы, справа — процедура. Как только в теле программы объявляется имя процедуры с параметрами, выполнение «главного» тела прекращается, и управление вычислительными процессами передается процедуре. После выполнения процедуры осуществляется возврат на оператор основной программы, следующий за вызовом процедуры.

Немножко теории:
В любой программе все переменные делятся на два типа: локальные и глобальные. В нашей программы переменные а, b, с — глобальные, а х, у, z — локальные. Глобальные переменные — это переменные из раздела описаний основной части программы, а локальные — из раздела описаний процедур и функций. Локальные переменные существуют только в течение времени работы процедуры, определяются (создаются) при её вызове и исчезают после завершении работы процедуры.

В программе определены переменные a, b, c. В процедуре x, y, z — её параметры, и они являются переменными процедуры. Причем между х, у и z существует большая разница.

Поясню ее очередным рисунком.

Параметры.

При описании процедуры указывается список формальных параметров. Каждый параметр является локальным по отношению к описываемой процедуре, к нему можно обращаться только в пределах данной процедуры (в нашем примере х, у, z — формальные параметры). Фактические параметры — это параметры, которые передаются процедуре при обращении к ней (а, b, с — фактические параметры). Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.

Параметры-значения.

Другими словами, передача параметров по значению. Копия фактического параметра становится значением соответствующего формального параметра. Внутри процедуры можно производить любые действия с данным формальным параметром (допустимые для его типа), но эти изменения никак не отражаются на значении фактического параметра, то есть каким он был до вызова процедуры, то таким же и останется после завершения ее работы (х, у — параметры-значения).

Параметры-переменные.

Другими словами, передача параметров по ссылке. Это те формальные параметры, перед которыми стоит идентификатор var. Передается адрес фактического параметра (обязательно переменной), после этого формальный
параметр становится его синонимом. Любые операции с формальным параметром выполняются непосредственно над фактическим параметром.

Структура функции

Функция выглядит почти так же, как и процедура. Почти единственное отличие в том, что заголовок функции начинается с ключевого слова Function и кончается типом возвращаемого данной функцией значения.

Кроме того, в теле функции обязательно должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции или переменная result, а в правой — ее значение.

Небольшое послесловие:

Каждая процедура должна иметь одну точку входа и одну точку выхода (то есть использование goto, break, exit нежелательно), использование глобальных переменных в процедуре следует свести к минимуму, взаимодействие с процедурой должно осуществляться (по возможности) только через параметры.
Постепенно вы должны отказаться от технологии неструктурированного программирования. Сегодня мы с вами осваиваем структурную технологию разработки программ, при этом на каждом этапе текущая задача разбивается на ряд подзадач, определяя тем самым некоторое количество отдельных подпрограмм. Концепция процедур и функций — один из механизмов второго витка развития технологий программирования, а именно, структурного проектирования.

использование процедур

боже, помогите решить задачу! последняя лаба плииииииииииииииииииз

5 ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР
Цель работы — овладение навыками написания процедур и обращения к ним, изучение способов передачи параметров.

Читать еще:  Разработчик языка паскаль является

5.1 Подготовка к лабораторной работе

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

5.2 Теоретические сведения

Подпрограммы позволяют уменьшить трудоемкость программирования алгоритмов, содержащих повторяющиеся последовательности операций, а также перейти к структурным методам составления программ. В результате этого создаются программные единицы с иерархической структурой.
Подпрограммой называют самостоятельный фрагмент программы, оформленный особым способом и снабженный именем. Подпрограммы предназначены для реализации алгоритмов решения отдельных подзадач. Они дают возможность уменьшать число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм. Применение подпрограмм позволяет реализовывать концепцию структурного программирования.
В языке Паскаль имеется два вида подпрограмм: процедуры и функции, которые различаются назначением и способом их использования. Подпрограммы делятся на стандартные и подпрограммы пользователя. Стандартные подпрограммы пользователь не создает, они находятся в стандартных модулях System, Crt, Dos, Graph и т.д. Подпрограмма пользователя – это поименованная группа операторов, которую создают и описывают в основной программе в разделах procedure или function. Подпрограмму можно вызвать из любого места программы необходимое количество раз.
Описания подпрограмм находятся в описательной части программы, в разделе процедур и функций. Каждая подпрограмма описывается один раз, но при необходимости к ней можно многократно обращаться.
В языке Паскаль имеется 2 вида подпрограмм: функции и процедуры.
Процедуры (рrocedure) используются при получении одного или нескольких результатов (могут не иметь результатов). Общий вид записи процедуры:

Описание подпрограммы состоит из заголовка, раздела описаний и тела подпрограммы
Общий вид описания процедуры:
PROCEDURE PR(P1:T1;P2:T2;VAR PN:TN);

BEGIN

END;

Вызов процедуры из основной программы:
PR(A1,A2,AN),
где PR — имя подпрограммы;
P1,P2,PN — имена формальных параметров;
Т1,Т2,ТN — типы этих параметров;
A1,A2,AN — фактические параметры.
Формальные параметры представляют не какие-то конкретные значения, а обозначают лишь типы переменных и то, как эти переменные используются в процедуре.
При каждом обращении к процедуре формальные параметры должны конкретизироваться. Поэтому при вызове процедуры после ее имени нужно задать список фактических параметров в круглых скобках.
Таким образом, при обращении к процедуре в ней вводятся в употребление свои внутренние переменные, имена которых совпадают с формальными параметрами. При входе в процедуру этим внутренним переменным присваиваются значения, заданные фактическими параметрами. Именно поэтому формальные и фактические параметры должны быть согласованы по количеству, типу и порядку следования.
Различают 2 вида формальных параметров – параметры-значения и параметры-переменные. Для первого типа параметров в формальный параметр переписывается значение фактического параметра, а во втором случае – адрес фактического параметра. Поэтому тогда, когда параметр изменяется в подпрограмме, (иными словами, является результатом работы подпрограммы) его описывают как параметр-переменную. Для этого перед именем параметра-переменной должно указываться служебное слово VAR (параметр PN). Типы формальных параметров обязательно должны обозначаться идентификаторами. Следовательно, при использовании типов, определяемых программистом, эти типы должны быть предварительно описаны.

Pascal

В приведенном примере K – формальный параметр-значение (это количество минут разговора), C – формальный параметр-переменная (сумма, которую необходимо уплатить за k минут разговора).

Пример. Заменить элементы, расположенные выше главной диагонали матрицы А(N,N), на минимальный элемент. Для решения задачи использовать процедуру. Исходные данные ввести из текстового файла, а результаты вывести в другой текстовой файл в основной программе. Все данные передать в процедуру через список формальных/фактических параметров.

Программа имеет вид:

Pascal

Файл исходных данных:
1 2 3
-4 -5 6
7 8 9

Файл выходных данных:
Исходный массив А:
1 2 3
-4 -5 6
7 8 9
Преобразованный массив А:
1 -5 -5
-4 -5 -5
7 8 9

Переписать подряд все положительные элементы массивов Х(20) и Y(15) в массив Z .

Ссылка на основную публикацию
Adblock
detector
×
×
Pascal