Функции и процедуры в Паскале

Download Report

Transcript Функции и процедуры в Паскале

Slide 1

Процедуры и
функции
в
Паскале
Методическая разработка
Учителя : Окунцова А.Л.
Екимова М.Р.


Slide 2

Назначение






При разработке программы иногда появляются повторяемые
группы действий или возникает необходимость расчленить
программу на функциональные модули, сделать ее структуру
иерархической. Для этого во всех языках программирования
существуют средства организации подпрограмм. В таком виде
главная программа соответствует укрупненному плану решения
задачи, а ее команды — вызову соответствующей подзадачи,
реализованной в виде подпрограммы.
В Паскале подпрограмма является частью основной
программы, ее описание располагается между разделом var
главной программы и ее программным блоком (первым begin).
Подпрограмм может быть несколько, их описания
располагаются в произвольном порядке одно за другим.
Описание подпрограммы можно сравнить с записываемой в
математике формулой «в общем виде», в которую при расчетах
подставляются конкретные значения.


Slide 3

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

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


Slide 4

Содержание тем:
 Процедуры
 Функции

в Паскале

в Паскале

 Рекурсии
 Выход


Slide 5

Функции
в
Паскале


Slide 6

Разделы





Описание
Структура
Переменные
Примеры

• Задания
• Диктант
• Начало


Slide 7

Функция


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


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


Далее


Slide 8

Функции Pascal можно разделить
на три группы:






стандартные функции (abs(x), sqrt(x), sqr(x),
sin(x), cos(x), и т.д.);
функции программиста (объявлять свою
собственную функцию и дальнейшем
использовать её так же как и стандартную);
библиотечные функции (стандартные
библиотечные модули).
Меню


Slide 9

Структура функции
Function <имя> (<параметры>):<тип результата>;
const …;

…..

Блок описания локальных переменных

var … ;
Begin

<операторы>
имя:= выражение;
End;
В разделе операторов должен находится, хотя бы один
оператор, присваивающий имени функции значение.
Меню


Slide 10

Объявление переменных
 Глобальные переменные - переменные,
объявленные в основной программе,
доступны всем операторам программы, а так
же операторам процедур и функций.
•Локальные переменные - переменные,
объявленные в процедуре или функции. Они
доступны только операторам процедур или
функций.
Далее


Slide 11

Пример:
program primer1;
var
r, c, q : real;

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

function inper ( a: real; b: real) :real;
var
x,y: real;
begin

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

<операторы функции>;
end;
begin

(основная программа)

Назад


Slide 12

Примеры:
Вычисление функции n  n
 Вычисление скорости свободного
падения тела.





Вычисление n-й степени числа.
Меню


Slide 13

Вычисление функции
nn
program f1;
uses Crt;
var n,x: real;
function fun(a:real):real;
var y:real;
begin
y:=sqrt(a)+a;
fun:=y;
end;

begin
write('n='); readln(n);
x:=fun(n);
writeln('x=',x:3:5);
readln;
end.

Назад


Slide 14

Вычисление скорости свободного
падения тела.
program f2;
uses Crt;
var t,v: real;
function fun(t:real):real;
begin
fun:=9.8*t;
end;

begin
write('t='); readln(t);
v:=fun(t);
writeln('v=',v:3:5);
readln;
end.
Назад


Slide 15

Вычисление n-й степени числа.
program f2;
uses Crt;
var n: integer;
z,x: real;
function
step(a:integer;x:real):real;
var y:real;
i:integer;
begin
y:=1;
for i:=1 to a do
begin y:=y*x;
step:=y; end;
end;

begin
write(‘степень='); readln(n);
write('x='); readln(x);
z:=step(n,x);
writeln('z=',z:3:5);
readln;
end.

Назад


Slide 16

Задания:
1.

Рассчитать значение х=

66

13  13



2

21  21



2

2

2. Рассчитать значение х= 1  sin 1  5  sin 5  3  sin 3
3

3

3

3. Даны шесть различных чисел. Определить
максимальное из них.
4.Написать программу свободного падения. выводящую
таблицу скорости за первые 10 секунд с шагом 0,5 секунд
Меню


Slide 17

Вычисление функции
66



13  13

2

Ф
У
Н
К
Ц
И
я

program f1;
uses Crt;
var n,x,s: real;
i:integer;
function fun(a:real):real;
var y:real;
begin
y:=sqrt(a)+a;
fun:=y;
end;

2



21  21
2

begin
s:=0;
for i:=1 to 3 do begin
write('n='); readln(n);
x:=fun(n)/2;
s:=s+x;
end;
writeln(‘s=',s:3:5);
readln;
end.
Назад


Slide 18

Вычисление функции
1  sin 1
3

Ф
У
Н
К
Ц

И
я



5  sin 5
3

program f1;
uses Crt;
var n,x: real;
i:integer;
function fun(a:real):real;
var y:real;
begin
y:=a+sin(a);
fun:=y;
end;



3  sin 3
3

begin
s:=0;
for i:=1 to 3 do begin
write('n='); readln(n);
x:=fun(n)/3;
s:=s+x;
end;
writeln(‘s=',s:3:5);
readln;
end.
Назад


Slide 19

Составить таблицу скорости
свободного падения тела
за первые 10 секунд с шагом 0,5 секунд

Ф
У
Н
К
Ц

И
я

program f2;
uses Crt;
var t,v: real;
n:integer;
function fun(t:real):real;
begin
fun:=9.8*t;
end;

begin
n:=1;
whle n<=10 do begin
write('t='); readln(t);
v:=fun(t);
writeln(‘t=‘;t'v=',v:3:5);
end;
readln;
end.
Назад


Slide 20

Даны шесть различных чисел.
Определить максимальное из них.

Назад


Slide 21

Диктант по теме:
«Функции в Паскале»
1.

2.

3.
4.
5.

Какую подпрограмму можно назвать
функцией?
Объясните назначение локальных и
глобальных переменных.
Что такое указатель?
Перечислите группы функций.
Каким образом происходит обращение
к функции?


Slide 22

Ответы на диктант «Функции в Паскале»
1.

2.

3.
4.
5.

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


Slide 23

Процедуры в
Паскале


Slide 24

Содержание













Назначение и структура процедуры
Процедуры без параметров
Процедуры с параметрами
Формальный параметр
Фактический параметр
Параметры-значения
Параметры-переменные
Взаимодействие параметров программы
и процедуры
Виды процедур
Примеры программ с процедурами
Задания для самостоятельного решения
содержание


Slide 25

Процедура 

программа, имеющая любое количество
входных и выходных данных;



может быть описана без параметров и с
параметрами.

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


Slide 26

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

Фактические
параметрызначения

Глобальные переменные
программы

Локальные переменные
процедуры

Формальные
параметры –
значения

Формальные
параметрыпеременные

Основная программа

далее


Slide 27

Назначение и структура
процедуры






Процедура – это выделенный в отдельный блок часть
повторяющегося алгоритма из основной программы,
записывается до основной программы в блоке
описания процедур.
Структура процедуры похожа на структуру основной
программы, но вместо заголовка (program) пишется
«procedure» и вместо знака препинания “.”в конце
ставится “;”.
Процедуры позволяют выполнять одно и тоже
действие с разными входными и выходными
данными.
далее


Slide 28

Процедура без параметров:






может реализовывать любой
алгоритм;
все её переменные определяются и
вызываются программой.
Переменным присваиваются
необходимые для выполнения
процедуры значения.
далее


Slide 29

Процедуры без описания
параметров
Описание процедуры

Procedure <имя >
(<список локальных переменых>);
Begin
<операторы процедуры>
End;

далее


Slide 30

Пример:(процедура без
параметров)
Program chislo;
Var A, B, C, D: integer;

procedure Init;
begin
write (‘Введите 4 целых
числа:’);
readln (A, B, C, D);
end;
меню

begin
Вызов процедуры
Init;
writeln((“а=“; A);
writeln((“b=“; B);
writeln((“c=“; C);
writeln((“d=“; D);
Readln;
end.


Slide 31

Процедуры с параметрами:








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


Slide 32

Процедуры с параметрами.
Описание процедуры
Procedure <имя >(<список формальных
параметров>);
const …;



…..
Var <список локальных переменных>;
Begin
<операторы процедуры>
End;

далее


Slide 33

Пример: (процедуры с параметрами)
с выходными параметрами
Procedure swap (Var X, Y: integer);
Var t: integer;
локальные переменные
Begin
t:=X; X:=Y; Y:=t;
End;
 с входными параметрами
Procedure OutData (A, B, C, D: integer);
Begin
write (‘Вывод измененных величин:’);
writeln (A, B, C, D);
End;


меню


Slide 34

Формальные параметры




Формальные параметры - это локальные
переменные(определялись при изучении
функции) программы, которые перечисляются в
заголовке процедуры с обязательным указанием
типа для каждого из них.
Формальный параметр называют параметром значения, если передача фактического
параметра формальному происходит только по
его значению (как будто формальный параметр
присвоил значение фактического параметра и
работает с ним отдельно).
Например:
Procedure wwod (x, y: integer, z:real);
назад

далее


Slide 35

Параметры-переменные


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

Например:
Procedure InData( Var n:integer;
Var a0,d:real );
назад


Slide 36

Фактические параметры




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

В описании процедуры - Chislo (A, B, C, D);

При
вызове
процедуры
Chislo
(10,
20,
40,
50);
назад


Slide 37

Примеры:
1.
2.

Замена величин
Сумма арифметической прогрессии

меню


Slide 38

Замена Величин


Составить программу для изменения
целых величин А на значение величины В,
а величину С – на величину D. Составить
процедуру для осуществления обмена
значениями двух переменных величин.
План:
1. Процедура ввода чисел
2. Процедура замены значения

3. Процедура вывода новых значений
далее
назад


Slide 39

Процедура ввода
Program chislo;
Uses crt;
Var
A, B, C, D: integer;
глобальные переменные
Procedure wwod;
{без формальных
параметров}
Begin
write (‘Введите 4 целых числа:’);
readln (A, B, C, D);
end;
далее


Slide 40

Процедура замены
Procedure swap (Var X, Y: integer); {с выходными параметрами}
Var Z: integer;
локальные переменные
Begin
Z:=X; X:=Y; Y:=Z;
End;

Процедура вывода

Procedure wiwod (A, B, C, D: integer); {с входными параметрами}
локальные переменные
Begin
write (‘Вывод измененных величин:’);
writeln (A, B, C, D);
End;
далее


Slide 41

Основная программа
Begin
wwod;
Swap (A, B);
Swap (C, D);
wiwod (A, B, C, D);
End.


Slide 42

Вычисление суммы арифметической
прогрессии


Вычислить сумму арифметической прогрессии по
заданному начальному члену a0, количеству n элементов,
для которых необходимо подсчитать сумму, и заданной
разности d. Задачу решить для разных входных данных.
Список процедур для решения задачи
1.
2.
3.
4.
5.
6.

Ввод данных
Подсчет суммы
Вывод результата
Вывод меню команд
Выбор пункта меню
Вызов процедуры по выбранному пункту меню
далее


Slide 43

Описание глобальных переменных
Var
k, n :integer;
Sn, a0, d:real;

начальный элемент

Ввод данных
Procedure InData( Var n:integer; Var a0,d:real );
Begin
Write(‘Введите номер члена n:’);
Readln(n);
Write(‘Введите начальный член a0:’); Readln(a0);
Write(‘Введите разность d:’);
Readln(d);
далее
End;


Slide 44

Процедура: Подсчет суммы
Procedure Summa ( n: integer; a0,d: real;
Var Sn:real); {с входными и выходными параметрами}
Begin
Sn:=a0+d*(n-1);
End;
Вывод результата

Procedure OutData( n:integer; Sn:real );
Begin
Writeln(‘S’,n,’=‘, Sn:6:3);
Readln;
End;

далее


Slide 45

Процедура: Вывод меню команд
Procedure MyMenu;
Begin
Writeln(‘1.Ввод данных’);
Writeln(‘2.Подсчет суммы’);
Writeln(‘3.Вывод результата’);
Writeln(‘0.Выход’);
End;
Процедура: Выбор пункта меню
Procedure Change ( var k:integer );
Begin
Write(‘Сделай выбор (0,1,2,3) ->’);
Readln(k);
далее
End;


Slide 46

Процедура: Вызов процедуры по
выбранному пункту меню
Procedure MyChoice ( k:integer );
Begin
Case k of
1: InData (N,A0,D);
2: Summa (N,A0,D,SN);
3: OutData (N,SN);
4: Exit;
End;
End;
далее


Slide 47

Основной блок
выполнения программы
Begin
Repeat
MyMenu;
Change (K);
MyChoice (K);
Until K=0;
End.
назад


Slide 48

Задания для самостоятельной
работы
1. Составить программу для вычисления суммы

членов геометрической прогрессии.
2. Даны стороны двух треугольников. Найти
сумму их периметров и сумму их площадей.
3. Даны координаты точек прямоугольника.
Определить, является ли он квадратом,
ромбом, трапецией или параллелограммом, и
вычислить, исходя из этого, площадь фигуры.
4. Найти все простые числа из заданного
интервала натуральных чисел [N1, N2].
меню


Slide 49

Итог: Познакомились со
следующими видами процедур:







без формальных параметров
с входными данными (с параметром -значения)
с выходными данными (с параметром переменные)
с входными и выходными данными
Рекурсивные процедуры (содержат вызов
процедуры в своем блоке операторов) (далее)

меню


Slide 50

Рекурсии

меню


Slide 51

Рекурсивная процедура
Var N : Integer;
Procedure Factorial (N:integer; Var
f:integer);
Begin
If N=0 Then F:=1
Else Begin
Factorial (N-1, F);
F:=F*N;
End;
End;
назад

далее


Slide 52

Основная программа
Var

N : integer;
F : integer;
Begin
Write (‘N=’);
Readln (N);
Factorial (N, F);
Writeln (N,’!=‘, F);
End.
далее
назад


Slide 53

Работа программы при N=3
Вызов процедуры Factorial ( N, F ); {N=3}
Вызов процедуры Factorial ( N-1, F ); {N-1=2}
Вызов процедуры Factorial ( N-1, F ); {N-1=1}
Вызов процедуры Factorial ( N-1, F ); {N-1=0}
F:=1;
F:=F*N; {F=1*1}
F:=F*N; {F=1*2}
F:=F*N; {F=2*3}
далее
назад


Slide 54

Пример: Вычисление факториала


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


Slide 55

Пример:


Составить программу для генерации
натурального K - значного числа,
состоящего из цифр 1, 2, 3, 4, 5
(рекурсивный вызов процедуры).

далее
назад


Slide 56

Procedure Gen ( K:integer );
Var L: integer;
Begin
{если разряд больше допустимого, то выводим число}
If (k>N) Then Begin
Write(‘ ‘,S); Exit;
End;
For L:=1 to 5 do Begin
{формируем L-ую цуфру в K-ом разряде числа S}
S:=S*10+L;
{вызов генерации цифры для следующего разряда}
Gen(k+1);
{восстанавливаем число до предыдущего разряда}
S:=S div 10;
End;
End;
далее
назад


Slide 57

Var
S:integer;
K:integer;
Begin
Write (‘Введите разрядность числа -’);
Readln (K);
S:=0; {пока числа нет}
{генерируем число с первого разряда}
Gen(1);
End.

далее
назад


Slide 58

Работа программы при K=3
Вызов процедуры Gen(1); (K=1)
For L:=1 to 5 do
Вызов процедуры Gen(K+1); (K=2)

For L:=1 to 5 do
Вызов процедуры Gen(K+1); (K=3)
For L:=1 to 5 do
Вызов процедуры
Gen(K+1); (K=4)
Write(S)
далее
назад


Slide 59

Задания для самостоятельной
работы (процедуры с рекурсией)
1. Вычислить значение многочлена по формуле
2.

3.
4.

5.

Горнера P(x)=((((a0*x+a1)*x+a2)*x+a3)*x+ +a4)*x+a5
Вывести N-ое число Фиббоначи, вычисляемое по
формуле F(n)=F(n-1)+F(n-2), где F(1)=1, F(2)=1.
Вывести на экран цифры заданного числа в
обратном порядке.
Определить, является ли заданное слово
палиндромом (перевертышем).
Написать процедуру для перевода числа из
десятичной системы в двоичную и обратно.
назад