48466 (Работа с двумерными числовыми массивами), страница 3

2016-07-30СтудИзба

Описание файла

Документ из архива "Работа с двумерными числовыми массивами", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48466"

Текст 3 страницы из документа "48466"

Процедура saveClick является обработчиком щелчка по пункту меню Файл->Сохранить. Она отображает диалог выбора файла для сохранения, создаёт выбранный файл, а после окончания записи закрывает его:

  1. {обработчик Файл->Сохранить}

  2. procedure TMainForm.saveClick(Sender: TObject);

  1. var

  2. outFile: TextFile;

  3. begin

  4. //отобразим диалог выбора файла для сохранения, если отмена - выходим

  5. if SaveDialog.Execute = false then exit;

  6. AssignFile(outFile, SaveDialog.Files[0]);

  7. ReWrite(outFile);//создадим файл

  8. readMatrix;//прочтём матрицу из таблицы

  9. Write2DArray(workMatrix, outFile);//запишем матрицу в файл

  10. CloseFile(outFile);//закроем файл.

Процедура loadClick ведёт себя так же, только не создаёт файл, а открывает его для чтения:

  1. {обработчик Файл->Загрузить}

  1. procedure TMainForm.loadClick(Sender: TObject);

  2. var

  3. inFile: TextFile;

  4. begin

  5. //отобразим диалог выбора фала для загрузки, если отмена - выходим

  6. if OpenDialog.Execute = false then exit;

  7. AssignFile(inFile, OpenDialog.Files[0]);

  8. Reset(inFile);//подготовим файл к чтению

  9. Read2DArray(workMatrix, inFile);//прочтём матрицу из файла

  10. writeMatrix;//отобразим матрицу

  11. CloseFile(inFile);//закроем файл

  12. end;

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

2.4 Описание формата исходных файлов

Матрица в исходном файле представляется в текстовом виде. Каждая строка матрицы начинается с новой строки. Каждый элемент строки отделён от других произвольным числом пробелов и должен быть представлен целым числом, лежащим в диапазоне [-2147483648; 2147483647]. Если какой-то элемент выходит за границы этого диапазона, либо не является целым числом, то он интерпретируется как ноль.

Пример правильно составленного исходного файла:

  1. 100000 10000 20000 40000 -4000

  2. 50 100 -20 1000 2000

  3. -100 -50 -20 0 20

  4. -1000 -200 200 2 12

  5. 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:

Сохранение полученной матрицы в файл:

Завершение работы программы:

Содержание сохранённого файла:

  1. 100000 10000 20000 40000 -4000

  2. 50 100 -20 1000 2000

  3. -100 -50 -20 0 20

  4. -1000 -200 200 2 12

  5. 4000 -100000 -40000 -10000 80000

Выводы

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

    • При вызове SetLength с одним параметром размера будет выделена память только под первую размерность массива (например, будет увеличено число строк в матрице), остальные размерности затронуты не будут (в каждой добавленной строке будет ноль элементов).

    • Каждый подмассив многомерного массива может иметь свою размерность (например, каждая строка матрицы в общем то может иметь длину, отличную от других)

    • Необходимо всегда знать границы каждой размерности, чтобы не выйти за пределы массива в чужую память. Для этого полезны функции low и high.

    • Необходимо всегда освобождать динамически выделенную память.

    • При присваивании динамических массивов копирования данных не происходит, присваиваются лишь указатели, таким образом, после присваивания два массива будут указывать на одну и ту же область памяти. Чтобы получить копию массива, можно использовать функцию Copy.

    • Copy копирует не весь многомерный массив, но только его первую размерность.

Приложения

Приложение 1. Тестовые примеры

Тест 1: Квадратная матрица 5x5.

Исходная матрица:

  1. -100 -50 -20 0 20

  2. 50 100 200 1000 2000

  3. 4000 10000 20000 40000 80000

  4. 100000 -100000 -40000 -10000 -4000

  5. -1000 -200 -20 2 12

Результат выполнения первого задания:

Максимальные элементы по строкам: 20; 2000; 80000; 100000; 12

Столбцы с максимальными элементами: 5; 5; 5; 1; 5

Результат выполнения второго задания:

S1 = 130

S2 = -40218

S1 > S2, матрица не была изменена

Результат выполнения третьего задания:

Число столбцов нечётно – был произведён сдвиг «вниз»

  1. -1000 -200 -20 2 12

  2. -100 -50 -20 0 20

  3. 50 100 200 1000 2000

  4. 4000 10000 20000 40000 80000

  5. 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

Результат выполнения пятого задания:

Строки отсортированы в невозрастающем порядке сумм:

  1. 4000 10000 20000 40000 80000

  2. 50 100 200 1000 2000

  3. -100 -50 -20 0 20

  4. -1000 -200 -20 2 12

  5. 100000 -100000 -40000 -10000 -4000

Тест 2: прямоугольная матрица 3x8.

Исходная матрица:

  1. 1 - 18 17 -16 15 -14 13 -12

  2. -2 19 20 2000 200000 20000000 2000000000 11

  3. 3 -4 5 -6 7 -8 9 -10

Результат выполнения первого задания:

Максимальные элементы по строкам: 17; 2000000000; 9

Столбцы с максимальными элементами: 3; 7; 7

Результат выполнения второго задания:

S1 = -18 S2 = -4

S1 < S2, матрица была изменена:

  1. 1 -4 17 -16 15 -14 13 -12

  2. -2 19 20 2000 200000 20000000 2000000000 11

  3. 3 -18 5 -6 7 -8 9 -10

Результат выполнения третьего задания:

Число столбцов чётно – был произведён сдвиг «вверх»

  1. -2 19 20 2000 200000 20000000 2000000000 11

  2. 3 -18 5 -6 7 -8 9 -10

  3. 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;

Результат выполнения пятого задания:

Строки отсортированы в невозрастающем порядке сумм:

  1. -2 19 20 2000 200000 20000000 2000000000 11

  2. 3 -4 5 -6 7 -8 9 -10

  3. 1 -18 17 -16 15 -14 13 -12

Тест 3: прямоугольная матрица 10x5, наполненная случайными числами.

Исходная матрица:

  1. 4490 6540 -12901 20330 -6046

  2. -27459 -22256 26705 14852 -30502

  3. 23701 -11502 -30162 -14325 -20739

  4. -15721 -14704 17504 -23934 21020

  5. -27932 7054 -30557 -28698 -19302

  6. -16794 -24715 28069 -2485 -11281

  7. 30727 18102 20673 -32373 23140

  8. -16762 -1303 5821 21065 -25295

  9. -24472 27091 -6385 -13002 -22009

  10. -12309 26284 20788 -21316 -25044

Результат выполнения первого задания:

Максимальные элементы по строкам: 20330; 26705; 23701; 21020; 7054

Столбцы с максимальными элементами: 4; 3; 1; 5; 2

Результат выполнения второго задания:

S1 = 4934

S2 = -21774

S1 > S2, матрица не была изменена

Результат выполнения третьего задания:

Число столбцов нечётно – был произведён сдвиг «вниз»

  1. -12309 26284 20788 -21316 -25044

  2. 4490 6540 -12901 20330 -6046

  3. -27459 -22256 26705 14852 -30502

  4. 23701 -11502 -30162 -14325 -20739

  5. -15721 -14704 17504 -23934 21020

  6. -27932 7054 -30557 -28698 -19302

  7. -16794 -24715 28069 -2485 -11281

  8. 30727 18102 20673 -32373 23140

  9. -16762 -1303 5821 21065 -25295

  10. -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

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4123
Авторов
на СтудИзбе
667
Средний доход
с одного платного файла
Обучение Подробнее