1.2.2 Выбор метода решения задачи
В качестве метода решения задачи была выбрана реализация описанных выше «индийского» алгоритма и метода Раус-Болла. Эти методы хороши тем, что могут быть быстро и легко запрограммированы с использованием языка Delphi – описание алгоритмов позволяет быстро перейти от естественного описания алгоритма к инструкциям языка.
Использование перечисленных методов обусловлено и их быстродействием. Они являются одними из наименее трудоемких среди других методов построения МК.
1.3 Информационная база задачи
1.3.1 Входная информация
Входной информацией программы является значение n – натуральное число, задающее размер стороны «магического» квадрата. Это значение вводится пользователем с клавиатуры. Другая входная информация не требуется.
Для ввода и отображения данных была разработана главная форма программы. Опишем назначение ее компонентов, служащих для ввода данных.
Рисунок 1 Главная форма программы – ввод информации
Для ввода требуемого размера стороны МК n служит поле ввода с меткой «Введите n».
Для построения МК с заданным размером стороны служит кнопка с надписью «Заполнить», нажатие которой вызывает процедуру построения МК.
1.3.2 Выходная информация
Главная форма программы одновременно отображает и выходную информацию.
Рисунок 2 Главная форма программы - вывод информации
Текстовое поле с меткой «Магическая сумма» служит для вывода «магической суммы» построенного квадрата (число, равное суммы всех чисел строки, столбца или главных диагоналей квадрата).
Квадрат представляется в виде таблицы, ячейки которой – элементы квадрата. В ячейках StringGrid отображаются заполняющие квадрат числа.
1.4 Система меню
Меню приложения имеет следующий вид:
Рисунок 4 Состав меню "Файл"
Меню «Файл» в данной версии приложения содержит всего одну команду – «Выход», которая предназначена для завершения работы приложения.
Рисунок 5 Состав меню "Помощь"
Меню «Помощь» содержит в своем составе два пункта, которые отвечают, соответственно, за вызов справки приложения и вывод информации о программе.
Сама справка приложения содержит 2 раздела (topics): «Работа с программой» и «О программе».
Рисунок 6 Справка приложения
Приложение включает контекстно-зависимую помощь, вызываемую по нажатии клавиши «F1» для определенного элемента управления, когда этот элемент управления находится в фокусе.
Контекстная помощь доступна для:
1) StringGrid, отображающего построенный МК
2) Текстового поля, в которое вводится размер стороны квадрата
3) Кнопки, запускающей процедуру построения МК
4) Текстового поля, содержащего сумму построенного МК
Разработка справочной системы велась при помощи ПО Microsoft HelpWorkshop, входящего в комплект поставки Delphi 7. Были разработаны файлы оглавления и проекта справки, которые затем были откомпилированы в Help WorkShop.
Вызов справки, как контекстной, так и через ее содержание, осуществляется с помощью функции WinHelp.
1.5 Контрольные примеры
Для проверки корректности работы созданной программы осуществим построение «магических» квадратов четырех размеров:
1) МК размера 2x2:
Таких квадратов не существует.
Алгоритм программы отрабатывает корректно, заполняя ячейки квадрата нулевыми значениями, но в поле «Магическая сумма» стоит значение «не существует» - программа работает верно.
Рисунок 7 Результат построения квадрата 2х2
2) МК размера 3x3:
8 |
1 |
6 |
3 |
5 |
7 |
4 |
9 |
2 |
Сумма = 15
Рисунок 8 Результат построения квадрата 3х3
Программа работает корректно.
3) МК размера 4x4:
1 |
15 |
14 |
4 |
12 |
6 |
7 |
9 |
8 |
10 |
11 |
5 |
13 |
3 |
2 |
16 |
Сумма = 34
Рисунок 9 Результат построения квадрата 4х4
Программа работает корректно.
4) МК размера 5x5:
17 |
24 |
1 |
8 |
15 |
23 |
5 |
7 |
14 |
16 |
4 |
6 |
13 |
20 |
22 |
10 |
12 |
19 |
21 |
3 |
11 |
18 |
25 |
2 |
9 |
Сумма = 65
Рисунок 10 Результат построения квадрата 5х5
Программа работает корректно.
В результате проведенного тестирования корректности работы программы убедились, что программа работает корректно для n=2,3,4,5, то есть для всех возможных случаев описанных ранее математических алгоритмов.
В случае ввода отрицательного значения n, пользователю будет выдано предупреждение об этом:
Рисунок 11 Предупреждение об ошибочном вводе
