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

Презентация:



Advertisements
Похожие презентации
Программирование «сверху вниз» Процедуры и функции пользователя в Pascal.
Advertisements

Процедуры и функции Вербицкая Ольга Владимировна, Заозерная школа 16.
Подпрограммы: процедуры и функции Информатика. 1. Подпрограммы При решении различных задач часто возникает необходимость проводить вычисления по одним.
Процедуры и функции в Паскале. Рекурсия. Подпрограммы Часто в задаче требуется повторить определенную последовательность операторов в разных частях программы.
Подпрограммы в Паскале Подпрограммы в Паскале (Технология нисходящего программирования)
Что такое структурный подход в программировании? Как он реализуется в ЯП Паскаль? Что такое процедура? Кто дает название процедуре? Где записывается процедура?
Подпрограммы 1.Принцип модульности 2.Область действия переменных 3.Параметры подпрограмм 4.Модули.
Функции. Функция- это подпрограмма, которая вычисляет и возвращает некоторое значение. Функции описываются в разделе описаний следующим образом: Function.
МЕТОД ПОСЛЕДОВАТЕЛЬНОЙ ДЕТАЛИЗАЦИИ. ПРОЦЕДУРЫ И ФУНКЦИИ Урок 1.
Подпрограммы в Паскале Подпрограммы в Паскале (Технология нисходящего программирования)
Подпрограмма – это самостоятельная часть программы, реализующая определенный алгоритм.
Функции и процедуры Инструмент структурирования программ Два типа подпрограмм Описание Локальные и глобальные переменные Параметры: формальные и фактические.
Подпрограммы - процедуры. Очень часто в процессе выполнения программы требуется многократное выполнение какой-либо ее части. Лучше всего повторяющуюся.
Учитель НСШ Кумакшев А.Н, учитель БСШ2 Вахмистров Г.Г. Элективный курс по информатике «Процедуры и функции на языке Pascal».
Подпрограммы -это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Она записывается однократно, а в соответствующих.
Подпрограммы в Паскале.
ЗАПИСЬ ВСПОМОГАТЕЛЬНЫХ АЛГОРИТМОВ НА ЯЗЫКЕ Паскаль НАЧАЛА ПРОГРАММИРОВАНИЯ.
Подпрограммы 1 Определение подпрограммы. 2 Процедуры 3 Функции 4 Практическая работа.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Подпрограмма Подпрограмма - именованная часть программы к которой можно обращаться неоднократно по ее имени.
Транксрипт:

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

Арифметические : 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. Составить программу, которая Вычисляет a n, где а и 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. Составить программу для вычисления a n, где а и 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;

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); {заголовок процедуры} Vari: Integer; Begin R:=1; For i:=1 to n do R:=R*i; End;

Program pr2_1 ; Varn, k: Integer; a1, a2, a3: Longint; C: Real; Procedure factorial (n: Integer;Var R: Longint); {заголовок процедуры} Vari: 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

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

Program pr2_2; Varn, k: Integer; a1, a2, a3: Longint; C:real; Function factorial (n: Integer): Longint; {заголовок функции} Vari: 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.

Второй урок

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

Передача массивов в процедуры и функции При работе с одним массивом Описать массив как глобальные переменные, т.е. в разделе 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]

Пример 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]

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]

Параметры-массивы и параметры строки При использовании нескольких массивов, массив является параметром. Типом массива-параметра в списке формальных параметров должен быть ранее объявленный тип. Например. 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]

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]

Пример 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]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.