ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР. ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ФУНКЦИЙ

  • docx
  • 26.12.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л3-0025385.docx

ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР. ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ФУНКЦИЙ

 

Цели работы:

-          Научиться описывать процедуры и функции в программе;

-          Научиться задавать фактические и формальные параметры;

-          Научиться организовывать вызов процедуры и функции в программе

 

Оборудование: ПК, ИСР Pascal ABC

 

ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

 

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

 


 

 

Рис. 1 Структура программы с подпрограммами

Различают два вида подпрограмм это процедуры и функции.


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

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

 

Заголовок процедуры имеет вид: PROCEDURE <имя> [ (<сп. ф. п .>) ] ; Заголовок функции: FUNCTION <имя> [ (<сп.ф.п.>)] : <тип>;

Здесь <имя> - имя подпрограммы (правильный идентификатор);

<сп.ф.п.> - список формальных параметров;

<тип> - тип возвращаемого функцией результата.

 

Описание, определение и вызов процедур

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

Procedure <Name>(<Список формальных параметров>);

{Раздел описаний}

Begin          …{Раздел операторов процедуры}End; где

Procedure - служебное слово;

Name - произвольный идентификатор, определяющий имя процедуры.

 

Procedure MyProc (A,B,C: Real; var X1,X2: Real); Begin


 

 

End;


WriteLn('A=',A, ' B=', B, 'C=', C); X1:=A+B;

X2:=A*B-C

 

Разделы описаний процедуры подобно основной программе могут содержать разделы


описания меток (Label), констант (Const), типов (Type), переменных (Var) и раздел процедур и функций. Раздел операторов помещается после служебного слова Begin и заканчивается служебным словом End, после End ставится " ; ".

 

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

 

Формальные параметры — это переменные, посредством которых передаются данные из места вызова процедуры в еѐ тело, либо из процедуры в места вызова. Список формальных параметров может отсутствовать, при этом символ " ; " ставится сразу за именем процедуры и данные из места вызова процедуры в еѐ тело не передаются.

Для вызова процедуры на исполнение к ней необходимо обратится.

Вызов процедуры производится указанием имени процедуры и списком фактических параметров:

Name(<Список фактических параметров>);

MyProc(K, L+M, 12, Y1, Y2);

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


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

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

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

 

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

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

Function <Name>(<Список формальных параметров>):<Type>;

{Раздел описаний}

Begin

…{Раздел операторов процедуры} Name:=<выражение соответствующего типа;

End;

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

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

Пример 1. Разработать функцию, определяющую по двум катетам гипотенузу прямоугольного треугольника.

Function Gepoten(a,b:real):real; Begin Gepoten:=Sqrt(Sqr(a)+Sqr(b)) End;

Вызов               функции                 из     основной     программы     может     выглядеть     следующим образом:           z:=Gepoten(x, y); {z присваивается значение гипотенузы}

или                                 WriteLn('Значение гипотенузы', Gepoten(x, y));

 

Передача параметров в подпрограммы

 

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

Группа параметров   без   предшествующего   ключевого   слова   является   списком

параметров-значений

Группа параметров, перед которыми следует ключевое слово Const и за которыми следует тип, является списком параметров-констант.


Группа параметров, перед которыми стоит ключевое слово Var и за которыми следует тип, является списком типизированных параметров-переменных.

Группа параметров, перед которыми стоит ключевое слово Var или Const за которыми не следует тип, является списком не типизированных параметров-переменных.

Передача параметров по значению

 

При передаче параметров по значению в формальный параметр передаѐтся копия значения соответствующего фактического параметра. Примерами параметров-значений служат параметры A, B и C в процедуре с заголовком MyProc. В этом случае фактическим параметром, соответствующим A, либо B, либо C, может быть любое выражение или переменная типа Real. Для параметров-значений компилятор при вызове процедуры выделяет место в сегменте стека (специальная область оперативной памяти) для каждого формального параметра, вычисляет значение фактического параметра и передаѐт его в ячейку, соответствующую формальному параметру, выполняет тело процедуры. После завершения работы процедуры, формальные параметры уничтожаются, а фактические остаются неизменными (по значению).

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

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

 

Приступая к решению задач этого раздела, следует вспомнить, что:

·                     для передачи информации в процедуру следует использовать параметры, а не глобальные переменные, т. е. объявленные вне процедуры;

·                     тип каждого фактического параметра (константы или переменной) в инструкции вызова процедуры должен соответствовать типу соответствующего формального параметра, указанного при объявлении функции;

·                     если в инструкции объявления процедуры перед именем формального параметра нет слова var, то в качестве формального параметра в инструкции вызова процедуры можно использовать константу или переменную соответствующего типа. Если слово var присутствует в инструкции, то формальным параметром можно назначить только переменную;

·                     если аргумент процедуры применяется для возврата результата в программу, вызвавшую эту процедуру, то перед именем аргумента нужно поставить слово var.

 

Пример 1

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

 

program Func; uses crt;

var

a,z,r: integer; m:integer;

{Функция вычисления степени, N, X формальные параметры}

function Stepen(n:integer; x:integer):integer; var

i:integer; y: integer;


begin y:=1;

for I:=1 to n do                           {Цикл вычисления n-ой степени числа х} y:=y*x;

stepen:=y                                    {Присваивание функции результата вычисления степени}

end;                                             {Конец функции}

Begin clrscr;

writeln('vvedite znachenie chisla a i pokazatel stepeni m'); readln(a);

readln(m); z:=Stepen(m,a);

Writeln('z=', z:3); end.

 

Пример 2

Даны два натуральных числа a и b. Требуется определить наибольший общий делитель трех величин. Определить наибольший общий делитель трех величин a+b, |a-b|, a*b

Идея решения состоит в следующем математическом факте: НОД(х, y, z) = НОД(НОД(x,y),z)

 

Program NOD; Uses crt;

var

a,b,c: integer;

 

Procedure Evklid (M,N: integer; Var k: integer); {m,n формальные параметры (параметры-

аргументы, к параметр-результат)}

Begin

while m<>n Do If m>n

then m:=m-n else n:=n-m; k:=m

End;

 

Begin clrscr; write('a='); readln(a); Write('b='); readln(b);

Evklid(a+b, ABC(a-b), a*b); Evklid(с, a*b, c); Writeln('NOD=',c)

End.

 

 

ЗАДАНИЕ

 

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


Вариант 1

Дана целочисленная квадратная матрица 4х4. Определить:

1)      произведение элементов во второй строке (оформить в виде функции)

2)      сумму элементов главной диагонали (оформить в виде процедуры)

3)      составить блок-схемы

 

 

Вариант 2

Дана целочисленная матрица размером 4х3. Определить:

1)      Количество нулевых элементов в 4 строке. (Оформить в виде функции).

2)      Максимальный элемент матрицы (оформить в виде процедуры)

3)      составить блок-схемы

Вариант 3

Дана целочисленная прямоугольная матрица. Определить:

1)      Сумму положительных элементов матрицы (оформить в виде функции)

2)      Минимальный элемент матрицы (оформить в виде процедуры)

3)   составить блок-схемы

Вариант 4

Дана целочисленная квадратная матрица 3х3. Определить:

1)      количество отрицательных элементов матрицы (оформить в виде функции)

2)      количество положительных элементов в 3 строке (оформить в виде процедуры)

3)   составить блок-схемы

Вариант 5

1.  Сформировать одномерный массив В с помощью генератора случайных чисел в интервале от 0 до 50 (оформить в виде процедуры).

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

3.  Составить блок-схемы

Вариант 6

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

2.  Подсчитать для сформированного массива произведение элементов главной диагонали (оформить в виде функции).

3.  Составить блок-схемы

Вариант 7


1.                  Сформировать многомерный массив Т размерностью 4х2 с помощью генератора случайных чисел в интервале от 0 до 100 (оформить в виде процедуры)

2.                  Посчитать для сформированного массива Т сумму элементов первой строки (оформить в виде функции)

3.                  Составить блок-схемы

Вариант 8

1.                  Сформировать одномерный массив D, состоящий из 10 элементов с помощью генератора случайных чисел в интервале от 0 до 200 (оформить в виде процедуры)

2.                  Подсчитать для сформированного массива D среднее арифметическое (оформить в виде функции)

3.                  Составить блок-схемы

Вариант 9

Дана целочисленная квадратная матрица 4х4. Определить:

1)                 произведение положительных элементов матрицы (оформить в виде функции)

2)                 минимальный элемент во второй строке (оформить в виде процедуры)

3)                 составить блок-схемы

Вариант 10

Дана целочисленная прямоугольная матрица. Определить:

1)                 сумму отрицательных элементов (оформить в виде функции)

2)                 максимальный элемент в первой строке

3)                 составить блок-схемы

 

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

 

1.             Что такое подпрограмма?

2.             Что такое процедура?

3.             Что такое функция?

4.             Что такое фактический параметр?

5.             Что такое формальный параметр?

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

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

8.             Как осуществляется вызов процедуры?

9.             Как осуществляется вызов функции?