Подпрограммы.ppt
- Количество слайдов: 21
Подпрограммы
Подпрограмма – это законченная алгоритмическая, логически законченная группа операторов, которая предназначена для выполнения некоторого круга операций и может быть вызвана по имени в тексте основной программы неограниченное число раз. В языке Object Pascal есть два вида подпрограмм – процедуры и функции. Отличие функции от процедуры состоит в том, что с именем функции связано значение, поэтому функцию можно использовать в качестве операнда выражения.
Подпрограмма может иметь локальные и глобальные по отношению к ней параметры. Локальным является параметр, действие которого ограничено только подпрограммой, в которой он описан. Всякий другой параметр будет глобальным. Все глобальные параметры всегда описаны за пределами подпрограммы или программного модуля, в котором они используются.
Как правило, подпрограмма имеет параметры. Различают формальные и фактические операторы. Параметры, которые указываются в объявлении подпрограммы, называются формальными. Параметры, которые указываются при вызове подпрограммы, называются фактическими. Параметры подпрограмм могут быть: - входными (параметры значения) - выходными
ПРОЦЕДУРЫ Всякая процедура имеет заголовок и тело. Тело процедуры состоит из операторов, предназначенных для описания имен и действий над данными.
Синтаксис процедуры имеет вид заголовок Procedure procedure. Name(parameter. List); раздел локальных описаний; begin тело список операторов; end; Рrocedure. Name – имя процедуры. Именем процедуры может быть любое имя, не совпадающее ни с каким другим описанным в том же, что и процедура, блоке, именем.
Рarameter. List – список формальных параметров может быть либо пуст (в этом случае скобки можно не использовать), либо должен содержать последовательность входных и/или выходных параметров. Описание входных параметров (параметровзначений) в списке формальных параметров имеет такой вид: список_переменных1: тип 1; список_переменных2: тип 2; … Описание выходных параметров (параметровпеременных): Var список_переменных1: тип 1; var список_переменных2: тип 2; … таким образом выходные параметры объявляются после слова var в виде переменной или константы.
При использовании в качестве параметров процедур данных сложного типа (массивы, множества, записи) в основной программе необходимо предварительно описать имя типа этих данных, которые потом указываются в списке формальных параметров процедуры. type Mas=array[l. . 10, 1. . 10] of real; Тогда заголовок процедуры может иметь следующий вид: procedure Malt(A, B: Mas; var C: Mas);
Пример 1. Составим программу для вычисления суммы. и оформим ее в виде процедуры procedure Summa (N: integer; var Sm integer); var I: integer; begin Sm: =0; for I: =1 to N do Sm: =Sm+I end; Эту процедуру можно вызвать в основной программе следующим образом: Summa(10, S);
ФУНКЦИИ В отличие от процедуры функция предназначена для вычисления одного значения любого типа. Синтаксис функции имеет вид Function имя функции(список формальных параметров: тип): тип результата ; Описания локальных переменных; begin Список операторов; end;
Тип функции указывается в конце ее заголовка. Тип возвращаемого значения отделяется от списка формальных параметров символом ": " (двоеточие). Кроме того, в теле функции, по крайней мере, один раз должно быть определено значение функции. Это значение присваивается имени функции или переменной Result. В разделе операторов функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит имя этой функции. Вызов функции в основной программе осуществляется непосредственно внутри выражения по ее имени с указанием фактических параметров
Пример. Создать программу вычисления суммы целых чисел от одного до n в виде функции и вычислить сумму первых 10 чисел и частноое Σ 10/Σ 20: function Sm (N: integer): integer; var S, I: integer; begin S: =0; for I: =l to N do S: =S+I; Sm: =S; // или resalt: =s end; Тогда в основной программе можно использовать следующий оператор: X: =Sm(10); который присваивает переменной Х значение . следующий оператор определяет частное Y: =Sm(10)/Sm(20);
Пример. Создать программу вычисления суммы целых чисел от одного до n виде функции и вычислить сумму первых 10 чисел и частноое Σ 10/Σ 20: function Sm (N: integer): integer; var S, I: integer; begin S: =0; for I: =l to N do S: =S+I; Sm: =S; // или resalt: =s end; Тогда в основной программе можно использовать следующий оператор: X: =Sm(10); который присваивает переменной Х значение . следующий оператор определяет частное Y: =Sm(10)/Sm(20);
Пример использования подпрограмм для ввода, вывода и сортировки массивов
type mas=array [1. . 20] of real; var Form 1: TForm 1; b, a, asort, bsort: mas; j, i, na, nb, imin: integer; min: real; Implementation {$R *. dfm}
procedure TForm 1. Edit 1 Change(Sender: TObject); begin na: =strtoint(edit 1. Text); Stringgrid 1. Col. Count: =na; Stringgrid 2. Col. Count: =na; For i: =1 to na do begin stringgrid 1. Cells[i-1, 0]: =inttostr(i)+‘элемент'; stringgrid 2. Cells[i-1, 0]: =inttostr(i)+‘элемент'; end;
procedure vvod(t 1: Tstringgrid; nf: integer; var af: mas ); begin for i: =1 to nf do af[i]: =strtofloat(t 1. Cells[i-1, 1]) end; procedure sort(af: mas; nf: integer; Var asf: mas); begin j: =1; while j<=nf do begin imin: =j; min: =af[imin];
for i: =j to nf do if af[i]
procedure resalt(t 1: Tstringgrid; nf: integer; asf: mas); begin for i: =1 to nf do t 1. Cells[i-1, 1]: =floattostr(asf[i]); end; procedure TForm 1. Button 1 Click(Sender: TObject); begin vvod(stringgrid 1, na, a); sort(a, na, asort); resalt(stringgrid 2, na, asort); end;
procedure TForm 1. Edit 2 Change(Sender: TObject); begin nb: =strtoint(edit 2. Text); Stringgrid 3. Col. Count: =nb; Stringgrid 4. Col. Count: =nb; For i: =1 to nb do begin stringgrid 3. Cells[i-1, 0]: =inttostr(i)+‘элемент'; stringgrid 4. Cells[i-1, 0]: =inttostr(i)+‘элемент'; end; procedure TForm 1. Button 2 Click(Sender: TObject); begin vvod(stringgrid 3, nb, b); sort(b, nb, asort); resalt(stringgrid 4, nb, bsort); end;


