1 / 45

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

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

niesha
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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);

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

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

  5. Пользовательские процедуры и функцииПрименяются • Для структурирования программы • Когда одну и туже группу операций необходимо повторить без изменений в нескольких других местах программы • Когда одну и туже группу операций необходимо выполнить с разными параметрами

  6. Описание процедуры • Пользовательские процедуры и функции организуются самим программистом. • Их предварительное описание обязательно. • Процедура и функции описывается в разделе описания программы (между Program иBegin) • Описание процедуры – это локальный блок, по структуре аналогичен программе.

  7. Описание процедуры • Описание процедуры начинается с заголовка, который является обязательным, в отличие от заголовка программы. • Заголовок состоит из служебного слова Procedure, за которым следуют имя процедуры и, в круглых скобках, список формальных параметров. (Список формальных параметров может отсутствовать) • Имя процедуры уникально в пределах программы. • Общий вид описания процедуры Procedure Имя (Список формальных параметров); описательная часть Begin тело процедуры End;

  8. Функции Описание включает в себя имя и тело. Заголовок состоит из служебного слова function, имени и списка формальных параметров с указанием их типа, заключенного в круглые скобки.После скобки ставится двоеточие и указывается тип возвращаемого функцией значения. В теле функции должен быть оператор присваивания, в левой части которого стоит имя функции, а в правой – ее значение. Function имя (список формальных параметров): тип результата; <раздел описания>; begin <тело процедуры>; имя функции : = значение; end; Имя функции уникально в пределах программы, тело функции – это локальный блок, по структуре аналогичен программе. Оператор вызова функции – это имя функции и список фактических параметров. При вызове функции ее формальные параметры заменяются на фактические.

  9. Описание

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

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

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

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

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

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

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

  17. Процедура вычисления степени числа: 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;

  18. 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.

  19. Пример1_2. Составить программу для вычисления an, где а и n – целые числа (n>=0) вводятся с клавиатуры. • функция вычисления степени числа: 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;

  20. 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.

  21. Пример 2: • Составить программу, подсчитывающую число сочетаний без повторения из n элементов по k. Число сочетаний без повторения вычисляется по формуле: n! • С:=------------- k! (n-k)!

  22. Опишем процедуру для вычисления факториала числа 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;

  23. Programpr2_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; Begin Writeln (‘Ввод 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

  24. Опишем функцию для вычисления факториала числа n (n!=1*2*3*…*n) Function factorial (n: Integer): Longint; {заголовокфункции} Var i: Integer; rez: Longint; Begin rez:=1; For i:=1 to n do rez:=rez*i; factorial:=rez; {присваивание значения имени функции} End;

  25. Programpr2_2; Var n, k: Integer; a1, a2, a3: Longint; C:real; Function factorial (n: Integer): Longint; {заголовокфункции} Var i: Integer; rez: Longint; Begin rez:=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.

  26. Второй урок

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

  28. Передача массивов в процедуры и функции При работе с одним массивом • Описать массив как глобальные переменные, т.е. в разделе Var перед описанием процедуры • Ввод массива в основной программе • Использоватьмассив в теле процедуры или функции • Вывод массива в основной программе • При необходимости в качестве параметров можно передавать индексы элементов массива или отдельные элементы массива.

  29. Пример 2.1 Дан одномерный массив. Создать процедуру вычисления минимального значения среди элементов массива. Вычислить Y= 2* MIN/(MIN+1)

  30. 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; Begin Readln(n); For i:=1 to n do read (a[i]); S(min,m); Y:=(2*min)/(min+1); Writeln(y); End.

  31. Пример 2.1 Дан двумерный массив. Создать процедуру вычисления минимального значения среди элементов к-строки массива. Вычислить Y= (MIN(1)+MIN(3))/MIN(1)

  32. 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 thenF:=a[k,j]; End; Begin Readln(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.

  33. 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 thenF:=a[k,j]; S:=f; End; Begin Readln(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.

  34. Параметры-массивы и параметры строки • При использовании нескольких массивов, массив является параметром. • Типом массива-параметра в списке формальных параметров должен быть ранее объявленный тип. • Например. type ar=array[1..10] of integer; var a:ar;… procedure ss (v:ar); begin … end; Begin … ss(a); end.

  35. Даны 3 массива a,b,c размерностью na,nb,nc. Вычислить • y=(min(a)+min(b))/min(c)

  36. 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 thenF:=x[i]; End; Begin Readln(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.

  37. 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; Var F:integer; Begin F:=x[1]; For i:=2 to nx do If x[i]<f thenF:=x[i]; S:=f; End; Begin Readln(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.

  38. Пример 3. Даны три одномерных массива целых чисел a[1:n], b[1:m], c[1:l]. Получить min(b)+ min(c), если | min(a)|>10 G= (1+min(c))/2 в противном случае Использовать процедуру нахождения минимального элемента в массиве.

  39. 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.

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

  41. 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.

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

  43. 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; beginx:=c[1]; for f:=2 to y do c[f-1]:=c[f]; c[y]:=x; end; beginreadln(n,m); for i:=1 to n do for J:= 1 to m doread(b[i,j]); for i:=1 to n do begin for j:= 1 to m doa[j]:=b[i,j]; per(m,a); for j:= 1 to m dob[i,j]:=a[j]; end; for i:=1 to n do begin for j:= 1 to m dowrite(b[i,j],' '); writeln; end; end.

More Related