48466 (Работа с двумерными числовыми массивами), страница 3
Описание файла
Документ из архива "Работа с двумерными числовыми массивами", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48466"
Текст 3 страницы из документа "48466"
Процедура saveClick является обработчиком щелчка по пункту меню Файл->Сохранить. Она отображает диалог выбора файла для сохранения, создаёт выбранный файл, а после окончания записи закрывает его:
-
{обработчик Файл->Сохранить}
-
procedure TMainForm.saveClick(Sender: TObject);
-
var
-
outFile: TextFile;
-
begin
-
//отобразим диалог выбора файла для сохранения, если отмена - выходим
-
if SaveDialog.Execute = false then exit;
-
AssignFile(outFile, SaveDialog.Files[0]);
-
ReWrite(outFile);//создадим файл
-
readMatrix;//прочтём матрицу из таблицы
-
Write2DArray(workMatrix, outFile);//запишем матрицу в файл
-
CloseFile(outFile);//закроем файл.
Процедура loadClick ведёт себя так же, только не создаёт файл, а открывает его для чтения:
-
{обработчик Файл->Загрузить}
-
procedure TMainForm.loadClick(Sender: TObject);
-
var
-
inFile: TextFile;
-
begin
-
//отобразим диалог выбора фала для загрузки, если отмена - выходим
-
if OpenDialog.Execute = false then exit;
-
AssignFile(inFile, OpenDialog.Files[0]);
-
Reset(inFile);//подготовим файл к чтению
-
Read2DArray(workMatrix, inFile);//прочтём матрицу из файла
-
writeMatrix;//отобразим матрицу
-
CloseFile(inFile);//закроем файл
-
end;
Остальные процедуры просто вызывают процедуры и функции других модулей, наполняют результатами соответствующие заданию элементы формы, а в конце обязательно освобождают динамическую память, если таковая была выделена в рамках процедуры.
2.4 Описание формата исходных файлов
Матрица в исходном файле представляется в текстовом виде. Каждая строка матрицы начинается с новой строки. Каждый элемент строки отделён от других произвольным числом пробелов и должен быть представлен целым числом, лежащим в диапазоне [-2147483648; 2147483647]. Если какой-то элемент выходит за границы этого диапазона, либо не является целым числом, то он интерпретируется как ноль.
Пример правильно составленного исходного файла:
-
100000 10000 20000 40000 -4000
-
50 100 -20 1000 2000
-
-100 -50 -20 0 20
-
-1000 -200 200 2 12
-
4000 -100000 -40000 -10000 80000
3. Эксплуатационная документация
3.1 Описание применения
Программа предназначена для выполнения определённого набора операций над матрицами. Описание каждой операции можно прочесть на соответствующей вкладке в интерфейсе программы.
Программа предназначена для исполнения на IBM-совместимых компьютерах с операционной системой Windows (тестирование проводилось на Windows XP).
Минимальные системные требования:
-
Дисплей с разрешением 1024x768
-
Клавиатура
-
10 мегабайт свободной оперативной памяти
Требования приложения к оперативной памяти сильно зависят от размера обрабатываемой матрицы. Соответствующий минимальным требованиям компьютер сможет обрабатывать матрицы размером не менее ста элементов.
Входными параметрами для приложения являются файлы, описанные в пункте 3.4. Так же есть возможность ввести исходную матрицу непосредственно в таблицу на форме.
Выходные данные представляются в элементах формы, расположенных на соответствующей заданию вкладке (смотрите руководство оператора)
3.2 Руководство оператора
Интерфейс приложения разделён на две части. В верхней части формы отображается матрица исходных данных, которую можно редактировать и размеры которой можно менять. Нижняя часть формы представляет собой набор закладок, каждая из которых соответствует одной из поставленных задач. На каждой закладке содержится описание задания, кнопка «выполнить», а так же элементы, необходимы для отображения результата в рамках этого задания. Некоторые задания состоят в изменении исходной матрицы, результат выполнения таких заданий отображается непосредственно в исходных данных в верхней части формы. Всего существует как минимум три способа выбрать задачу: щёлкнуть мышкой по закладке, выбрать нужный пункт в меню «Задачи», нажать одну из кнопок F1 - F5.
Открытие файла с данными:
Выполнение задачи №1:
Результат выполнения задачи №1:
Переход к задаче №3:
Выполнение задачи №3:
Результат двукратного выполнения задачи №3:
Результат выполнения задачи №2:
Результат выполнения задачи №5:
Результат выполнения задачи №4:
Сохранение полученной матрицы в файл:
Завершение работы программы:
Содержание сохранённого файла:
-
100000 10000 20000 40000 -4000
-
50 100 -20 1000 2000
-
-100 -50 -20 0 20
-
-1000 -200 200 2 12
-
4000 -100000 -40000 -10000 80000
Выводы
Двумерный динамический массив – очень удобная конструкция для представления матрицы, размеры которой во время написания программы не известны. Но при его использовании нужно быть осторожным и учитывать некоторые особенности:
-
При вызове SetLength с одним параметром размера будет выделена память только под первую размерность массива (например, будет увеличено число строк в матрице), остальные размерности затронуты не будут (в каждой добавленной строке будет ноль элементов).
-
Каждый подмассив многомерного массива может иметь свою размерность (например, каждая строка матрицы в общем то может иметь длину, отличную от других)
-
Необходимо всегда знать границы каждой размерности, чтобы не выйти за пределы массива в чужую память. Для этого полезны функции low и high.
-
Необходимо всегда освобождать динамически выделенную память.
-
При присваивании динамических массивов копирования данных не происходит, присваиваются лишь указатели, таким образом, после присваивания два массива будут указывать на одну и ту же область памяти. Чтобы получить копию массива, можно использовать функцию Copy.
-
Copy копирует не весь многомерный массив, но только его первую размерность.
Приложения
Приложение 1. Тестовые примеры
Тест 1: Квадратная матрица 5x5.
Исходная матрица:
-
-100 -50 -20 0 20
-
50 100 200 1000 2000
-
4000 10000 20000 40000 80000
-
100000 -100000 -40000 -10000 -4000
-
-1000 -200 -20 2 12
Результат выполнения первого задания:
Максимальные элементы по строкам: 20; 2000; 80000; 100000; 12
Столбцы с максимальными элементами: 5; 5; 5; 1; 5
Результат выполнения второго задания:
S1 = 130
S2 = -40218
S1 > S2, матрица не была изменена
Результат выполнения третьего задания:
Число столбцов нечётно – был произведён сдвиг «вниз»
-
-1000 -200 -20 2 12
-
-100 -50 -20 0 20
-
50 100 200 1000 2000
-
4000 10000 20000 40000 80000
-
100000 -100000 -40000 -10000 -4000
Результат выполнения четвёртого задания:
Матрица, «развёрнутая» против часовой стрелки: -100; 50; 4000; 100000; -1000; -200; -20; 2; 12; -4000; 80000; 2000; 20; 0; -20; -50; 100; 10000; -100000; -40000; -10000; 40000; 1000; 200; 20000
Результат выполнения пятого задания:
Строки отсортированы в невозрастающем порядке сумм:
-
4000 10000 20000 40000 80000
-
50 100 200 1000 2000
-
-100 -50 -20 0 20
-
-1000 -200 -20 2 12
-
100000 -100000 -40000 -10000 -4000
Тест 2: прямоугольная матрица 3x8.
Исходная матрица:
-
1 - 18 17 -16 15 -14 13 -12
-
-2 19 20 2000 200000 20000000 2000000000 11
-
3 -4 5 -6 7 -8 9 -10
Результат выполнения первого задания:
Максимальные элементы по строкам: 17; 2000000000; 9
Столбцы с максимальными элементами: 3; 7; 7
Результат выполнения второго задания:
S1 = -18 S2 = -4
S1 < S2, матрица была изменена:
-
1 -4 17 -16 15 -14 13 -12
-
-2 19 20 2000 200000 20000000 2000000000 11
-
3 -18 5 -6 7 -8 9 -10
Результат выполнения третьего задания:
Число столбцов чётно – был произведён сдвиг «вверх»
-
-2 19 20 2000 200000 20000000 2000000000 11
-
3 -18 5 -6 7 -8 9 -10
-
1 -4 17 -16 15 -14 13 -12
Результат выполнения четвёртого задания:
Матрица, «развёрнутая» против часовой стрелки: 1; -2; 3; -4; 5; -6; 7; -8; 9; -10; 11; -12; 13; -14; 15; -16; 17; -18; 19; 20; 2000; 200000; 20000000; 2000000000;
Результат выполнения пятого задания:
Строки отсортированы в невозрастающем порядке сумм:
-
-2 19 20 2000 200000 20000000 2000000000 11
-
3 -4 5 -6 7 -8 9 -10
-
1 -18 17 -16 15 -14 13 -12
Тест 3: прямоугольная матрица 10x5, наполненная случайными числами.
Исходная матрица:
-
4490 6540 -12901 20330 -6046
-
-27459 -22256 26705 14852 -30502
-
23701 -11502 -30162 -14325 -20739
-
-15721 -14704 17504 -23934 21020
-
-27932 7054 -30557 -28698 -19302
-
-16794 -24715 28069 -2485 -11281
-
30727 18102 20673 -32373 23140
-
-16762 -1303 5821 21065 -25295
-
-24472 27091 -6385 -13002 -22009
-
-12309 26284 20788 -21316 -25044
Результат выполнения первого задания:
Максимальные элементы по строкам: 20330; 26705; 23701; 21020; 7054
Столбцы с максимальными элементами: 4; 3; 1; 5; 2
Результат выполнения второго задания:
S1 = 4934
S2 = -21774
S1 > S2, матрица не была изменена
Результат выполнения третьего задания:
Число столбцов нечётно – был произведён сдвиг «вниз»
-
-12309 26284 20788 -21316 -25044
-
4490 6540 -12901 20330 -6046
-
-27459 -22256 26705 14852 -30502
-
23701 -11502 -30162 -14325 -20739
-
-15721 -14704 17504 -23934 21020
-
-27932 7054 -30557 -28698 -19302
-
-16794 -24715 28069 -2485 -11281
-
30727 18102 20673 -32373 23140
-
-16762 -1303 5821 21065 -25295
-
-24472 27091 -6385 -13002 -22009
Результат выполнения четвёртого задания:
Матрица, «развёрнутая» против часовой стрелки: 4490; -27459; 23701; -15721; -27932; -16794; 30727; -16762; -24472; -12309; 26284; 20788; -21316; -25044; -22009; -25295; 23140; -11281; -19302; 21020; -20739; -30502; -6046; 20330; -12901; 6540; -22256; -11502; -14704; 7054; -24715; 18102; -1303; 27091; -6385; -13002; 21065; -32373; -2485; -28698; -23934; -14325; 14852; 26705; -30162; 17504; -30557; 28069; 20673; 5821