Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1_2сем.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
256 Кб
Скачать
    1. Объявление двумерного массива

В общем виде объявление двумерного массива выглядит так:

имя:array[НижняяГраница1..ВерхняяГраница1,

НижняяГраница2..ВерхняяГраница2] of Тип

где:

имя – имя массива;

array – слово языка Pascal, указывающее, что объявляемый элемент данных является массивом;

НижняяГраница1, ВерхняяГраница1, НижняяГраница2, ВерхняяГраница2 – целые константы, определяющие диапазон изменения индексов и, следовательно, число элементов массива;

Тип — тип элементов массива.

Примеры объявления массивов:

  1. const n_max=10;

m_max=5;

type matr=array[1..n_max,1..m_max] of integer;

var B:matr;

  1. type matr=array[1..10,1..5] of integer;

var B:matr;

  1. B: array[1..10,1..5] of integer;

Это три разных объявления одного и того же двумерного массива, состоящего максимум из 10 строк и максимум из 5 столбцов.

    1. Доступ к элементу массива

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

Например, элемент В[2,j] указывает на элемент, стоящий на пересечении 2-ой строки и j-го столбца массива В.

    1. Ввод и вывод массивов

Для ввода исходных данных и отображения результата используется компонент StringGrid (сетка, таблица), свойства которого приведены в табл. 11.1.

Таблица 11.1. Наиболее важные свойства StringGrid

Свойство

Значение

ColCount

Число столбцов таблицы

По умолчанию=5

RowCount

Число строк таблицы

По умолчанию=5

FixedCols

Число фиксированных (заголовочных) столбцов

По умолчанию=1. 1-я строка фиксирована (неподвижна) и выделена объёмом и цветом

FixedRows

Число фиксированных заголовочных строк

По умолчанию=1. 1-й столбец фиксирован (неподвижен) и выделен объёмом и цветом

Options.goEditing

Разрешение на редактирование ячеек.

По умолчанию запрещено (False)

Options.goTab

Разрешение пользоваться клавишей табуляции для переходов между ячейками таблицы

По умолчанию запрещено (False)

DefaultColWidth

Умалчиваемая ширина столбца в пикселях(=64)

DefaultRowHeight

Умалчиваемая высота строки в пикселях (=24)

GridLineWidth

Толщина линии таблицы в пикселях

(по умолчанию=1)

Cells[0..ColCount-1, 0..RowCount-1]

Ячейка-Сells

1-й индекс – номер столбца, 2-ой – номер строки. Строки и столбцы нумеруются от нуля.

    1. Пример обработки двумерного массива

Задача. Дана целочисленная матрица А = ||аi,j||n,m. Сформировать вектор В=(b1, b2, … bn), каждый элемент которого равен сумме нечетных элементов соответствующей строки матрицы А. Найти индексы (i0, j0) нечетного элемента матрицы А, расположенного в самой нижней ее строке и самом правом столбце. Если матрица не содержит нечетных элементов, выдать соответствующее сообщение. Предусмотреть возможность ввода матрицы вручную и заполнения ее случайными числами.

Входные данные: матрица А = ||аi,j||n,m.

Выходные данные: вектор B, i0, j0.

Блок-схема алгоритма показана на рисунке 11.1. Алгоритм состоит из ввода матрицы А, формирования вектора В, поиска индексов (i0,j0) нечетного элемента, расположенного в самой нижней правой позиции матрицы А.

Ввод матрицы. При работе с многомерными массивами сначала вводится размерность матрицы, т.е. количество ее строк (n) и столбцов (m). Затем для ввода элементов матрицы аi,j организуется пара вложенных циклов – по строкам (i) и по столбцам (j). В нашем случае необходимо добавить проверку, как вводить матрицу – вручную или случайным образом.

Формирование вектора В. Вектор В содержит n элементов – по одному для каждой строки матрицы А. Для формирования элемента bi (i=1,2,…,n) организуем внешний цикл по строкам, внутри которого методом накопления вычислим сумму (s) нечетных элементов i-ой строки. Накопление суммы осуществим во внутреннем цикле по столбцам (j). После окончания цикла по j занесем вычисленную сумму s в элемент bi.

Поиск индексов (i0,j0) нечетного элемента, расположенного в самой нижней правой позиции матрицы А. Перед началом поиска индексу i0 присвоим нулевое значение – признак того, что элемент пока еще не найден. Затем организуем пару циклов: внешний – по строкам (i), поскольку в первую очередь требуется определить номер строки, и внутренний – по столбцам (j). Оба цикла – по убыванию индекса, так как нас интересует номер самой нижней строки и номер самого правого столбца. Как только нечетный элемент найден, его индексы выводятся на экран и программа останавливается (процедура exit). Если элемент не найден (т.е. i0 осталось равным нулю), выдаем сообщение про отсутствие элемента.

Скомпонуем следующую форму и настроим ее свойства.

Исходная Форма после переименования Форма после настройки

объектов свойств объектов

В данной форме применим новые компоненты: GroupBox (3-я кнопка справа на странице Standard) , RadioGroup (2-я кнопка справа на странице Standard), StringGrid (4-я кнопка слева на странице Additional) . Панель GroupBox1 используем для зрительного объединения компонентов, связанных с вводом исходных данных, а на панели GroupBox2 расположим компоненты, в которые выводятся результаты. Группу переключателей (радиокнопок) RadioGroup1 используем для выбора способа задания матрицы А – вручную или случайным образом. Для ввода матрицы А и вывода вектора В воспользуемся компонентами StringGrid1 и StringGrid2 соответственно. Настроим свойства этих компонентов. Все кнопки на форме, а также объекты Edit, связанные с вводом/выводом данных, переименованы понятным образом (т.е. изменено их свойство Name).

Свойства Form1

  1. Form1.Caption:=Двумерные массивы

  2. З ададим жирный шрифт размером 9 пунктов для всех надписей на форме. Для этого щелкнем на форме – для ее выделения, затем щелкнем в Инспекторе объектов на строке . Справа от TFont появится многоточие:

. Щелкнем на этом многоточии и установим параметры, показанные в диалоговом окне «Шрифт»: начертание «жирный», размер 9.

Свойства компонентов GroupBox

Зададим надписи в левом верхнем углу панелей:

  1. GroupBox1.Caption:=Исходные данные

  2. GroupBox2.Caption:=Результат

Свойства компонента RadioGroup

  1. RadioGroup1.Caption:=Ввод матрицы А

  2. Зададим надписи для 2-х радиокнопок.

  3. RadioGroup1.Columns:=2 – число столбцов, в которых располагаются радиокнопки.

  4. RadioGroup1.ItemIndex:=0 – будет выбрана кнопка «вручную» (по умолчанию ItemIndex:=-1, т.е. ни одна радиокнопка не выбрана).

Щ елкаем на свойстве Items, затем на многоточии. В открывшемся окне редактора строк вводим надписи, которые хотим видеть рядом с радиокнопками, по одной в строке, после чего нажимаем кнопку ОК..

Свойства компонента StringGrid_А

Для ввода матрицы А используем компонент StringGrid1. Переименуем его в StringGrid_А:

  1. StringGrid1.Name:= StringGrid_А

По умолчанию, это таблица, состоящая из 5-ти строк и 5-ти столбцов. 1-ая строка и 1-ый столбец фиксированы (неподвижны) и выделены объемом и цветом. Это заголовки таблицы. Так как нам заголовки не нужны, то мы обнуляем число фиксированных столбцов и строк:

  1. StringGrid_А.FixedCols:=0 - число заголовочных столбцов

  2. StringGrid_А.FixedRows:=0 - число заголовочных строк

Число строк и столбцов таблицы хранится соответственно в свойствах RowCount и ColCount. Эти свойства получат свои значения в программе после ввода размерности матрицы из компонентов Edit_n и Edit_m.

Чтобы иметь возможность редактировать текст в ячейках таблицы и перемещаться по ячейкам таблицы с помощью клавиши табуляции, надо дважды щелкнуть на свойстве и установить следующие два режима:

  1. goEditing:=True (по умолчанию установлено goEditing:=False, т.е. редактирование запрещено);

  2. goTabs:=True (по умолчанию установлено goTabs:=False)

Свойства компонента StringGrid_B

Для вывода вектора В используем компонент StringGrid2. Переименуем его в StringGrid_В, удалим заголовочные строку и столбец и зададим число столбцов равным единице, поскольку это вектор:

  1. StringGrid2.Name:= StringGrid_В

  2. StringGrid_В.FixedCols:=0

  3. StringGrid_В.FixedRows:=0

  4. StringGrid_В.ColCount:=1