Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Delphi.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

7Подпрограммы

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

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

Работа с любой подпрограммой включает в себя два этапа: описание подпрограммы и ее вызов.

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

В различных модулях Delphi имеется много стандартных подпрограмм, которые можно вызывать без предварительного описания (SQR (x :extended) :extended, EXP (x: extended) :extended и т.д.).

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

7.1Процедуры

При описании процедуры указывается заголовок, который состоит из обязательного слова Procedure, имени процедуры и необязательного списка параметров в круглых скобках с указанием типа каждого параметра). Вызов процедуры осуществляется с помощью оператора вызова, который состоит из имени процедуры и списка аргументов, заключенных в круглые скобки. Аргументы должны быть указаны строго в том порядке и с теми типами данных, как и при описании процедуры.

Пример 7 (реализация в консольном приложении).

Найти произведение двух одномерных массивов.

Блок-схема алгоритма представлена на рисунке 10. Для примера в алгоритме представлена только процедура ввода двумерного маасива.

j

Рисунок 10 - Блок-схема алгоритма

Текст программы:

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils;

Const Nmax=255;

Type

ArrayType=Array [0..Nmax-1,0..Nmax-1] of integer;

Procedure Print (S:ShortString;

D: ArrayType;K,L:integer);

var

i,j:integer;

begin

Writeln;

writeln(' massiv ',S);

for i:=0 to K-1 do

begin

for j:= 0 to L-1 do

write(D[i,j]:5);

WriteLn;

end;

WriteLn;

end;

Procedure Input (var D: ArrayType;K,L:integer);

var

i,j:integer;

begin

Writeln;

for I := 0 to K-1 do

begin

WriteLn(i+1,' stroka');

for j := 0 to L - 1 do

begin

Write('input ',j+1,' element matrix ');

ReadLn(D[i,j]);

end;

end;

end;

Procedure Umnozh (var C: ArrayType;K,L,N:integer;A,B:ArrayType);

var

i,j,S,H:integer;

begin

for i := 0 to K-1 do

for j := 0 to L-1 do

begin

S:=0;

for h := 0 to N - 1 do

S:=S+A[i,h]*B[h,j];

C[i,j]:=S;

end;

end;

var

A,B,C:ArrayType;

K,L,N:integer;

begin

Writeln('Program Umnozh A[KxN]xB[NxL]');

Writeln('vvedite razmernost massiva A');

Write('k=');

ReadLn(K);

Write('N=');

ReadLn(N);

Input(A,K,N);

Writeln('vvedite razmernost massiva B');

WriteLn('N=',N);

Write('L=');

ReadLn(L);

Input(B,N,L);

Umnozh(C,K,L,N,A,B);

Print('A[kxN]',A,k,N);

Print('B[NxL]',B,N,L);

Print('C[KxL]',C,K,L);

Readln;

end.