- •Введение
- •1Алгоритм. Разработка алгоритмов. Блок-схемы
- •3Операторы языка Delphi
- •3.1Оператор присваивания
- •3.2Оператор ввода-вывода
- •3.3Составные операторы
- •3.4Условный оператор
- •3.7Цикл с параметром (счетчик)
- •3.8Массивы
- •3.5Цикл с предусловием
- •3.6 Цикл с постусловием
- •3.9Строки
- •3.10Записи
- •3.11Множества
- •4Отладчик программы Debugger
- •5Среда Delphi
- •6Создание интерфейса приложения
- •7Подпрограммы
- •7.1Процедуры
- •7.2Функции
- •7.3Параметры и аргументы
- •8Особенности объектно-ориентированного программирования
- •9Работа с кнопкой
- •10Работа с текстом
- •10.1Работа с надписью
- •10.2Функции преобразования числа в строку и строки в число
- •10.3Работа в однострочном редакторе (Edit, LabeledEdit)
- •10.4Работа с многострочным редактором Memo
- •11Диалоги, сообщения
- •11.1Процедура ShowMessage
- •11.2Процедура MessageDlg
- •11.3Процедура InputBox
- •11.4Процедура InputQuery
- •11.5Стандартные диалоги
- •12Работа с компонентом StringGrid
- •13Построение графика функции
- •14Файлы
- •15Работа со списками и переключателями
- •15.1 Компонент ChekBox
- •15.2Компонент RadioButton
- •16Исключительные ситуации
- •17Работа с несколькими модулями
- •18Работа с формой
- •Содержание
- •Список использованных источников
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.
