Проверка квадратной матрицы на предмет, является ли она магическим квадратом

27071
знак
0
таблиц
11
изображений

3. Проверка квадратной матрицы на предмет, является ли она магическим квадратом

Процедура обработки события OnClick кнопки Button1 («Проверить»). Пробуем преобразовать к числовому виду значения полей TMaskEdit. Если получилось (не осталось пустых полей), находим суммы по строкам, по столбцам, по диагоналям. Если полученные суммы равны, то выводим в метке надпись «Молодец! Все верно!», прячем кнопку «Проверить», показываем кнопку «Начать», z:=false (следующее заполнение будет сгенерировано). Если полученные суммы не равны, то выводим в метке надпись «Попробуй еще раз», прячем кнопку «Проверить», показываем кнопку «Начать», z:=true (следующее заполнение будет тем же, х и у не изменятся). Если не получилось преобразовать к числовому виду значения полей TMaskEdit, подаем звуковой сигнал, выводим сообщение «Не все клетки заполнены», выходим из процедуры.


4. Оформление диалогового окна «Магический квадрат», вызываемого одноименной командой главного меню

Caption – Магический квадрат, Name – OKBottomDlg. Размещаем компонент TMemo – многострочное редактируемое текстовое поле, вкладки Standart. Щелкаем мышью справа от свойства Lines. В окне String List Editor вводим текст о магическом квадрате. Размещаем компонент TStringGrid – текстовая таблица, вкладки Additional. Процедура обработки события OnPaint (для того, чтобы сделать рисунок с расширением .bmp фоновым) содержит процедуру пользователя для заполнения таблицы числами.

В процедуре создаем объект Bitmap, загружаем его из файла. Методом StretchDraw() заполняем всю форму рисунком Bitmap.


5. Оформление диалогового окна «Правила игры», вызываемого одноименной командой главного меню

Caption – Правила игры, Name – OKBottomDlg1. Размещаем компонент TMemo – многострочное редактируемое текстовое поле, вкладки Standart. Щелкаем мышью справа от свойства Lines. В окне String List Editor вводим текст с правилами игры. Процедура обработки события OnPaint (для того, чтобы сделать рисунок с расширением .bmp фоновым).

Кодирование

После того как определены требования к программе и составлен алгоритм решения, алгоритм записывается на выбранном языке программирования. В результате получается исходная программа. На этом этапе я выбрала язык программирования Delphi и записала алгоритм, листинг которого приводится в приложении.

Анализ и тестирование

Программа запускается с помощью файла Magic_sqr.exe. После запуска открывается окно, в котором необходимо заполнить матрицу нажатием кнопки «Начать» или покинуть программу.

Рис. 6. ПРОГРАММА ПОСЛЕ ЗАПУСКА


Рис. 7. ПРОГРАММА ПОСЛЕ ЩЕЛЧКА МЫШИ ПО КНОПКЕ «НАЧАТЬ»

После заполнения матрицы нажимаем на кнопку «Проверить», и на экране выводится сообщение (рисунок 8 или 9).

 

Рис. 8. ПРОГРАММА ПОСЛЕ ЩЕЛЧКА МЫШИ ПО КНОПКЕ «ПРОВЕРИТЬ»


Рис. 9. ПРОГРАММА ПОСЛЕ ЩЕЛЧКА МЫШИ ПО КНОПКЕ «ПРОВЕРИТЬ»

На этом этапе программа была неоднократно протестирована, ошибок не выявлено.

Создание справочной системы

Программа имеет меню «Help», которое содержит два пункта: «Магический квадрат» и «Правила игры».

 

Рис. 10. ПРОГРАММА ПОСЛЕ ЩЕЛЧКА МЫШИ ПО МЕНЮ «HELP»


Рис. 11. ПРОГРАММА ПОСЛЕ ВЫБОРА ПУНКТА МЕНЮ «МАГИЧЕСКИЙ КВАДРАТ»

Рис. 12. ПРОГРАММА ПОСЛЕ ВЫБОРА ПУНКТА МЕНЮ «ПРАВИЛА ИГРЫ»

Создание установочного диска

Из-за невысокой сложности программы, создание установочного диска нецелесообразно.


Заключение

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

Постоянно растет объем и сложность обрабатываемой информации, требуются все новые и новые виды ее представления. Как показывает практика, большинство пользователей уже не представляют себе, как бы они выполняли свою работу, с которой прекрасно справлялись еще 5 – 10 лет назад, без помощи компьютера.

В ходе исследовательской работы разработана тестирующая программа. Проектирование выполнено в системе Delphi. В работе:

·  представлена информация о магическом квадрате и используемом методе заполнения магического квадрата;

·  приведен теоретический материал о компонентах, используемых в программе;

·  представлен листинг программы;

·  приведен анализ и тестирование программы с подробным описанием.

В ходе работы я познакомилась с более широкими возможностями языка программирования Delphi, по сравнению с языком Pascal. Постараюсь применить полученные знания при участии в олимпиадном движении по программированию. А также очень хотелось бы создать серию математических мини-игр.


Библиографический список

1. Архангельский А.Я. Delphi 6. Справочное пособие – М.: ЗАО «Издательство БИНОМ», 2001.

2. Болл У., Коксетер Г. «Математические эссе и развлечения» - М.: Мир, 1986.

3. Культин Н.Б. Основы программирования в Delphi 7 – СПб.: БХВ-Петербург, 2003.

4. Постников М.М. «Магические квадраты» - М.: Наука, 1964.

5. Фаронов В.В. Delphi. Программирование на языке высокого уровня: Учебник для вузов – СПб.: Питер, 2008. -640 с.


Приложение   Листинг программы создания главного окна

unit mag2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Buttons, StdCtrls, Mask, ExtCtrls, Menus;

type

TForm1 = class(TForm)

Panel1: TPanel; //Панель, на которой размещены кнопки

Lb1: TLabel; //Метка, для вывода комментариев к программе

MEd1: TMaskEdit; //Поля с маской ввода - для заполнения квадрата

MEd2: TMaskEdit;

MEd3: TMaskEdit;

MEd4: TMaskEdit;

MEd5: TMaskEdit;

MEd6: TMaskEdit;

MEd7: TMaskEdit;

MEd8: TMaskEdit;

MEd9: TMaskEdit;

Button1: TButton; //Кнопка "Проверить"

BitBtn1: TBitBtn; //Кнопка "Close"

Button2: TButton; //Кнопка "Начать"

MainMenu1: TMainMenu; //Главное меню формы

Help1: TMenuItem; //Один пункт меню "Help"

N1: TMenuItem; //Пункт подменю "Магический квадрат"

N2: TMenuItem; //Пункт подменю "Правила игры"

procedure FormActivate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCanResize(Sender: TObject; var NewWidth,

NewHeight: Integer; var Resize: Boolean);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Bitmap:TBitmap; //фоновая картинка

implementation

uses dialog_mag, dialog_pravila;

var

x,y:integer; //х - начальное число, с которого заполняем таблицу,

//у - номер способа очистки клеток

z:boolean; //Индикатор правильности заполнения пользователем пустых клеток

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject); //Процедура рисования фона формы

begin

Bitmap:=TBitmap.Create; //Создание объекта-битового образа

Bitmap.LoadFromFile('ris.bmp'); //Загрузка битового изображения из файла

Canvas.StretchDraw(Rect(0, 0, Form1.clientWidth, Form1.clientHeight),Bitmap);

//Рисование и заполнение формы рисунком Bitmap

end;

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, //Процедура,

 NewHeight: Integer; var Resize: Boolean); //запрещающая изменение размеров формы

begin

Resize:=false;

end;

procedure TForm1.FormActivate(Sender: TObject); //Активизация формы

begin

Caption:='Магический квадрат'; //Установить заголовок формы "Магический квадрат"

Button2.Show; //Показать кнопку "Начать"

Button1.Hide; //Спрятать кнопку "Проверить"

end;

procedure TForm1.Button2Click(Sender: TObject); //Обработка нажатия кнопки "Начать"

procedure zapolnenie(x,y:integer);//Процедура заполнения

begin

MEd1.ReadOnly:=false; //Очищаем поля ввода

MEd2.ReadOnly:=false;

MEd3.ReadOnly:=false;

MEd4.ReadOnly:=false;

MEd5.ReadOnly:=false;

MEd6.ReadOnly:=false;

MEd7.ReadOnly:=false;

MEd8.ReadOnly:=false;

MEd9.ReadOnly:=false;

MEd2.Text:=IntToStr(x); //Заполняем поля ввода числами,

MEd9.Text:=IntToStr(x+1); //которые преобразовываем

MEd4.Text:=IntToStr(x+2); //к строковому представлению

MEd7.Text:=IntToStr(x+3);

MEd5.Text:=IntToStr(x+4);

MEd3.Text:=IntToStr(x+5);

MEd6.Text:=IntToStr(x+6);

MEd1.Text:=IntToStr(x+7);

MEd8.Text:=IntToStr(x+8);

Case y of //Выбираем способ удаления значений некоторых клеток

0:begin

MEd4.Text:=''; MEd4.SetFocus; //Удаляем число из поля

MEd5.Text:=''; MEd5.SetFocus; //и передаем ему фокус ввода

MEd8.Text:=''; MEd8.SetFocus;

MEd9.Text:=''; MEd9.SetFocus;

MEd1.ReadOnly:=true; //Запрещаем ввод чисел и изменение остальных полей

MEd2.ReadOnly:=true;

MEd3.ReadOnly:=true;

MEd6.ReadOnly:=true;

MEd7.ReadOnly:=true;

end;

1:begin

MEd2.Text:=''; MEd2.SetFocus;

MEd5.Text:=''; MEd5.SetFocus;

MEd6.Text:=''; MEd6.SetFocus;

MEd8.Text:=''; MEd8.SetFocus;

MEd1.ReadOnly:=true;

MEd3.ReadOnly:=true;

MEd4.ReadOnly:=true;

MEd7.ReadOnly:=true;

MEd9.ReadOnly:=true;

end;

2:begin

MEd1.Text:=''; MEd1.SetFocus;

MEd2.Text:=''; MEd2.SetFocus;

MEd4.Text:=''; MEd4.SetFocus;

MEd6.Text:=''; MEd6.SetFocus;

MEd9.Text:=''; MEd9.SetFocus;

MEd3.ReadOnly:=true;

MEd5.ReadOnly:=true;

MEd7.ReadOnly:=true;

MEd8.ReadOnly:=true;

end;

3:begin

MEd3.Text:=''; MEd3.SetFocus;

MEd4.Text:=''; MEd4.SetFocus;

MEd6.Text:=''; MEd6.SetFocus;

MEd7.Text:=''; MEd7.SetFocus;

MEd8.Text:=''; MEd8.SetFocus;

MEd1.ReadOnly:=true;

MEd2.ReadOnly:=true;

MEd5.ReadOnly:=true;

MEd9.ReadOnly:=true;

end;

end;

Lb1.Caption:='Заполни пустые клетки магического квадрата';

//Появление соответствующей надписи в метке

Button1.Show; //Показать кнопку "Проверить"

Button2.Hide; //Спрятать кнопку "Начать"

end;

BEGIN

if z then //Проверка правильности вввода недостающих чисел

zapolnenie(x,y) //Заполнение "Попробуй еще раз" старыми значениями х и у

else //Заполняем в первый раз и при каждом правильном решении

begin

y:=random(4); //Выбираем случайным образом способ удаления значений полей

x:=Random(100); //Выбираем число, которым начинаем заполнение полей

zapolnenie(x,y); //заполняем квадрат

end;

end;

procedure TForm1.Button1Click(Sender: TObject); //Обработка нажатия кнопки "Проверить"

var s1,s2,s3,s4,s5,s6,s7,s8:integer; //Суммы в строках, столбцах, диагоналях

begin

try //Пробуем преобразовать в числовое представление значения полей

//и находим соответствующие суммы

s1:=StrToInt(Trim(MEd1.Text))+ StrToInt(Trim(MEd2.Text))+ StrToInt(Trim(MEd3.Text));

s2:=StrToInt(Trim(MEd4.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd6.Text));

s3:=StrToInt(Trim(MEd7.Text))+ StrToInt(Trim(MEd8.Text))+ StrToInt(Trim(MEd9.Text));

s4:=StrToInt(Trim(MEd1.Text))+ StrToInt(Trim(MEd4.Text))+ StrToInt(Trim(MEd7.Text));

s5:=StrToInt(Trim(MEd2.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd8.Text));

s6:=StrToInt(Trim(MEd3.Text))+ StrToInt(Trim(MEd6.Text))+ StrToInt(Trim(MEd9.Text));

s7:=StrToInt(Trim(MEd3.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd7.Text));

s8:=StrToInt(Trim(MEd1.Text))+ StrToInt(Trim(MEd5.Text))+ StrToInt(Trim(MEd9.Text));

If (s1=s2) and (s2=s3) and (s3=s4) and (s4=s5) and (s5=s6) and (s6=s7) and (s7=s8)

then //Если все суммы равны

begin Lb1.Caption:='Молодец! Все верно!' ; //Выводим в метке

//соответствующую надпись

z:=false; //z определяет, что заполнение следующих значений квадрата

//нужно начать с новой генерации начального значения х и способа удаления у

Button2.Show; //Показать кнопку "Начать"

Button1.Hide; //Спрятать кнопку "Проверить"

end

else //Если хоть одна сумма отлична от других

begin

Lb1.Caption:='Попробуй еще раз'; //Выводим в метке соответствующую надпись

z:=true; //z определяет, что заполнение квадрата

//нужно произвести старыми значениями х и у

Button2.Show; //Показать кнопку "Начать"

Button1.Hide; //Спрятать кнопку "Проверить"

end;

Except //Если преобразовать в числовое представление значения полей

// не удалось (какое-то поле осталось не заполнено)

MessageBeep(mb_Ok); //Звуковой сигнал

ShowMessage('Не все клетки заполнены!'); //Вывод окна сообщения

Exit; //Выход из процедуры

end;

end;

procedure TForm1.N1Click(Sender: TObject); //Выбор меню "Магический квадрат"

begin

OKBottomDlg.Show; //Показ диалогового окна "Магический квадрат"

end;

procedure TForm1.N2Click(Sender: TObject); //Выбор меню "Правила игры"

begin

OKBottomDlg1.Show; //Показ диалогового окна "Правила игры"

end;

end.


Листинг модуля вызова диалогового окна «Магический квадрат»

unit dialog_mag;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, Grids;

type

TOKBottomDlg = class(TForm)

OKBtn: TButton; //Кнопка "ОК"

Bevel1: TBevel; //Кромка

Memo1: TMemo; //Текстовое поле

StringGrid1: TStringGrid; //Текстовая таблица

procedure OKBtnClick(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

OKBottomDlg: TOKBottomDlg;

Bitmap1:TBitmap; //фоновая картинка

StringGrid1:TStringGrid;

implementation

{$R *.dfm}

procedure TOKBottomDlg.FormPaint(Sender: TObject);//Процедура рисования фона формы

procedure zapoln;

begin

StringGrid1.Cells[0,0]:='8'; //Заполнение таблицы числами

StringGrid1.Cells[0,1]:='1';

StringGrid1.Cells[0,2]:='6';

StringGrid1.Cells[1,0]:='3';

StringGrid1.Cells[1,1]:='5';

StringGrid1.Cells[1,2]:='7';

StringGrid1.Cells[2,0]:='4';

StringGrid1.Cells[2,1]:='9';

StringGrid1.Cells[2,2]:='2';

end;

BEGIN

Bitmap1:=TBitmap.Create; //создание объекта-битового образа

Bitmap1.LoadFromFile('fon.bmp'); //Загрузка битового изображения из файла

Canvas.StretchDraw(Rect(0, 0, OKBottomDlg.clientWidth, OKBottomDlg.clientHeight),Bitmap1);

//Рисование и заполнение формы рисунком Bitmap

zapoln; //Вызов процедуры заполнения таблицы числами

end;

procedure TOKBottomDlg.OKBtnClick(Sender: TObject);

begin

OKBottomDlg.Close; //Закрытие окна по щелчку кнопки "OK"

end;

end.


Листинг модуля вызова диалогового окна «Правила игры»

unit dialog_pravila;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

type

TOKBottomDlg1 = class(TForm)

OKBtn: TButton; //Кнопка "ОК"

Bevel1: TBevel; //Кромка

Memo1: TMemo; //Текстовое поле

procedure OKBtnClick(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

OKBottomDlg1: TOKBottomDlg1;

Bitmap2:TBitmap; //фоновая картинка

implementation

{$R *.dfm}

procedure TOKBottomDlg1.FormPaint(Sender: TObject);//Процедура рисования фона формы

begin

Bitmap2:=TBitmap.Create; //создание объекта-битового образа

//Загрузка битового изображения из файла

Bitmap2.LoadFromFile('fon.bmp');

Canvas.StretchDraw(Rect(0, 0, OKBottomDlg1.clientWidth, OKBottomDlg1.clientHeight),Bitmap2);

//Рисование и заполнение формы рисунком Bitmap

end;

procedure TOKBottomDlg1.OKBtnClick(Sender: TObject);

begin

OKBottomDlg1.Close; //Закрытие окна по щелчку кнопки "OK"

end;

end.


Информация о работе «Создание мини-игры "Магический квадрат"»
Раздел: Информатика, программирование
Количество знаков с пробелами: 27071
Количество таблиц: 0
Количество изображений: 11

Похожие работы

Скачать
120854
16
5

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

Скачать
108959
12
10

... росту. Существует определенная взаимосвязь проблем воспитания познавательного интереса и развития мышления в процессе обучения математике. Глава II Развитие познавательного интереса к урокам математики младших школьников средствами использования занимательных дидактических игр 2.1 Дидактические игры, их виды В отличие от других видов деятельности игра содержит цель в самой себе; ...

Скачать
107196
22
14

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

Скачать
210505
4
8

... и младших школьников. Анкета для студентов включала в себя два вопроса, один из которых о том, в чем, по их мнению, заключается развитие математических способностей школьников, а второй ¾ для выяснения отношения студентов к проведению внеклассной работы по математике в начальных классах. Анкета для преподавателей имела своей целью выяснить, проводят ли (а если проводят, то как часто) учителя ...

0 комментариев


Наверх