Студопедия — Описание применения
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Описание применения






 

Данная программа позволяет строить магические квадраты размерности 6x6. Теория магических квадратов прошла долгий и сложный путь развития. Долгое время теория не находили широкого применения, ввиду того что для решения соответствующих естественнонаучных и технических задач не было необходимости в применении теории магических квадратов. Теория рассматривалась лишь в качестве одного из математических курьёзов. Только в XIX и XX вв. интерес к магическим квадратам вспыхнул с новой силой. Их стали исследовать с помощью методов высшей алгебры и операционного исчисления. Сегодня они применяются в криптографии и приборостроении.

Традиционной сферой применения магических квадратов являются

талисманы. К примеру, талисман Луны обладает определенными свойствами:

предохраняет от кораблекрушения и болезней, делает человека любезным, способствует предотвращению дурного намерения, а так же укрепляет здоровье. Его гравируют на серебре в день и час Луны, когда Солнце или Луна находится в первых десяти градусах Рака. Однако существуют и магические квадраты для стихий и знаков Зодиака.

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


 

Заключение

 

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

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

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

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

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

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

В наше время магические квадраты продолжают привлекать к себе

внимание любителей математических игр и развлечений. Возросло число

книг по занимательной математике, в которых содержатся головоломки и

задачи, связанные с необычными квадратами. Для их успешного решения

требуются не столько специальные знания, сколько смекалка и умение под-

мечать числовые закономерности. Решение таких задач послужит прекрасной

«гимнастикой для ума». Понять удивительную красоту, содержащуюся в магических квадратах

не всякому дано, но один раз осознав стройность чисел можно получить

огромное удовольствие.

В результате написания данной курсовой работы был сделаны выводы:

1. Магические квадраты – это нечто удивительное, интересное и

увлекательное.

2. Заполнять магические квадраты несложно, но необходимо знать

некоторые правила.

3. Главными чертами магических квадратов являются не только ясность,

чёткость и логика, но и эстетичность, стройность и красота.

4. Законы квадратов отражают законы красоты.

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

 


 

Изм.
Лист
№ докум.
Подпись
Дата
Лист
 
КП 23494.011106.081 ПЗ  
Разраб.
Лосева 27М
Провер.
Апанасевич
Реценз.
 
Н. Контр.
 
Утверд.
 
Головоломка «Магический квадрат: первые встречные» Пояснительная записка  
Лит.
Листов
 
МГВРК
Список использованных источников

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

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

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

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

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

6. Флёнов М. В. Библия Delphi - Москва, 2012.

 


Приложение Б

Листинг программы

type

mass = array [0..5] of Integer;

TForm1 = class(TForm)

MagicSquare: TStringGrid;

mm1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

GroupBox1: TGroupBox;

pm1: TPopupMenu;

None1: TMenuItem;

N11: TMenuItem;

N21: TMenuItem;

N31: TMenuItem;

N41: TMenuItem;

N51: TMenuItem;

CheckButton: TButton;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

procedure N51Click(Sender: TObject);

procedure MagicSquareMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormCreate(Sender: TObject);

procedure FillFixedLines();

function CheckAll():Boolean;//Проверяет правильность заполнения поля

function CheckLines():Boolean;//проверяет совпадения в стоках и столбцах

function CheckBorderLines():Boolean;

procedure CheckButtonClick(Sender: TObject);

procedure MagicSquareDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure N6Click(Sender: TObject);//Проверяет "Соответстиве боковым линиям"

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

SelectCol,SelectRow:Integer;

Game: Integer;

implementation

uses Math, Unit2;

{$R *.dfm}

procedure TForm1.N51Click(Sender: TObject);

begin

MagicSquare.Cells[SelectCol,SelectRow]:= IntToStr((Sender as TMenuItem).Tag);

end;

procedure TForm1.MagicSquareMouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

SelectCol:= (X) div 32;

SelectRow:= (Y) div 32;

if (SelectCol <= 0) or (SelectCol >= 7) then

Exit;

if (SelectRow <= 0) or (SelectRow >= 7) then

Exit;

pm1.Popup(X+Left,Y+Top);

end;

procedure Clear(var a:mass);

var

i:Integer;

begin

for i:= 0 to 5 do

a[i]:=0;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

// FillFixedLines();

end;

function TForm1.CheckAll():Boolean;

begin

if not CheckBorderLines() then

begin

ShowMessage('Столбцы и строки, примыкающие к границам должны им соответствовать!');

CheckAll:= False;

Exit;

end;

if not CheckLines() then

begin

ShowMessage('Строка или столбец имеет повторяющееся значение!');

CheckAll:= False;

Exit;

end;

end;

function TForm1.CheckLines():Boolean;

var

i,j:Integer;

Col,Row:mass;

begin

Clear(Col);

Clear(Row);

for i:=1 to 6 do

begin

Clear(Row);

for j:=1 to 6 do

if Row[StrToInt(MagicSquare.Cells[i,j])] = 0 then

Inc(Row[StrToInt(MagicSquare.Cells[i,j])])

else

begin

CheckLines:= False;

Exit;

end;

end;

for j:=1 to 6 do

begin

Clear(Col);

for i:=1 to 6 do

if Col[StrToInt(MagicSquare.Cells[i,j])] = 0 then

Inc(Col[StrToInt(MagicSquare.Cells[i,j])])

else

begin

CheckLines:= False;

Exit;

end;

end;

CheckLines:=True;

end;

function CheckFill():Boolean;

var

i,j:Integer;

begin

for i:=1 to 6 do

for j:= 1 to 6 do

if Form1.MagicSquare.Cells[i,j] = '' then

begin

Result:= False;

Exit;

end;

Result:= True;

end;

function TForm1.CheckBorderLines():Boolean;

var

i,count:Integer;

begin

count:= 0;

for i:= 1 to 6 do

if not(MagicSquare.Cells[i,1] = MagicSquare.Cells[i,0]) and

not(MagicSquare.Cells[i,1] = '0') then

begin

CheckBorderLines:= False;

Exit;

end;

CheckBorderLines:= True;

end;

procedure TForm1.FillFixedLines();

var

i:Integer;

t:Integer;

a:mass;

begin

Randomize();

Clear(a);

for i:=1 to 6 do //Заполняем первый столбец рандомом

begin

t:= Random(5)+1;

while not(a[t] = 0) do

begin

t:= Random(6);

end;

Inc(a[t]);

MagicSquare.Cells[0,i]:= IntToStr(t);

end;

if MagicSquare.Cells[0,6] = '0' then

MagicSquare.Cells[0,6]:= IntToStr(Random(4)+1);

Clear(a);

a[StrToInt(MagicSquare.Cells[0,1])]:= 1;

MagicSquare.Cells[1,0]:= MagicSquare.Cells[0,1];

for i:=2 to 6 do

begin

t:= Random(5)+1;

while not(a[t] = 0) do

begin

t:= Random(6);

end;

Inc(a[t]);

MagicSquare.Cells[i,0]:= IntToStr(t);

end;

if MagicSquare.Cells[6,0] = '0' then

MagicSquare.Cells[6,0]:= IntToStr(Random(4)+1);

Clear(a);

a[StrToInt(MagicSquare.Cells[6,0])]:= 1;

MagicSquare.Cells[7,1]:= MagicSquare.Cells[6,0];

for i:=2 to 6 do

begin

t:= Random(5)+1;

while not(a[t] = 0) do

begin

t:= Random(6);

end;

Inc(a[t]);

MagicSquare.Cells[7,i]:= IntToStr(t);

end;

if MagicSquare.Cells[7,6] = '0' then

MagicSquare.Cells[7,6]:= IntToStr(Random(4)+1);

Clear(a);

a[StrToInt(MagicSquare.Cells[7,6])]:= 1;

a[StrToInt(MagicSquare.Cells[0,6])]:= 1;

MagicSquare.Cells[6,7]:= MagicSquare.Cells[7,6];

MagicSquare.Cells[1,7]:= MagicSquare.Cells[0,6];

for i:=2 to 5 do

begin

t:= Random(5)+1;

while not(a[t] = 0) do

begin

t:= Random(6);

end;

Inc(a[t]);

MagicSquare.Cells[i,7]:= IntToStr(t);

end;

//В процессе заполнения, некоторые значения получили нуули!

//Избавимся от них

for i:=2 to 6 do

if MagicSquare.Cells[i,0] = '0' then

MagicSquare.Cells[i,0]:= IntToStr(Random(4)+1);

for i:=2 to 6 do

if MagicSquare.Cells[7,i] = '0' then

MagicSquare.Cells[7,i]:= IntToStr(Random(4)+1);

for i:=2 to 6 do

if MagicSquare.Cells[i,7] = '0' then

MagicSquare.Cells[i,7]:= IntToStr(Random(4)+1);

for i:=2 to 6 do

if MagicSquare.Cells[0,i] = '0' then

MagicSquare.Cells[0,i]:= IntToStr(Random(4)+1);

end;

procedure TForm1.MagicSquareDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

var

i,j:Integer;

begin

if (Arow = 0) or (Arow = 7) or (ACol = 0) or (ACol = 7) then

MagicSquare.Canvas.Brush.Color:= clGreen

else if MagicSquare.Cells[ACol,Arow] = '0' then

MagicSquare.Canvas.Brush.Color:= clBlack

else

MagicSquare.Canvas.Brush.Color:= clWhite;

MagicSquare.Canvas.FillRect(Rect);

MagicSquare.Canvas.TextOut(Rect.Left+2,Rect.Top,MagicSquare.Cells[Acol,Arow]);

end;

procedure TForm1.N2Click(Sender: TObject);

begin

CLose();

end;

procedure TForm1.N3Click(Sender: TObject);

var

i,j:Integer;

S: string;

Sub: TStringList;

SubMass: array [1..8] of String;

Count: Integer;

begin

Randomize;

Game:= RandomRange(1, 6);

Sub:= TStringList.Create;

Sub.LoadFromFile('start/' + IntToStr(Game) + '.txt');

S:= Sub.Strings[0];

Count:= 1;

while Pos(' ', S) <> 0 do

begin

SubMass[Count]:= Copy(S, 1, Pos(' ', S) - 1);

S:= Copy(S, Pos(' ', S) + 1, MaxInt);

Inc(Count);

end;

for I:= 1 to MagicSquare.RowCount - 1 do

begin

MagicSquare.Cells[I, 0]:= SubMass[I];

end;

S:= Sub.Strings[1];

Count:= 1;

while Pos(' ', S) <> 0 do

begin

SubMass[Count]:= Copy(S, 1, Pos(' ', S) - 1);

S:= Copy(S, Pos(' ', S) + 1, MaxInt);

Inc(Count);

end;

for I:= 1 to MagicSquare.RowCount - 1 do

begin

MagicSquare.Cells[7, I]:= SubMass[I];

end;

S:= Sub.Strings[2];

Count:= 1;

while Pos(' ', S) <> 0 do

begin

SubMass[Count]:= Copy(S, 1, Pos(' ', S) - 1);

S:= Copy(S, Pos(' ', S) + 1, MaxInt);

Inc(Count);

end;

for I:= 1 to MagicSquare.RowCount - 1 do

begin

MagicSquare.Cells[I, 7]:= SubMass[I];

end;

S:= Sub.Strings[3];

Count:= 1;

while Pos(' ', S) <> 0 do

begin

SubMass[Count]:= Copy(S, 1, Pos(' ', S) - 1);

S:= Copy(S, Pos(' ', S) + 1, MaxInt);

Inc(Count);

end;

for I:= 1 to MagicSquare.RowCount - 1 do

begin

MagicSquare.Cells[0, I]:= SubMass[I];

end;

end;

procedure Check;

var

Sub: TStringList;

S, S1: String;

I, X: Integer;

begin

if not CheckFill() then

begin

ShowMessage('Поле должно быть заполнено полностью');

Exit;

end;

Sub:= TStringList.Create;

Sub.LoadFromFile('finish/' + IntToStr(Game) + '.txt');

S:= '';

for I:= 1 to Form1.MagicSquare.RowCount - 2 do

for X:= 1 to Form1.MagicSquare.RowCount - 2 do

begin

S:= S + Form1.MagicSquare.Cells[X, I] + ' ';

end;

S1:= '';

for I:= 0 to Sub.Count - 1 do

begin

S1:= S1 + Sub.Strings[I];

end;

if S = S1 then ShowMessage('Вы выиграли!!')

else ShowMessage('Вы проиграли.');

end;







Дата добавления: 2015-09-07; просмотров: 361. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

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

Потенциометрия. Потенциометрическое определение рН растворов Потенциометрия - это электрохимический метод иссле­дования и анализа веществ, основанный на зависимости равновесного электродного потенциала Е от активности (концентрации) определяемого вещества в исследуемом рас­творе...

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

Сущность, виды и функции маркетинга персонала Перснал-маркетинг является новым понятием. В мировой практике маркетинга и управления персоналом он выделился в отдельное направление лишь в начале 90-х гг.XX века...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия