Смекни!
smekni.com

Работа с двумерными числовыми массивами (стр. 4 из 5)

Минимальные системные требования:

· Дисплей с разрешением 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

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

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

30727 18102 20673 -32373 23140

4490 6540 -12901 20330 -6046

-12309 26284 20788 -21316 -25044

-15721 -14704 17504 -23934 21020

-16762 -1303 5821 21065 -25295

-16794 -24715 28069 -2485 -11281

-27459 -22256 26705 14852 -30502

-24472 27091 -6385 -13002 -22009

23701 -11502 -30162 -14325 -20739

-27932 7054 -30557 -28698 -19302

Тест 4: матрица с большими по модулю числами.

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

0 -2000000000 -2100000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -2000000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -2000000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -1900000000 -200000000 1

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

Максимальные элементы по строкам: 1; 1000000000; 1; 1000000000; 1; 1000000000; 1

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

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

S1 = -7699999981

S2 = -7499999981

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

0 -2000000000 -1900000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -2000000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -2000000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -2100000000 -2000000000 1

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

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

0 -2000000000 -1900000000 -2000000000 1

0 -2000000000 -2100000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -2000000000 -2000000000 1

1000000000 -800000000 400000000 3 15

0 -2000000000 -2000000000 -2000000000 1

1000000000 -800000000 400000000 3 15

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

Матрица, «развёрнутая» против часовой стрелки: 0; 1000000000; 0; 1000000000; 0; 1000000000; 0; -2000000000; -1900000000; -2000000000; 1; 15; 1; 15; 1; 15; 1; -2000000000; -2100000000; -2000000000; -800000000; -2000000000; -800000000; -2000000000; -800000000; 400000000; 3; -2000000000; 3; -2000000000; 3; 400000000; -2000000000; 400000000; -2000000000

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

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

1000000000 -800000000 400000000 3 15

1000000000 -800000000 400000000 3 15

1000000000 -800000000 400000000 3 15

0 -2000000000 -1900000000 -2000000000 1

0 -2000000000 -2000000000 -2000000000 1

0 -2000000000 -2000000000 -2000000000 1

0 -2000000000 -2100000000 -2000000000 1

Тест 5: матрица с ошибками.

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

9999999999 123 fdf

456 rt 8888888888

1234567890 9876543210 789

q 0xf e

-77777777777 000 -13

915 -376 19

ddd -ddd 1111111111

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

0 123 0

456 0 0

1234567890 0 789

0 15 0

0 0 -13

915 -376 19

0 0 1111111111

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

Максимальные элементы по строкам: 123; 456; 1234567890; 15; 0; 915; 1111111111

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

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

S1 = 123

S2 = 1111111130

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

0 0 1111111111

456 0 19

1234567890 0 789

0 15 0

0 0 -13

915 -376 0

0 123 0

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