- •Д.С.Ситкин
- •Информатика.
- •Программированиевdelphi
- •Лабораторныйпрактикум
- •Содержание
- •Введение
- •Основныепонятияпрограммирования
- •Этапыпрограммирования
- •Средаdelphi.Созданиепростейшегопроекта
- •Формаиеёсвойства
- •Компонентыформыиихсвойства
- •КомпонентLabeledEdit
- •Событиеипроцедураобработкисобытия
- •Пример1.1
- •Компиляцияизапускпроектанаисполнение
- •Структураисохранениепроекта
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Линейныйалгоритм
- •Типыданных
- •Константыипеременные
- •Арифметическиеоперации
- •Правилазаписитиповыхдействий
- •Структурапроцедурыобработкисобытия
- •Пример2.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Подпрограммы
- •Классификацияиструктураподпрограмм
- •Механизмработыподпрограммыиобменапараметрами
- •Пример3.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Структурамодуля
- •Созданиеиподключениемодуля
- •Пример4.1
- •Условныйоператор.Неполнаяформа
- •Условныйоператор.Полнаяформа
- •IfусловиеthenоператорS1elseоператорS2
- •Пример5.1
- •Пример5.2
- •Операторвыбора
- •Пример5.3
- •Содержаниеотчёта
- •Контрольныевопросы
- •Контрольсинтаксисавводимыхданных
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Алгоритмыповторений
- •Операторцикласпредварительнымусловием
- •Пример7.1
- •Операторцикласпараметром(сосчётчиком)
- •Пример7.2
- •Пример7.3
- •Операторцикласпоследующимусловием
- •Пример7.4
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Массивы
- •Объявлениемассива
- •Обработкамассивов
- •Пример8.1
- •Динамическиемассивы
- •Подпрограммасоткрытымпараметром-массивом
- •Пример8.2
- •Целесообразностьвыделенияпамятиподмассивы
- •Контрольсинтаксисаэлементовмассива
- •Задание
- •Обработкамногомерныхмассивов
- •Пример9.1
- •КомпонентStringGrid
- •Пример9.2
- •Сортировкамассивов
- •Пример9.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Внешниефайлы
- •Физическиеилогическиефайлы
- •Классификациялогическихфайлов
- •Процедурыифункцииобработкифайлов
- •Пример 10.1
- •КомпонентыOpenDialog иSaveDialog
- •Пример 10.2
- •Пример 10.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Олабораторнойработе
- •Информатика. Программированиев delphi
Подпрограммасоткрытымпараметром-массивом
Над массивами часто выполняются типовые для них действия(поиск максимального элемента, вычисление суммы элементов и т.д.).В связи с этим целесообразно типовые действия оформлять в видепользовательскихподпрограмм.Приописаниипользовательскойподпрограммы целесообразно в списке формальных параметров у па-раметра-массива не указывать число элементов, т.е. использовать от-крытый параметр-массив. Это позволит подпрограмме обрабатыватьмассивы любой длины, передаваемые ей целиком в качестве фактиче-ского массива. Должны лишь совпадать типы элементов формальногооткрытогопараметра-массиваифактическогомассива.
Какиобычныепараметрыподпрограмм,параметры-массивымогутбытьпараметрами-значениями(поумолчаниюонитаковыеиесть)илипараметрами-переменными.Вовторомслучаепередпара-метром-массивомдолжностоятьслово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.
