Процедуры

advertisement
Процедуры
и
Функции
Процедуры
Процедура – это вспомогательный алгоритм, который
предназначен для выполнения некоторых действий.
Применение:
• выполнение одинаковых действий в разных местах
программы
• разбивка программы (или другой процедуры) на
подзадачи для лучшего восприятия
Задача
Подзадача1
1.1
1.2
1.3
Подзадача2
2.1
2.2
Подзадача3
2.3
3.1
3.2
3.3
Процедуры
Без параметров
Параметры –
переменные
С параметрами
Параметры –
значения
Процедура без параметров
Описание процедуры имеет следующий вид:
procedure <ИМЯ >;
{Раздел описания локальных переменых}
begin
... {тело процедуры}
end;
Процедуры без параметров
Особенности:
Р1
•все процедуры расположены выше
основной программы (до BEGIN
основной программы)
•Имеют схожую структуру с основной
программой
Р2
Р21
Без параметров Пример 1
Составить программу для
вычисления площади
выпуклого 4-угольника,
заданного длинами его сторон
и диагональю.
B
C
A
D
Диагональ делит 4-угольник на два 3-угольника, к которым
применима формула Герона:
s
p ( p  a )( p  b)( p  c) ,
a, b, c  длины сторон ,
abc
p
2
program Prog1;
B
uses CRT;
C
var AB, BC, CD, DA, AC, S1, S2, S, a, b, c, p: real;
Procedure Ploshad1;
Связь процедуры Ploshad1 с
begin
остальными операторами происходит
p:=(a+b+c)/2;
с помощью переменных a, b, c и s.
s:=sqrt(p*(p-a)*(p-b)*(p-c));
Переменная p используется только
end;
внутри процедуры. Ее можно и
begin
описать A
в этой процедуре.
Clrscr;
D
Writeln('Задайте стороны 4-х угольника ABCD и его диагональ AC');
readln (AB, BC, CD, DA, AC);
a:=AB; b:=BC; c:=AC;
2 обращения к процедуре
Ploshad1;
Команды присваивания,
S1:=s;
задающие значения a, b, c
a:=DA; b:=AC; c:=CD;
Ploshad1;
перед каждым вызовом
S2:=s;
процедуры
Writeln ('Площадь ABCD= ', S1+S2:8:2);
Команды присваивания
readln;
для сохранения
end.
результатов
program Prog2;
var AB, BC, CD, DA, AC, S1, S2, S, a, b, c: real;
Procedure Ploshad1;
var p:real;
begin
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
begin
Writeln('Задайте стороны 4-х угольника ABCD и его
диагональ AC');
readln (AB, BC, CD, DA, AC);
a:=AB; b:=BC; c:=AC;
Ploshad1;
S1:=s;
a:=DA; b:=AC; c:=CD;
Ploshad1;
S2:=s;
Writeln ('Площадь ABCD= ', S1+S2:8:2);
readln;
end.
Переменные, которые описаны и используются
внутри подпрограммы, называются –
локальными.
Локальные переменные действуют только
внутри данной подпрограммы.
Переменные, которые описаны в основной
программе, называются – глобальными.
Глобальные переменные действуют
во всей программе и в каждой ее
процедуре.
P1
P21
P2
Задания
Составить и выполнить на компьютере программы для решения
задач:
1. Найти наибольшее из 4 чисел, используя процедуру
нахождения наибольшего из 2-х чисел.
2. Вывести на экран 5 строк примерно такого текста:
•
•
•
•
•
Привет Катя! Поздравляю тебя с новым учебным годом!
Привет Таня! Поздравляю тебя с новым учебным годом!
Привет Вася! Поздравляю тебя с новым учебным годом!
Привет Коля! Поздравляю тебя с новым учебным годом!
Привет Боря! Поздравляю тебя с новым учебным годом!
В программе использовать процедуру для вывода текста.
Процедуры с параметрами
Первый способ использования процедур не
удобен из-за большого количества
операторов присваивания, которые до
обращения к процедуре определяют
значения переменных a, b c.
Процедуры с параметрами позволяют при
вызове процедуры напрямую указывать
переменные или константы для
определения значений переменных a, b, c
(тех, которые используются в тексте
процедуры).
Процедуры с параметрами(значениями)
Особенности:
• все процедуры расположены выше основной
программы
• в заголовке процедуры перечисляются
формальные параметры, они обозначаются
именами, поскольку могут меняться
procedure Ploshad3 (a, b, c: real; );
• при вызове процедуры в скобках указывают
фактические параметры (числа или
арифметические выражения) в том же порядке
Ploshad3 (200, 100, 10,);
a
b
c
Процедуры
Особенности:
• для каждого формального параметра после
двоеточия указывают его тип
procedure A (x: real; y: integer; z: real);
• если однотипные параметры стоят рядом, их
перечисляют через запятую
procedure A (x, z: real; y, k, l: integer);
• внутри процедуры параметры используются так же,
как и переменные
Процедуры
Особенности:
• в процедуре можно объявлять дополнительные
локальные переменные, остальные процедуры не
имеют к ним доступа
program qq;
procedure A(x, y: integer);
var
var
a,
b:
real;
vara,
a,b:
b:real;
real;
begin
begin
a a:=
:=(x
(x+ +y)/6;
y)/6;
...
...
end;
end;
begin
...
end.
локальные
переменные
Процедуры с параметрами(переменными)
Procedure <ИМЯ> (Список параметров);
Procedure Ploshad3 (a, b, c: real; var s:real);
Параметры-значения
Параметры-переменные
В основной программе процедура вызывается
аналогично:
Ploshad3 (AB, BC, AC, S);
Параметры-значения используются для задания начальных
значений в процедуре,
Параметры-переменные для вывода результата.
program Prog3;
uses CRT;
var AB, BC, CD, DA, AC, S1, S2: real;
Procedure Ploshad3(a, b, c: real; var s :real);
var p:real;
begin
Формальные параметры
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
begin
Clrscr;
Writeln('Задайте стороны 4-угольника ABCD и его диагональ AC');
readln (AB, BC, CD, DA, AC);
Ploshad3(AB , BC , AC , S1);
Ploshad3(DA, AC, CD, S2);
Фактические параметры
Writeln ('Площадь ABCD= ', S1+S2:8:2);
readln;
end.
Правила вызова процедур с параметрами
1. Соответствие между параметрами команды вызова процедуры
и параметрами описания процедуры устанавливается не по
именам параметров, а по порядку следования:
число фактических параметров должно
соответствовать числу формальных параметров.
Procedure Ploshad3(var a, b, c, s :real);
Ploshad3(AB , BC , AC , S1);
Правила вызова процедур с параметрами
2. Типы фактических параметров должны
соответствовать типам формальных параметров.
3. Фактические параметры, соответствующие
результатам вычислений в процедуре, должны быть
только именами переменных.
Procedure Ploshad3 (a, b, c: real; var s :real);
Ploshad3 (АВ, 3 , 6-2.7 , S1);
4. Фактические параметры, соответствующие
начальным значениям для процедуры, могут быть
именами переменных, константами и выражениями
соответствующего типа.
Параметры-переменные
Задача: составить процедуру, которая меняет местами
значения двух переменных.
Особенности:
надо, чтобы изменения, сделанные в процедуре,
стали известны вызывающей программе
program qq;
var x, y: integer;
параметры могут изменяться
var
procedure Exchange( VAR:a,
b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
begin
x := 1; y := 2;
Exchange ( x, y );
writeln ( ’x = ’, x, ’ y = ’, y );
end;
Параметры-переменные
Запрещенные варианты вызова
Exchange ( 2, 3 );
{ числа }
Exchange ( x+z, y+2 ); { выражения }
Задания
«3». Составьте программу, в которой используется
процедура с параметрами, которая в качестве
входных данных получает три целых числа и
вычисляет их сумму, произведение и среднее
арифметическое.
«4». Составьте программу, в которой используется
процедура с параметрами, которая выводит
строку, состоящую из одинаковых символов.
Длина строки и символ, который выводится,
являются параметрами процедуры.
Download