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

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

  • Upload
    niesha

  • View
    67

  • Download
    0

Embed Size (px)

DESCRIPTION

Процедуры и функции. Все процедуры и функции делятся на стандартные встроенные определенные пользователем . Встроенные и стандартные вызываются без предварительного описания. Стандартные процедуры и функции. Арифметические : abs(x); cos(x); sqrt(x); и др. Скалярные : - PowerPoint PPT Presentation

Citation preview

Page 1: Процедуры и функции

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

Встроенные и стандартные вызываются без предварительного описания.

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

Page 2: Процедуры и функции

Арифметические :

abs(x); cos(x); sqrt(x); и др.

Скалярные:

dec(x,n); inc(x,n);

pred(s); suss(s); odd(x);

Функции и процедуры преобразования типов:

chr(i); round(x); trunc(x);

val(s,x,code); str(n,s);

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

Page 3: Процедуры и функции

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

Модуль имеет имя.

Подключается через слово Uses.

По умолчанию подключается модуль System.

Встроенные процедуры и функции

Page 4: Процедуры и функции

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

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

Подпрограмме дается имя, по которому можно обращаться к ней (вызывать подпрограмму).

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

Page 5: Процедуры и функции

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

Применяются

Для структурирования программы Когда одну и туже группу операций

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

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

Page 6: Процедуры и функции

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

организуются самим программистом.

Их предварительное описание обязательно.

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

(между Program и Begin)

Описание процедуры – это локальный блок, по структуре аналогичен программе.

Page 7: Процедуры и функции

Описание процедуры Описание процедуры начинается с заголовка, который

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

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

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

Имя процедуры уникально в пределах программы.

Общий вид описания процедуры

Procedure Имя (Список формальных параметров); описательная часть

Begin тело процедуры

End;

Page 8: Процедуры и функции

ФункцииОписание включает в себя имя и тело. Заголовок состоит из

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

Function имя (список формальных параметров): тип результата;<раздел описания>;begin<тело процедуры>;имя функции : = значение;end; Имя функции уникально в пределах программы, тело функции – это

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

Page 9: Процедуры и функции

Описание Procedure имя (список формальных параметров);

<раздел описания>;

begin

<тело процедуры>;

end;

Function имя (список формальных параметров): тип результата;

<раздел описания>;

begin

<тело процедуры>;

имя функции : = значение;

end; В теле функции обязательно должен быть оператор

имя функции : = значение;

Page 10: Процедуры и функции

Параметрыв круглых скобках после имени процедуры

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

Фактические параметры – это параметры, которые передаются при вызове.

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

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

Page 11: Процедуры и функции

ПроцедурыФормальные параметры делятся на

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

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

Параметры-значения – это аргументы процедуры.

Page 12: Процедуры и функции

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

1) В описании перед ними слово Var не ставится .

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

1) В описании перед ними стоит служебное слово Var

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

Page 13: Процедуры и функции

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

3) Только входные

4) Хранятся в специальных ячейках памяти, называемых стеком;

и хранятся там столько, сколько работает процедура

5) При вызове процедуры в качестве параметра -значения может быть использовано имя переменной, значение, выражение.

3) Как входные, так и выходные.

4) Хранятся в обычных ячейках памяти;

при вызове процедуры передается адрес.

5) В качестве параметра-переменной может быть использовано только имя переменной.

Page 14: Процедуры и функции

Вызов процедуры

Процедура и функция вызываются по имени

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

Имя (Список фактических параметров)

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

фактические.

Page 15: Процедуры и функции

Вызовв основной программе

Процедуры

Имя(фактические параметры) ;

Функции

К:= Имя(фактические параметры);

Аргументы и результаты передаются через параметры.

Имя процедуры не может находиться в выражении в качестве операнда.

Аргументы передаются через параметры.

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

Имя функции может входить в выражение как операнд.

Имя функции может использоваться в операторе вывода

Writeln (Имя(факт параметры));

Page 16: Процедуры и функции

Локальные и Глобальные переменные

Все переменные программы делятся на глобальные и локальные.

Глобальные переменные объявляются в разделе описаний основной программы.

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

Page 17: Процедуры и функции

В общем виде программа представляет собой следующее:

Program <имя>; Uses <модуль>; Label <список меток> Const <список констант>; Type <описание типов>; Var <описание глобальных переменных>; Procedure <имя>; <тело процедуры>; Function <имя>; <тело функции>; Begin <тело программы>; end.

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

Page 18: Процедуры и функции

Пример1_1.

Составить программу , которая

Вычисляет an,

где а и n – целые числа (n>=0),

вводятся с клавиатуры

Page 19: Процедуры и функции

Процедура вычисления степени числа:

Procedure stepen (x,y:integer; var st:longint); {формальные параметры}

{x,y параметры-значения , st -параметры-переменные}

Var i:integer;Begin st:=1; for i:=1 to y do st:=st*x;end;

Page 20: Процедуры и функции

program pr1_1; var a,n:integer; s:longint; procedure stepen (x,y:integer; var st:longint); var i:integer; begin st:=1; for i:=1 to y do st:=st*x; end; begin readln(a,n); stepen(a,n,s); {вызов процедуры, фактические параметры }

writeln(s); end.

Page 21: Процедуры и функции

Пример1_2. Составить программу для вычисления an, где а и n – целые числа (n>=0) вводятся с клавиатуры.

функция вычисления степени числа:

Function stepen (x,y:integer):longint;var i:integer; st:longint;beginst:=1;for i:=1 to y do st:=st*x;stepen:=st;end;

Page 22: Процедуры и функции

program pr1_2; var a,n:integer; s:longint; function stepen (x,y:integer):longint; var i:integer; st:longint; begin st:=1; for i:=1 to y do st:=st*x; stepen:=st; end; begin readln(a,n); s:=stepen(a,n); writeln(s); end.

Page 23: Процедуры и функции

Пример 2:

Составить программу, подсчитывающую число сочетаний без повторения из n элементов по k. Число сочетаний без повторения вычисляется по формуле:

n! С:= -------------

k! (n-k)!

Page 24: Процедуры и функции

Опишем процедуру для вычисления факториала числа n (n!=1*2*3*…*n)

Procedure factorial (n: Integer;Var R: Longint); {заголовок процедуры}

Var i: Integer;Begin

R:=1; For i:=1 to n do R:=R*i;End;

Page 25: Процедуры и функции

Program pr2_1 ;Var n, k: Integer;

a1, a2, a3: Longint; C: Real; Procedure factorial (n: Integer;Var R: Longint); {заголовок

процедуры}Var i: Integer;

Begin R:=1; For i:=1 to n do R:=R*i;End;

BeginWriteln (‘Ввод n и k’); Readln (n, k);factorial (n,a1); {вычисление n!}factorial (k,a2); {вычисление k!}factorial (n-k,a3); {вычисление (n-k)!}C:=a1 / (a2*a3); {результат}Writeln (‘Результат равен’, C:5:2);

End

Page 26: Процедуры и функции

Опишем функцию для вычисления факториала числа n (n!=1*2*3*…*n)

Function factorial (n: Integer): Longint; {заголовок функции}

Var i: Integer;rez: Longint;

Beginrez:=1;For i:=1 to n do rez:=rez*i;factorial:=rez;

{присваивание значения имени функции}End;

Page 27: Процедуры и функции

Program pr2_2;Var n, k: Integer;

a1, a2, a3: Longint; C:real;Function factorial (n: Integer): Longint; {заголовок функции}

Var i: Integer;rez: Longint;

Beginrez:=1;For i:=1 to n do rez:=rez*i;factorial:=rez; {присваивание значения имени функции}

End;Begin

Writeln (‘Ввод n и k’); Readln (n, k); C:=factorial (n)/ (factorial (k)*factorial (n-k)); {результат} Writeln (‘Результат равен’, C:5:2);

End.

Page 28: Процедуры и функции

Второй урок

Page 29: Процедуры и функции

Передача массивов в процедуры и функции

Типом параметра в списке формальных параметров может быть любой стандартный тип или ранее объявленный тип.

При использовании массива в качестве параметра –значения весь массив дублируется, хранится в стеке.

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

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

Page 30: Процедуры и функции

Передача массивов в процедуры и функции

При работе с одним массивом Описать массив как глобальные переменные,

т.е. в разделе Var перед описанием процедуры

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

функции Вывод массива в основной программе При необходимости в качестве параметров

можно передавать индексы элементов массива или отдельные элементы массива.

Page 31: Процедуры и функции

Пример 2.1

Дан одномерный массив.

Создать процедуру вычисления минимального значения среди элементов массива.

Вычислить Y= 2* MIN/(MIN+1)

Page 32: Процедуры и функции

Var a: array[1..100] of integer;I,n,j,m,min:integer; y:real;Procedure s( var f,k:integer);Begin F:=a[1]; k:=1; For i:=2 to n do If a[i]<f then begin F:=a[i]; k:=i; end;End;BeginReadln(n);For i:=1 to n do read (a[i]);S(min,m);Y:=(2*min)/(min+1);Writeln(y);End.

Page 33: Процедуры и функции

Пример 2.1

Дан двумерный массив.

Создать процедуру вычисления минимального значения среди элементов к-строки массива.

Вычислить Y= (MIN(1)+MIN(3))/MIN(1)

Page 34: Процедуры и функции

Var a: array[1..10,1..10] of integer;I,n,j,m,min1,min2,min3:integer; y:real;Procedure s( k:integer; var f:integer);Begin F:=a[k,1]; For j:=2 to m do If a[k,j]<f then F:=a[k,j];End;BeginReadln(n,m);For i:=1 to n do For j:=1 to m do read (a[i,j]);S(1,min1); S(4,min2); S(3,min3);Y:=(min1+min2)/min3;Writeln(y:5:2);End.

Page 35: Процедуры и функции

Var a: array[1..10,1..10] of integer;I,n,j,m:integer; y:real;Function s( k:integer): integer;Var f:integer;Begin F:=a[k,1]; For j:=2 to m do If a[k,j]<f then F:=a[k,j];S:=f;End;BeginReadln(n,m);For i:=1 to n do For j:=1 to m do read (a[i,j]);y:=(s(1)+s(4))/(s(3));Writeln(y:5:2);End.

Page 36: Процедуры и функции

Параметры-массивы и параметры строки

При использовании нескольких массивов, массив является параметром.

Типом массива-параметра в списке формальных параметров должен быть ранее объявленный тип.

Например.type ar=array[1..10] of integer;var a:ar; …procedure ss (v:ar);begin … end;Begin … ss(a);end.

Page 37: Процедуры и функции

Даны 3 массива a,b,c размерностью na,nb,nc. Вычислить

y=(min(a)+min(b))/min(c)

Page 38: Процедуры и функции

Type ar=array[1..100] of integer;Var a,b,c:ar;I,na,nb,nc,j,m,min1,min2,min3:integer; y:real;Procedure s( x:ar; nx:integer; var f:integer);Begin F:=x[1]; For i:=2 to nx do If x[i]<f then F:=x[i]; End;BeginReadln(na,nb,nc);For i:=1 to na do read (a[i]);For i:=1 to nb do read( b[i]);For i:=1 to nc do read( c[i]);S(a,na,min1); s(b,nb,min2);s(c,nc,min3);Y:=(min1+min2)/min3;Writeln(y);End.

Page 39: Процедуры и функции

Type ar=array[1..100] of integer;Var a,b,c:ar;I,na,nb,nc,j,m:integer; y:real;Function s( x:ar; nx:integer):integer;VarF:integer;Begin F:=x[1]; For i:=2 to nx do If x[i]<f then F:=x[i]; S:=f;End;BeginReadln(na,nb,nc);For i:=1 to na do read (a[i]);For i:=1 to nb do read( b[i]);For i:=1 to nc do read( c[i]);Y:=(S(a,na)+s(b,nb))/s(c,nc);Writeln(y:5:2);End.

Page 40: Процедуры и функции

Пример 3. Даны три одномерных массива целых чисел a[1:n], b[1:m], c[1:l].

Получить

min(b)+ min(c), если | min(a)|>10

G=

(1+min(c))/2 в противном случае

Использовать процедуру нахождения минимального элемента в массиве.

Page 41: Процедуры и функции

program pr3;type mm=array [1..10] of integer;var a,b,c:mm; amin, bmin, bmin,i,g,n,m,l:integer;procedure minm (y:integer; d:mm; var x:integer);begin x:=d[1]; for i:=2 to y do if d[i]<x then x:=d[i];end;Begin readln(n,m,l); for i:=1 to n do read(a[i]); for i:=1 to m do read(b[i]); for i:=1 to l do read(c[i]); minm(n,a,amin); minm(m,b,bmin); minm(l,c,cmin); If abs(amin)>10 then g:=bmin+cmin else g:=1+sqr(cmin); writeln(‘g=‘,g);end.

Page 42: Процедуры и функции

Пример 4. Составить процедуру, которая меняет местами максимальный и первый элементы массива. Применить эту процедуру для двух данных массивов.

Page 43: Процедуры и функции

program pr5;type mm=array [1..10] of integer;var a,b:mm; i,n,m:integer;procedure per (y:integer; var d:mm);var max,nmax:integer;begin max:=d[1]; nmax:=1; for i:=2 to y do if d[i]>max then begin max:=d[i]; nmax:=i;

end; d[nmax]:=d[1]; d[1]:=max;end;Begin readln(n,m); for i:=1 to n do read(a[i]); for i:=1 to m do read(b[i]); per(n,a); per(m,b); for i:=1 to n do write(a[i],’ ‘); for i:=1 to m do write(b[i],’ ‘);end.

Page 44: Процедуры и функции

Пример 5. Написать процедуру циклического сдвига элементов одномерного массива влево. Использовать ее для каждой строки двумерного массива.

Page 45: Процедуры и функции

type d=array [1..10] of integer;var a:d; n,m,i,j:integer; b:array [1..10,1..10] of integer;procedure per (y:integer;var c:d);var f,x:integer; begin x:=c[1]; for f:=2 to y do c[f-1]:=c[f]; c[y]:=x; end;begin readln(n,m); for i:=1 to n do for J:= 1 to m do read(b[i,j]); for i:=1 to n do begin for j:= 1 to m do a[j]:=b[i,j]; per(m,a); for j:= 1 to m do b[i,j]:=a[j]; end; for i:=1 to n do begin for j:= 1 to m do write(b[i,j],' '); writeln; end;end.