Функции пользователя (описание, вызов, структура). Рекурсивные подпрограммы
В языке Паскаль имеется два вида подпрограмм — процедуры и функции.
Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров.
Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными — передающиеся из подпрограммы в вызывающий блок (результаты работы подпрограммы).
Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове — фактическими.
Описание и вызов функций
Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур.
Программирование Pascal с нуля | Информатика ОГЭ 2022 | Умскул
Формат описания функции:
Function имя функции (формальные параметры): тип результата; раздел описаний функции Begin исполняемая часть функции End;
Формальные параметры в заголовке функций записываются в виде:
Var имя праметра: имя типа
отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа.
При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.
Вызов функции в Турбо Паскаль может производиться способом как при процедурах, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
имя функции := результат;
- количество фактических параметров должно совпадать с количеством формальных;
- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
Var x,y,m,n: integer; Function MaxNumber(a,b: integer): integer; Var max: integer; Begin If a>b Then max := a Else max := b; MaxNumber := max; End; Begin write(‘Введите x,y ‘); readln(x,y); m := MaxNumber(x,y); n := MaxNumber(2,x+y); writeln(‘m=’,m,’n=’,n); End.
Рекурсия – способ организации вычислит. процесса, при котором процедура или функция в ходе выполнения ее операторов, обращается сама к себе.
Для того, чтобы такое обращение не было бесконечным, в тексте программы должно быть условие, при выполнении которого дальнейшего обращения к программе не происходит.
Урок 1. Первая программа на Pascal (Сложение чисел)
Любой рекурсивный алгоритм можно заменить алгоритмом, который использует цикл. Подпрограммы с рекурсией менее эффективны, но короче и нагляднее.
Источник: bigspawn.blogspot.com
Функции в паскале
Функции и процедуры в pascal занимают большое и очень важное место. Благодаря им мы сможем решать огромный набор задач , которые будут стоять перед нами в процессе программирования. В данном уроке мы рассмотрим такие вопросы , как » как объявить функцию в паскале ? , какие встроеные функции и процедуры есть в паскаль ? Как отличить функцию от процедуры ?. Многие программы на языке паскаль занимают достаточно много места на рабочем экране. И из-за этого достаточно сложно найти какой-либо элемент даже в собственной программе.
Поэтому в некоторых случаях будет проще заменить некоторые участки кода блоками ( подпрограммами ). В паскале подобные подпрограммы называют функциями и процедурами.
Разумеется , в языке паскаль они предусмотрены не только для того , чтобы отыскать определенный код в программе. Процедуры и функции в паскале отвечают за выполнения многих , более важных вещей. Например для замены нескольких повторяющихся участков кода одним. Или использование рекурсий.
Все процедуры и функции объявляются после блока Var ( Блок , в котором объявляются глобальные переменные ). Вы возможно задаетесь вопросом о том , что такое глобальные переменные ?
Глобальные переменные — это переменные , которые существуют в любом участке программе ( далее будет яснее ).
Давайте рассмотрим структуры подпрограмм.
Процедуры в паскале :
Структура процедуры в паскале выглядит так :
Как видно по картинке выше , вначале идет слово procedure. Далее идет имя процедуры , в нашем случае процедура называется «А». После имени процедуры идет описание получаемых переменных. ( Пример : A(n:integer) или A(n:integer;t:string) )
Проще говоря , процедура получает переменную , значение которой мы заносим в целочисленную переменную n ( локальная переменная ). Если мы получаем несколько переменных разных типов , то они перечисляются через точку с запятой ; Блок описания получаемых переменных является необязательным.
Во второй строке идет необязательный блок локальных переменных. На ряду с глобальными , существуют и локальные переменные. Локальные переменные отличаются от глобальных тем , что они существуют и работают только внутри своей подпрограммы ( процедуры или функции ).
В третьей строке идет тело процедуры. Тут , я думаю , пояснять ничего не нужно.
Рассмотрим решение такой задачи : Требуется заполнить массив A десятью случайными числами от -10 до 10 , а потом вывести их на экран. Решение выглядит так :
program mypascal;
uses crt;
var
a: array[1..10] of integer;
procedure readA;
var
i:byte;
begin
randomize;
for i:= 1 to 10 do
a[i]:= random(21)-10;
end;
procedure writeA;
var
i:byte;
begin
for i:= 1 to 10 do
write(a[i],’ ‘);
Как видно из кода программы , в ней существуют 2 процедуры readA и writeA , которые отвечают за наполнение и вывод массива соответственно.
Также можно рассмотреть подобную задачу : Требуется ввести число и вывести его квадрат на экран. Решение выглядит так :
program mypascal;
var
n:integer;
procedure kv(a:integer);
var
i:byte;
begin
writeln(‘Квадрат числа ‘,a,’ = ‘,sqr(a));
write(‘Введите число : ‘);
readln(n);
Здесь процедура kv получает целочисленную переменную n , значение которой заносится в локальную , целочисленную переменную переменную a.
Функции в паскале :
Структура функции совсем немного отличается от структуры процедуры.
Вы , возможно , уже заметили различие. Главное запомнить , что любая функция должна возвращать какой-либо результат в конце своей работы ( в нашем случае функция возвращает целочисленное значение integer ).
Поэтому , в процессе описания функции , следует обозначать какой тип данных будет возвращаться в неё.
В остальном же , структура функции аналогична процедуре.
Решим задачу : Нужно ввести число и вывести его корень на экран.
program mypascal;
var
n:integer;
function kor(a:integer):real;
begin
write(‘Введите число : ‘);
readln(n);
writeln(‘Корень из числа ‘,n,’ = ‘,kor(n));
Заметьте , что корень может быть нецелым числом , поэтому функция возвращает вещественный результат real.
Рекурсии :
Рекурсия — это ещё одна большая тема в pascal , которую мы разберем позже. Но стоит рассказать сейчас о том , что под рекурсией часто понимают использование подпрограммы в подпрограмме ( Например : процедуры в процедуре или функции в функции ).
Рассмотреть использование рекурсии можно на подобной задаче : Заполнить массив десятью случайными числами от -10 до 10 и найти первое отрицательное число ( вывести на экран номер отрицательного числа , если есть ).
program mypascal;
uses
crt;
var
a: array[1..10] of integer;
i:integer;
procedure ser(n:byte);
begin
randomize;
if ( a[n]
Источник: mypascal.ru
Функции в Паскале
За наличие подпрограмм как средства структурирования программ язык программирования Турбо Паскаль называется процедурно-ориентированным.
Подпрограммы в Турбо Паскале реализованы посредством процедур и функций. Имея один и тот же смысл и аналогичную структуру, процедуры и функции различаются назначением и способом их использования.
Функция — это независимая именованная часть программы, которую можно вызвать по имени для выполнения определенных действий. Структура функции повторяет структуру программы.
Особенности использования функции:
• функция передает в точку вызова скалярное значение;
• имя функции может входить в выражение как операнд.
Например, функция Chr(65) возвратит в точку вызова символ А (код ASCII — 65), Sqr(X) — возведет в квадрат значения целого или вещественного Х и возвратит в точку вызова вычисленное значение квадрата числа X.
Все процедуры и функции языка Турбо Паскаль делятся на две группы: встроенные (стандартные) и определенные пользователем. Первые входят в состав языка и вызываются для выполнения по строго фиксированному имени. Вторые разрабатываются и именуются самим пользователем. Все стандартные средства расположены в специализированных библиотечных модулях, которые имеют системные имена.
Стандартные библиотечные модули
В систему Турбо Паскаль версии 6.0 и старше включены восемь модулей: System, Crt, Dos, Graph, Graph3, Overlay, Printer, ТурбоЗ и специализированная библиотека Турбо Vision. Модуль System подключается по умолчанию, все остальные должен подключать программист с помощью зарезервированного слова uses.
Uses Crt, Dos, Printer;
Назначение каждого модуля:
System — содержащиеся в нем подпрограммы обеспечивают работу всех остальных модулей системы.
Crt — содержит средства управления дисплеем и клавиатурой компьютера.
Dos — включает средства, позволяющие реализовывать различные функции DOS.
Graph3 — поддерживает использование стандартных графических подпрограмм версии Турбо Паскаль 3.0.
Overlay — содержит средства организации оверлейных программ.
Printer — обеспечивает быстрый доступ к печатающему устройству.
ТurbоЗ — обеспечивает максимально возможную совместимость с версией Турбо Паскаль 3.0.
Graph — содержит пакет графических средств, обеспечивающих эффективную работу с адаптерами CGA, EGA, VGA, IBM 3270 и т.д.
Турбо Vision— библиотека объектно-ориентированных подпрограмм для разработки пользовательских интерфейсов.
Встроенные функции и процедуры
Модуль System подключается к программе автоматически, поэтому его имя не указывается в разделе Uses. По этой причине программе становятся доступны его встроенные процедуры и функции.
Арифметические процедуры и функции
Abs(X:real/integer): real/integer — вычисление абсолютной величины X. Тип результата совпадает с типом параметра.
ArcTan(X:real):real — вычисление угла, тангенс которого равен Х радиан.
Cos(X:real) : real — вычисление косинуса X, параметр задает значение угла в радианах.
Exp(X:real) : real — вычисление экспоненты X, т.е. значение Е в степени X. Е является основанием натурального логарифма и равно 2.718282.
Frac(X:real):real — вычисление дробной части X.
Int(X:real):real — вычисление целой части X.
Ln(X:real):real — вычисление натурального логарифма X, т, е. логарифма по основанию е (е = 2.718282).
Pi:real — возвращает значение числа Пи (3.141592653897932385).
Sin(X:real):real — вычисление синуса X. Параметр задает значение угла в радианах.
Sqr(X) — возведение в квадрат значения целого или вещественного значения X. Тип результата совпадает с типом параметра.
Sqrt(X:real):real — вычисление квадратного корня из X.
Random:real — генерирует значение случайного числа из диапазона 0..0.99.
Random(I:word):word — генерирует значение случайного числа из диапазона 0..I.
Randomize — изменение базы генератора случайных чисел.
Источник: studfile.net