Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Sitkin_Informatika_Programmirovanie_v_DELPHI.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
600.56 Кб
Скачать

Подпрограммасоткрытымпараметром-массивом

Над массивами часто выполняются типовые для них действия(поиск максимального элемента, вычисление суммы элементов и т.д.).В связи с этим целесообразно типовые действия оформлять в видепользовательскихподпрограмм.Приописаниипользовательскойподпрограммы целесообразно в списке формальных параметров у па-раметра-массива не указывать число элементов, т.е. использовать от-крытый параметр-массив. Это позволит подпрограмме обрабатыватьмассивы любой длины, передаваемые ей целиком в качестве фактиче-ского массива. Должны лишь совпадать типы элементов формальногооткрытогопараметра-массиваифактическогомассива.

Какиобычныепараметрыподпрограмм,параметры-массивымогутбытьпараметрами-значениями(поумолчаниюонитаковыеиесть)илипараметрами-переменными.Вовторомслучаепередпара-метром-массивомдолжностоятьсловоvar.Первыепередаютмассивтолько в подпрограмму, вторыеи обратно. Примеры заголовковprocedurear (t:array[1..5]ofreal); //обычный массив, параметр-значениеprocedurear (t:array ofreal); //открытый массив, параметр-значениеfunctionar (t:array ofreal):real; //открытый массив, параметр-значениеprocedurear(vart:arrayofreal);//открытыймассив,параметр-переменная

Пример8.2

Разработаемпроектдлявводадвухмассивовизкомпонентов

Memoивычисленияпроизведенияэлементовкаждогоизних.

Заранеенеизвестнокакоечислоэлементоввведётпользовательв компонентыMemo, это значит, что следует объявить оба массивадинамическими и выделить под них память, когда число элементов вкаждом массиве станет известно, т.е. уже по ходу работы приложе-ния.Этопозволитэффективнеерасходовать память.

Над обоими массивами выполняется одно и то же действиеналицо целесообразность оформить его в виде подпрограммы. Ужеотметили, что число элементов в массивах на стадии разработки про-екта неизвестно, да и количество элементов в них наверняка будетразное. По этой причине следует в качестве формального параметраподпрограммыиспользоватьоткрытыйпараметр-массив,причёмон

будет параметром-значением, т.к. массив нужнопередаватьтольковподпрограмму,авозвра-щатьобратноподпрограммабудетотдельноечислозначение произведения элементов пере-данного ей массива. Блок-схема алгоритма вы-числения произведения, реализованная в нашейподпрограмме,изображенанарис.8.4.

Расположим на форме две кнопкиButton,связавснимивычисленияпроизведенийдлякаждогоизмассивов.Процессывычисленийпроизведенийидентичныдля обоихмассивов,поэтомуприведёмоднублок-схему(рис.8.5).

Рис.8.4

Рис.8.5

implementation

{$R*.dfm}

procedureM(varP:real;m:arrayofreal);

vark:byte;

begin

P:=1;

fork:=0tohigh(m)doP:=P*m[k];

end;

procedureTForm1.Button1Click(Sender:TObject);

varx:arrayofreal;nx,i:byte;Px:real;

begin

nx:= Memo1.Lines.Count; //число строк (т.е. эл-ов)SetLength(x, nx); //выделение памяти подмассивхfori:=0tonx-1do//в цикле один операторx[i]:=StrToFloat(Memo1.Lines[i]);//конец циклаM(Px, x); //вызов процедуры с передачей ей массиваLabel3.Caption:=FloatToStr(Px);

SetLength(x,0);//высвобождениепамяти

end;

ВтораяпроцедураTForm1.Button2ClickаналогичнаTForm1.Button1Click.