Upload
niesha
View
67
Download
0
Embed Size (px)
DESCRIPTION
Процедуры и функции. Все процедуры и функции делятся на стандартные встроенные определенные пользователем . Встроенные и стандартные вызываются без предварительного описания. Стандартные процедуры и функции. Арифметические : abs(x); cos(x); sqrt(x); и др. Скалярные : - PowerPoint PPT Presentation
Citation preview
Все процедуры и функции делятся на стандартные встроенные определенные пользователем.
Встроенные и стандартные вызываются без предварительного описания.
Процедуры и функции
Арифметические :
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);
Стандартные процедуры и функции
Встроенные процедуры и функции выделены в группы, которые размещаются в отдельных модулях.
Модуль имеет имя.
Подключается через слово Uses.
По умолчанию подключается модуль System.
Встроенные процедуры и функции
Пользовательские процедуры и функции
Нередко в программах встречаются повторяющиеся или похожие фрагменты. Имеется возможность оформлять такие фрагменты специальным образом — выделять их в подпрограммы.
Подпрограмме дается имя, по которому можно обращаться к ней (вызывать подпрограмму).
В Паскале имеется два вида подпрограмм — процедуры и функции. Их структура очень похожа на структуру основной программы.
Пользовательские процедуры и функции
Применяются
Для структурирования программы Когда одну и туже группу операций
необходимо повторить без изменений в нескольких других местах программы
Когда одну и туже группу операций необходимо выполнить с разными параметрами
Описание процедуры Пользовательские процедуры и функции
организуются самим программистом.
Их предварительное описание обязательно.
Процедура и функции описывается в разделе описания программы
(между Program и Begin)
Описание процедуры – это локальный блок, по структуре аналогичен программе.
Описание процедуры Описание процедуры начинается с заголовка, который
является обязательным, в отличие от заголовка программы.
Заголовок состоит из служебного слова Procedure, за которым следуют имя процедуры и, в круглых скобках, список формальных параметров.
(Список формальных параметров может отсутствовать)
Имя процедуры уникально в пределах программы.
Общий вид описания процедуры
Procedure Имя (Список формальных параметров); описательная часть
Begin тело процедуры
End;
ФункцииОписание включает в себя имя и тело. Заголовок состоит из
служебного слова function, имени и списка формальных параметров с указанием их типа, заключенного в круглые скобки. После скобки ставится двоеточие и указывается тип возвращаемого функцией значения. В теле функции должен быть оператор присваивания, в левой части которого стоит имя функции, а в правой – ее значение.
Function имя (список формальных параметров): тип результата;<раздел описания>;begin<тело процедуры>;имя функции : = значение;end; Имя функции уникально в пределах программы, тело функции – это
локальный блок, по структуре аналогичен программе. Оператор вызова функции – это имя функции и список фактических параметров. При вызове функции ее формальные параметры заменяются на фактические.
Описание Procedure имя (список формальных параметров);
<раздел описания>;
begin
<тело процедуры>;
end;
Function имя (список формальных параметров): тип результата;
<раздел описания>;
begin
<тело процедуры>;
имя функции : = значение;
end; В теле функции обязательно должен быть оператор
имя функции : = значение;
Параметрыв круглых скобках после имени процедуры
Формальные параметры – это параметры, которые используются для описания процедуры. Они определяют тип и место подстановки фактических параметров.
Фактические параметры – это параметры, которые передаются при вызове.
Количество, типы и порядок формальных и фактических параметров должны совпадать.
Т.о. параметры обеспечивают механизм замены, позволяющий выполнить процедуру с различными данными.
ПроцедурыФормальные параметры делятся на
параметры-значения и параметры-переменные.
Параметры-переменные – это результат, возвращаемый из процедуры в программу, перед ними ставят var.
Параметры-значения – это аргументы процедуры.
Параметры-значения Параметры-переменные
1) В описании перед ними слово Var не ставится .
2) Внутри процедуры можно производить любые действия с параметрами-значениями, но изменения никак не отражаются на значениях соответствующих фактических параметров, то есть какими они были до вызова процедуры, такими же и останутся до завершения ее работы.
1) В описании перед ними стоит служебное слово Var
2) Они используются тогда, когда необходимо, чтобы изменения в теле процедуры значений формальных параметров приводили к изменению соответствующих фактических параметров.
Параметры-значения Параметры-переменные
3) Только входные
4) Хранятся в специальных ячейках памяти, называемых стеком;
и хранятся там столько, сколько работает процедура
5) При вызове процедуры в качестве параметра -значения может быть использовано имя переменной, значение, выражение.
3) Как входные, так и выходные.
4) Хранятся в обычных ячейках памяти;
при вызове процедуры передается адрес.
5) В качестве параметра-переменной может быть использовано только имя переменной.
Вызов процедуры
Процедура и функция вызываются по имени
процедуры или функции, в круглых скобках записываются фактические параметры.
Имя (Список фактических параметров)
При вызове процедуры или функции формальные параметры заменяются на
фактические.
Вызовв основной программе
Процедуры
Имя(фактические параметры) ;
Функции
К:= Имя(фактические параметры);
Аргументы и результаты передаются через параметры.
Имя процедуры не может находиться в выражении в качестве операнда.
Аргументы передаются через параметры.
В отличие от процедуры результат передается через имя функции.
Имя функции может входить в выражение как операнд.
Имя функции может использоваться в операторе вывода
Writeln (Имя(факт параметры));
Локальные и Глобальные переменные
Все переменные программы делятся на глобальные и локальные.
Глобальные переменные объявляются в разделе описаний основной программы.
Локальные переменные объявляются в процедурах и функциях. Таким образом, локальные переменные «живут» только во время работы подпрограммы.
В общем виде программа представляет собой следующее:
Program <имя>; Uses <модуль>; Label <список меток> Const <список констант>; Type <описание типов>; Var <описание глобальных переменных>; Procedure <имя>; <тело процедуры>; Function <имя>; <тело функции>; Begin <тело программы>; end.
Процедуры и функции
Пример1_1.
Составить программу , которая
Вычисляет an,
где а и n – целые числа (n>=0),
вводятся с клавиатуры
Процедура вычисления степени числа:
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;
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.
Пример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;
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.
Пример 2:
Составить программу, подсчитывающую число сочетаний без повторения из n элементов по k. Число сочетаний без повторения вычисляется по формуле:
n! С:= -------------
k! (n-k)!
Опишем процедуру для вычисления факториала числа 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;
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
Опишем функцию для вычисления факториала числа 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;
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.
Второй урок
Передача массивов в процедуры и функции
Типом параметра в списке формальных параметров может быть любой стандартный тип или ранее объявленный тип.
При использовании массива в качестве параметра –значения весь массив дублируется, хранится в стеке.
При использовании массива в качестве параметра – переменной передается адрес массива. (Адресом массива является адрес первого элемента массива. )
При использовании одного массива использование массива в качестве параметра не рекомендуется.
Передача массивов в процедуры и функции
При работе с одним массивом Описать массив как глобальные переменные,
т.е. в разделе Var перед описанием процедуры
Ввод массива в основной программе Использовать массив в теле процедуры или
функции Вывод массива в основной программе При необходимости в качестве параметров
можно передавать индексы элементов массива или отдельные элементы массива.
Пример 2.1
Дан одномерный массив.
Создать процедуру вычисления минимального значения среди элементов массива.
Вычислить Y= 2* MIN/(MIN+1)
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.
Пример 2.1
Дан двумерный массив.
Создать процедуру вычисления минимального значения среди элементов к-строки массива.
Вычислить Y= (MIN(1)+MIN(3))/MIN(1)
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.
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.
Параметры-массивы и параметры строки
При использовании нескольких массивов, массив является параметром.
Типом массива-параметра в списке формальных параметров должен быть ранее объявленный тип.
Например.type ar=array[1..10] of integer;var a:ar; …procedure ss (v:ar);begin … end;Begin … ss(a);end.
Даны 3 массива a,b,c размерностью na,nb,nc. Вычислить
y=(min(a)+min(b))/min(c)
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.
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.
Пример 3. Даны три одномерных массива целых чисел a[1:n], b[1:m], c[1:l].
Получить
min(b)+ min(c), если | min(a)|>10
G=
(1+min(c))/2 в противном случае
Использовать процедуру нахождения минимального элемента в массиве.
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.
Пример 4. Составить процедуру, которая меняет местами максимальный и первый элементы массива. Применить эту процедуру для двух данных массивов.
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.
Пример 5. Написать процедуру циклического сдвига элементов одномерного массива влево. Использовать ее для каждой строки двумерного массива.
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.