- •Д.С.Ситкин
- •Информатика.
- •Программированиев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
Обработкамногомерныхмассивов
x11 |
x12 |
x13 |
… |
x1n |
x21 |
x22 |
x23 |
… |
x2n |
x31 |
x32 |
x33 |
… |
x3n |
… |
… |
… |
… |
… |
xm1 |
xm2 |
xm3 |
… |
xmn |
Для обработки многомерных массивов обычно требуется орга-низовать перебор индексов. При этом при изменении одного индекса,другие тоже должны пробегать ряд значений. В случае двумерногомассива, эквивалентного матрицеmn, для каждого из значений пер-вого индекса от 1 доm, второй также должен последовательно при-нятьряд значенийот1доn(рис.9.1).
второйиндекс
первыйиндекс
i=1..m
j=1..n
Рис.9.1
В памяти компьютера элементымногомерного массива располагаютсяпоследовательнотакимобразом,чтопри переходе от одного элемента к со-седнему в первую очередь возрастаетсамыйправыйиндекс.
Пример9.1
Разработаемалгоритмзаполненияэлементовдвумерногомасси-варазмеромmn(рис.9.1) случайнымивещественнымичислами.
На рис. 9.2изображенасхема реализациис оператором цикла спредусловием,вложеннымвоператорцикласпредусловием.
constm=;
n=;
varx:array[1..m, 1..n]ofreal;i,j: byte;
begin
randomize;
Рис.9.2
end;//конецпроцедуры
{выделенную рамкой часть можно заменить на}fori:=1tomdo//циклпереборастрок,а внёмforj:=1tondo//цикл перебора столбцовx[i,j]:=random;
{реализуеттужесхему,нозаписькомпактнее}
Нарис.9.3изображенасхемареализациипримерасоператоромцикласпостусловием,вложеннымвоператорцикласпостусловием.
constm=;
n=;
varx:array[1..m, 1..n]ofreal;i,j: byte;
i= 1 |
|
|
|
j= 1 |
|
|
|
xij= случ. вещ.число 0..1 |
|
|
|
j=j+1 |
|
begin
randomize;
i:=1;//перваястрока
repeat//внешнийциклпереборстрок
j:=1;//первыйстолбецi-ойстроки
repeat//внутреннийциклпереборстолбцов
x[i,j]:=random;
j:=j+1;//переходкслед.столбцуi-ойстроки
untilj>n;//конецвнутреннегоцикла
i:=i+1;//переходкследующейстроке
untili>m;//конецвнешнегоцикла
end;//конецпроцедуры
Во всех вариантах, после того как пере-браны все элементы строки (т.е. все столб-цы), происходит выход из внутреннего циклаи переход к следующей итерации внешнегоцикласувеличениемпервогоиндексана
Рис.9.3
единицу,т.е.переходкновойстроке.Ипри
этом в начале новой итерации внешнего цикла второй индекс прини-мает значение единица, чтобы переход был к началу этой новой стро-ки. Отметим также, что рассматривался статический массив, памятьподегоэлементы выделяласьвовремякомпиляции.
КомпонентStringGrid
вкладкаadditional
Предназначендлясозданиянаформетаблиц,содержащихвячейках
строки текста. Используется для ввода,
вывода и редактиро-вания двумерных
массивов. Пиктограмма компонента
расположена навкладкеAdditionalпалитры
компонентов. Основные свойства
компо-нентаStringGridпредставленывтабл.9.1.
ОсновныесвойствакомпонентаStringGrid
Таблица9.1
Свойство |
Описание |
Name |
Имякомпонента.Используетсядлядоступаккомпонентуиегосвойствам |
ColCount |
Количествостолбцов |
RowCount |
Количествострок |
Cells |
Ячейкатаблицынапересечениистолбцаномер Colи строки номерRow, определяется элемен-томCells[Col,Row].Нумерациястолбцовистроквкомпонентеосуществляетсяотнуля |
FixedCols |
Количествозафиксированныхслевастолбцов |
FixedRows |
Количествозафиксированныхсверхустрок |
+Options.goEditing
.goTabs |
True/FalseВозможностьредактированиясо-держимого ячеек во время работы приложенияTrue/FalseВозможностьиспользованиякла- вишиTabдляперемещениякурсора |
DefaultColWidth |
Ширинастолбцов |
DefaultRowHeight |
Высотастрок |
GridLineWidth |
Шириналиний,разделяющихячейки |
+Font |
Характеристикишрифтатекста |
ParentFont |
True/False Наследование характеристикшрифтатекстаформы |
Enabled |
True/FalseДоступностькомпонента |
Visible |
True/FalseВидимостькомпонента |
Матрица, введённая с компонентаStringGridпо схемеCells[i,j]x[i,j]будеттранспонированавпамятиотносительнокомпонента,т.к.всвойствеCells[Col,Row]первымуказываетсяномерстолбца.
Продемонстрируем алгоритм считывания элементов из компо-нентаStringGridв память в виде двумерного массива, а также органи-зациювывода егоэлементовнаформуследующимпримером.
