Процедуры и Функции Процедуры Процедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий. Применение: • выполнение одинаковых действий в разных местах программы • разбивка программы (или другой процедуры) на подзадачи для лучшего восприятия Задача Подзадача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 длины сторон , abc 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». Составьте программу, в которой используется процедура с параметрами, которая выводит строку, состоящую из одинаковых символов. Длина строки и символ, который выводится, являются параметрами процедуры.