Invest-currency.ru

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

Функция с параметром паскаль

Функция с параметром паскаль

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметры.

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

Читать еще:  Как открыть файл на запись паскаль

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

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

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

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

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

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

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

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

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

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

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

В языке Турбо-Паскаль существует большой набор стандартных (библиотечных) процедур и функций. Процедуры и функции содержатся в стандартных модулях и подключаются к любой программе либо с помощью предложения Uses (например: CRT, GRAPH и др.) либо автоматически (например, System).

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

Применение подпрограмм позволяет использовать современные технологии конструирования программ: структурное, модульное, объектное. А также использовать современные методы проектирования т.н. нисходящее проектирование. При этом сложная задача разбивается на ряд подзадач, для каждой из которых составляется набор подпрограмм, из которых компонуется общая программа.

Язык Турбо-Паскаль содержит два типа подпрограмм:

Процедуры в Паскале

Структура процедуры аналогична структуре программы и состоит из заголовка и блока (тела процедуры).

PROCEDURE ( );

где
PROCEDURE – зарезервированное слово процедура;
— имя процедуры, является уникальным, выбирается по общим пра-
вилам, желательно чтобы оно отражало смысл процедуры;
— список формальных параметров т.е. список имен обозначаю-
щих исходные данные и результат работы процедуры с указани-
ем их типов;
— тело процедуры представляющее разделы описаний и раздел
операторов, представляющий составной оператор (совокупность
операторов, заключенных в операторные скобки BEGIN END).

Разделы описаний процедуры содержат те же разделы что и основная программа, в том числе описания подпрограмм низшего уровня (вложенных).

Глобальные объекты – это объекты, описанные в разделах описаний основной программе. Областью их действия является программа и все, содержащиеся в ней подпрограммы.

Локальные объекты – это объекты, описанные в разделах описаний подпрограммы. Областью их действия является подпрограмма и все содержащиеся в ней подпрограммы низшего уровня.

Локальные описания отменяют глобальные.
Оператор вызова процедуры активизирует процедуру.
Он имеет вид:
( );
где:
имя процедуры;
список фактических параметров.
Это список конкретных значений, имен и выражений подставляемых вместо формальных параметров и передаваемых в подпрограмму, а так же возвращаемые результаты обработки.
Список фактических параметров может отсутствовать.
Между формальными и фактическими параметрами существует взаимно — однозначное соответствие по количеству, порядку следования и типу.

Виды параметров в Паскале

Различают четыре вида параметров:
— параметры- значения;
— параметры- переменные;
— параметры- процедуры;
— параметры- функции.

Параметры- значения – используются для передачи исходных данных в подпрограмму. Формальные параметры при этом записываются через запятую с указанием их типов. Они получают значения фактических параметров, но не могут передавать свои значения фактическим параметрам.

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

Параметры- процедуры – указываются после слова Procedure.

Параметры- функции — . указываются после слова Function.

Функции в Паскале

Структура описания и механизм использования функции аналогичен процедуре с учетом некоторых особенностей. Описание состоит из заголовка и блока (тела функции).

FUNCTION ( ): ;
;
где: FUNCTION – зарезервированное слово функция;
— имя функции, является уникальным, выбирается по общим правилам, желательно чтобы оно отражало смысл функции;
— список формальных параметров т.е. список имен обозначающих исходные данные функции с указанием их типов;
тип результата возвращаемого функцией и присваиваемого имени
функции;
— тело процедуры представляющее разделы описаний и раздел
операторов, представляющий составной оператор (совокупность операторов, заключенных в операторные скобки BEGIN END).

Разделы описаний функции содержат те же разделы что и основная программа, в том числе описания подпрограмм низшего уровня (вложенных).
В содержательной части функции ее имени должен быть присвоен результат работы функции.
Вызов функции представляет собой операнд (указатель функции) в отличии от процедуры обращение к которой представляет оператор.
Он имеет вид:
( );
где:
имя функции (указатель);
список фактических параметров.
Это список конкретных значений, имен и выражений подставляемых вместо формальных параметров и передаваемых в функцию.

Отличие процедуры от функции

  1. Функция в отличие от процедуры возвращает единственное скалярное значение
  2. Результат вычисления функции присваивается имени, а процедуре входит в список параметров.
  3. Имя функции имеет тип.
  4. Обращение к функции представляет операнд, а процедуры оператор.

Пример 14.1. В файле inp.txt расположены три массива вещественных чисел

-2.1 3.1 -2.4 5.6 5.4 -6.7 3.5 -3.6
2.3 -4.3 2.1 2.5 -3.7 -5.6 4.6 3.5 -7.5
-2.1 4.3 -2.3 7.6 4.5 -8.9 5.7 -4.5 6.8 -5.8

Вычислить функцию

где Max_a, Max_b, Max_c, Sa, Sb, Sc, ka, kb, kc — максимальный элемент, сумма и количество положительных элементов соответствующих массивов a, b, и c.

Результат вывести в файл out.txt и на экран.

Читать еще:  Понятие информационной безопасности информационных систем

Текст программы

Program pp;
Uses CRT;
Const n=10;
Type vec=array[1..n] of real;
Var
a,b,c :vec;
y,sa,sb,sc :real;
ka,kb,kc :byte;
i :integer;
f1,f2 :text;
Procedure Vv(s:char; num:byte;Var z:vec);
Begin
Writeln(‘Mассив ‘,s);
For i:=1 to num do
Begin
Read(f1,z[i]); Write(z[i]:4:1,’ ‘:3);
End;
Readln(f1); Writeln;
End;
Procedure SK1(z:vec;num:byte; Var s:real; Var k:byte);
Begin
s:=0; k:=0;
for i:=1 to num do if z[i]>0 then
Begin
s:=s+z[i]; k:=k+1
End;
End;
Function MAX(z:vec;num:byte):real;
Var m :real;
Begin
m:=z[1];
for i:=1 to num do if z[i]>m then m:=z[i];
MAX:=m
End;
Begin
clrscr;
Assign(f1,’inp.txt’); Reset(f1);
Assign(f2,’out.txt’); Rewrite(f2);
Vv(‘a’,8,a); Vv(‘b’,9,b); Vv(‘c’,n,c);
SK1(a,8,sa,ka); SK1(b,9,sb,kb); SK1(c,n,sc,kc);
y:=(MAX(a,8)+MAX(b,9)+MAX(c,n))+(sa+sb+sc+ka+kb+kc);
Writeln(‘Результат:’:20);
Write (‘Массив : ‘);
Writeln(‘sa=’,sa:5:1,’ ka=’,ka);
Write (‘Массив b: ‘);
Writeln(‘sb=’,sb:5:1,’ kb=’,kb);
Write (‘Массив c: ‘);
Writeln(‘sc=’,sc:5:1,’ kc=’,kc);
Writeln(‘ ‘:10,’y=’,y:10);
Readln;
Writeln(f2,’ ‘:10,’y=’,y:10);
Close(f1); Close(f2)
End.

Результаты работы программы:

Mассив a
-2.1 3.1 -2.4 5.6 5.4 -6.7 3.5 -3.6
Mассив b
2.3 -4.3 2.1 2.5 -3.7 -5.6 4.6 3.5 -7.5
Mассив c
-2.1 4.3 -2.3 7.6 4.5 -8.9 5.7 -4.5 6.8 -5.8
Результат:
Массив а : sa= 17.6 ka=4
Массив b: sb= 15.0 kb=5
Массив c: sc= 28.9 kc=5
y= 9.330E+01

Pascal. Процедуры и функции

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

Описываются подпрограммы между разделом описания переменных и началом тела основной программы. Так выглядит структура всей программы в Pascal:

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

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

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

Также различают формальные и фактические параметры. Те, что используются при вызове процедуры или функции называются фактическими, а формальные описываются в заголовке подпрограммы, и принимают значения фактических параметров. Формальные параметры должны совпадать типом и количеством с фактическими.

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

Процедура:

Вызов процедуры:
( );

Функция:

В Pascal, также как и во многих других языках программирования, переменные по отношению к программе делятся на локальные и глобальные. Те, которые объявляются в основной части, называются глобальными, а в процедуре или функции – локальными. Локальные переменные в отличие от глобальных могут использоваться лишь внутри подпрограммы, к которой они принадлежат.

Теперь более детально рассмотрим в отдельности каждый вид подпрограмм.

Пользовательские процедуры

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

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

Программа выводит сумму целых чисел заданного диапазона. Имя процедуры прописано после служебного слова, определяющего, что создана именно процедура. Далее идет заголовок, где первые две переменные – это формальные параметры, в которые передается значение от фактических k и n. Переменная rez возвращает результат и называется параметром-переменной (определяются после слова Var), а k и n – параметрами-значений. Локальная переменная – i, она описана сразу после заголовка процедуры. Вызывая, в основной части программы процедуру sum, в качестве передаваемых параметров мы указали три целочисленных переменных. Заметьте, что их количество соответствует числу формальных параметров. Порядок также важен, т. е. в переменную pk передается значение переменной k, в pn значение n и т. д.

В вышеизложенном примере было бы вполне уместным не использовать параметр-переменную rez, а определить ее локально. В этом состоит различие между процедурами и функциями в Pascal.

Пользовательские функции

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

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

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

Допустим необходимо вычислить наибольший общий делитель двух целых чисел. Результатом решения данной задачи будет одно число, поэтому мы воспользуемся именно функцией.

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

Урок по теме: «Процедуры и функции в Pascal»

образовательная

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

  • воспитать аккуратность, внимание, организованность;
  • культура вычислительных навыков;
  • развивающая развить логическое мышление, алгоритмической культуры учащихся;

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

    I. Орг. момент

    II. Вступление. Актуальность

    Выдать задание на листочках ( Приложение 1 ). Найти повторы.

    Иногда в разных местах программы приходится выполнять практически одни и те же последовательности действий с разными исходными данными. Такие последовательности действий можно оформить в виде так называемых подпрограмм (от англ, subroutine) – сгруппировать операторы в блок, к которому можно обратиться по имени, причем неоднократно.

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

    Читать еще:  Первый язык программирования кто автор

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

    Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного описания. Например, abs, sqrt, ln, sin…- функции (возвращают результат), readln, write… – процедуры (не возвращают результат). Их наличие существенно облегчает разработку прикладных программ. Однако в большинстве случаев некоторые специфичные для данной программы действия не находят прямых аналогов в библиотеках Turbo Pascal, и тогда программисту приходится разрабатывать свои нестандартные процедуры и функции.

    III. Объяснение нового материала

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

    Структура процедуры повторяет структуру программы, это «программа в миниатюре» — она также представлена заголовком и телом.

    Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры.

    VAR … // раздел описания переменных главной программы

    //тело главной программы

    Вызов процедуры для последующего выполнения записывается в теле главной программы.

    Пример 1. Программа вычисления площади и периметра.

    Открыть в Паскале файл ( Приложение 2 ). Оформим повторяющуюся часть программы в виде процедуры (программа внутри главной программы).

    write(‘Введите стороны a, b: ‘);

    Вызов в нужном месте:

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

    Т.е. мы “научили” ПК новой команде tx. Ею можно пользоваться только в этой программе и, причем, много раз. ( Приложение 3 )

    Достоинства подпрограмм:

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

    Пример 2. Пользователь вводит две стороны трех прямоугольников. Вывести их площади.

    Можно решить задачу так:

    writeln(‘Введите a и b:’);

    Хорошим стилем программирования считается использование процедур. Необходима процедура, которая будет вычислять площадь прямоугольника. Вот как схематично будет выглядеть главная программа:

    текст

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

    procedure pl (c,d: integer);

    writeln(‘площадь прямоугольника со сторонами ’,c, ‘ ‘ ,d, ‘=‘,S);

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

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

    pl(4,5);

    Фактические параметры должны совпадать по типу и количеству с формальными.

    Итак, главная программа:

    Замечание. При решении этой задачи необходимо проверять введенные пользователем числа (они не должны быть отрицательными, иначе работа программы прервется).

    Составим процедуру проверки:

    procedure error (f,g:integer);

    if (f (формальные параметры);

    Пример 3. Составить программу обмена местами двух чисел с=5 и d=7.

    procedure obmen ( a,b:integer);

    writeln (‘Введите 2 числа: ‘);

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

    1) при вызове процедуры obmen с двумя параметрами 5 и 7, в переменные a и b помещаются тоже числа 5 и 7 соответственно:

    2) далее в процедуре осуществляется перестановка значений ячеек памяти a и b:

    3) но в переменных c и d данные не поменялись, т.к. они находятся в других ячейках памяти.

    Для того чтобы переменные c и d, a и b ссылались на одни и те же ячейки памяти (если изменятся значения a и b, то изменятся значения и c, d) необходимо при описании формальных параметров, перед нужными переменными добавить слово VAR:

    procedure obmen (var a,b:integer);

    Измените программу obmenDan:

    ошибка из-за var. Числа – константы, которые нельзя изменять в процедуре.

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

    procedure circle (r:real);

    Процедура должна возвращать результат:

    procedure circle (r:real; var S:real);

    readln(a, e);

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

    Чаще для этого в Паскале вместо процедур используют функции (подпрограммы, которые что-то возвращают).

    Функция аналогична процедуре, но имеются два отличия.

    • Функция передает в программу результат своей работы – единственное значение, носителем которого является имя своей функции.
    • Имя функции может входить в выражение как операнд. Функция возвращает результат в точку своего вызова.

    Например, sqr(x) – возведет в квадрат значение х и возвратит в точку вызова вычисленное значение квадрата числа х: y:=sqr(x);

    Функция, определенная пользователем, состоит из заголовка и тела функции. Тело функции по структуре аналогично программе. Описание меток, констант, типов и т.д. действительны только в пределах данной процедуры.

    Function (формальные параметры) : ;

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

    Пример 5. Переделаем задачу о площади круга.

    function circle (r:real): real;

    a:=circle(5); (ОБЯЗАТЕЛЬНО присваиваем)

    Используем функцию нахождения факториала, т.к подаем на вход и получаем результат.

    function fact (a:integer): integer;

    В строке fact:=fact*I;

    компилятор найдет ошибку, т.к fact должна вызываться с параметрами. Поэтому обячно вводят дополнительную переменную, в которую помещают результат. А потом в переменную fact присваивают этот результат:

    var sum,n,j: integer;

    function fact (a: integer): integer;

    IV. Итог урока

    В данное время процесс программирования превращается в промышленное изготовление программ на основе технологий программирования. Большинство специалистов придерживаются точки зрения, что метод нисходящего проектирования программ наиболее удобен для решения сложных проблем. Cначала задача определяется в общих чертах, затем происходит постепенное уточнение ее структуры. На очередном шаге каждая подзадача, в свою очередь, разбивается на ряд других. Решение отдельного фрагмента сложной задачи представляет собой самостоятельный программный блок – подпрограмму.

    V. Домашнее задание

    Решить задачи (письменно):

    1. Составить процедуру, которая во введенной строке заменяет все буквы a на *.
    2. Даны два предложения. Найти общее количество букв “н” в них. (Определить функцию для расчета количества букв “н” в предложении.)
    Ссылка на основную публикацию
    ВсеИнструменты 220 Вольт
    Adblock
    detector