Курсовая работа: Работа с двумерными числовыми массивами
4 rangeArray : Array[5..20] of string; // размер равен 16
1.2.2 Динамические массивы
У для динамических массивов память заранее не выделяется, создаётся только указатель. У таких массивов необходимо задавать размер перед использованием. Например
SetLength (dynArray, 5);
устанавливает длину первой размерности массива dynArray в пять, при этом выделяется необходимая память. Для всех динамических массивов минимальный индекс равен нулю.
Отдельные подмассивы многомерного динамического массива могут иметь разные размеры, так как по сути они являются отдельными массивами.
Пример определения динамических массивов:
1 var
2 byteArray: Array of Byte; // одномерный массив
3 multiArray: Array of Array of string; // двумерный массив
1.2.3 Функции для работы с массивами
Copy (Source : array; StartIndex, Count : Integer ) : array – создает копию части массива.
High (type or variable): Ordinal type - возвращает верхнюю границу диапазона значений массива.
Length (const SourceArray: array): Integer - возвращает число элементов в массиве.
Low (type or variable): Ordinal type - возвращает нижнюю границу диапазона значений массива
SetLength (var ArrayToChange: Array type; Dim1Length: Integer {;Dim2Length: Integer; ...}) - изменяет размер динамического массива. Для многомерных массивов может принимать более одного параметра длины.
Slice (SourceArray: array; Count: Integer): array - создает часть массива для передачи его как параметр в процедуру или функцию.
При использовании динамических массивов необходимо помнить, что вызовы SetLength выделяют для массива дополнительную память, которую необходимо освобождать после окончания работы с массивом. Для этого ему нужно присвоить специальное значение nil .
1.3 Использование массивов в рамках данного проекта
Работа со статическими массивами более проста и менее затратна в плане использования ресурсов компьютера, но так как в задании нигде не оговариваются конкретные размеры исходных матриц, то было принято решение построить программу ну основе использования динамических массивов.
Приложение построено таким образом, что размер используемой матрицы можно менять во время выполнения, так же он автоматически определяется при загрузке исходных данных из файла. Размеры динамических массивов внутри программы изменяются соответствующим образом автоматически.
2. Практическая часть
2.1 Постановка задачи
Приложение предназначено для выполнения специфической обработки матриц. Исходные матрицы должны загружаться из файла, либо вводиться непосредственно в элементы интерфейса приложения.
Граничные условия на вводимые данные таковы:
· Размеры матрицы должны лежать в пределах [1; 2147483647]. Если введено число, выходящее из этого диапазона, либо значение, не являющееся целым числом, то размер устанавливается равным единице.
· Элементы матрицы должны лежать в пределах [-2147483648; 2147483647]. Если какой-то из элементов лежит вне этого диапазона, либо введёно значение, не являющееся целым числом, то элемент устанавливается равным нулю.
· В заданиях, связанных с подсчётом сумм элементов, результат может лежать в пределах [-9223372036854775808; 9223372036854775807]. Если сумма выходит за эти пределы, результат не определён.
2.2 Функциональная структура программы
Программа разделена на три модуля:
MatrixOperations – различные операции с матрицей
fileIO – сохранение матрицы в файл/ чтение матрицы из файла
form – форма приложения, процедуры обмена данными между массивами и элементами формы. Структура связей модулей такова:
2.3 Описание модулей
2.3.1 Модуль MatrixOperations
Это основной модуль программы, содержащий процедуры для выполнения матричных операций, предусмотренных заданием.