Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
 Аватар для FILA
13 / 0 / 1
Регистрация: 16.03.2011
Сообщений: 56

Судоку

12.06.2011, 14:40. Показов 1975. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ!! помогите, пожалуйста, с курсовой......посоветуйте, что можно сделать с ней??

Добавлено через 4 минуты
nit umain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, XPMan, Menus;

type
TSudoku = array[1..9,1..9] of byte;

type
TForm1 = class(TForm)
Button1: TButton;
cmbMode: TComboBox;
grpAns: TRadioGroup;
XPManifest1: TXPManifest;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure FormCreate(Sender: TObject);
procedure EditKeyPress(Sender: TObject; var Key: Char);
procedure ReadInSud;
procedure Button1Click(Sender: TObject);
procedure cmbModeChange(Sender: TObject);
procedure sudFill(s:TSudoku);
procedure FormPaint(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Sud:TSudoku;
Ans:array of TSudoku;
CEdits:array[1..9,1..9] of TEdit;

var
Form1: TForm1;
cmbMode:TComboBox;
mlen:integer; // íåîáõîäèìîå êîëè÷åñòâî ðåøåíèé

implementation

{$R *.dfm}

function sudInLine(s:TSudoku;p:TPoint;v:integer): boolean;
var
i:1..9;
begin
Result:=True;
for i:=1 to 9 do
if p.y<>i then
if s[p.X,i]=v then Exit;
Result:=False;
end;

function sudInRow(s:TSudoku;p:TPoint;v:integer):b oolean;
var
i:1..9;
begin
Result:=True;
for i:=1 to 9 do
if p.x<>i then
if s[i,p.Y]=v then Exit;
Result:=False;
end;

function sudInSq(s:TSudoku;p:TPoint;v:integer):bo olean;
var
ix,iy:0..8;
lx,ly:0..8;
begin
lx:=0; ly:=0;
if p.x in [1,2,3] then lx:=1;
if p.x in [4,5,6] then lx:=4;
if p.x in [7,8,9] then lx:=7;
lx:=lx-1;
if p.y in [1,2,3] then ly:=1;
if p.y in [4,5,6] then ly:=4;
if p.y in [7,8,9] then ly:=7;
ly:=ly-1;
Result:=True;
for ix:=1 to 3 do
for iy:=1 to 3 do
if (p.x<>lx+ix) and (p.y<>ly+iy) then
if s[lx+ix,ly+iy]=v then Exit;
Result:=False;
end;

function sudInAny(s:TSudoku;p:TPoint;v:integer):b oolean;
begin
Result:=sudInLine(s,p,v) or sudInRow(s,p,v) or sudInSq(s,p,v);
end;

function IsNextUnknown(s:TSudoku;var p:TPoint):boolean;
var
ix,iy:1..9;
begin
Result:=False;
for ix:=1 to 9 do
for iy:=1 to 9 do
if s[ix,iy]=0 then begin
Result:=True;
p.X:=ix;
p.Y:=iy;
Exit;
end; // if
end;

function sudMod(s:TSudoku;p:TPoint;v:integer):TSu doku;
var
st:TSudoku;
begin
st:=s;
st[p.x,p.y]:=v;
Result:=st;
end;

procedure sudAddAns(s:TSudoku);
var
l:integer;
begin
l:=Length(ans);
SetLength(ans,l+1);
ans[l]:=s;
end;

function DoRec(s:TSudoku):boolean;
var
i:integer;
p:TPoint;
begin
Result:=True;
if IsNextUnknown(s,p) then begin // çàïóñê ðåêóðñèé
for i:=1 to 9 do
if not sudInAny(s,p,i) then
if DoRec(sudMod(s,p,i)) then
Exit;
end else begin // ñîõðàíåíèå ðåçóëüòàòà
sudAddAns(s);
end;
if Length(ans)<mlen then // íå õâàòàåò ðåçóëüòàòîâ
Result:=False;
end; // DoRec

procedure TForm1.ReadInSud;
var
ix,iy:integer;
CEdit:TEdit;
begin
for iy:=1 to 9 do
for ix:=1 to 9 do begin
CEdit:=CEdits[ix,iy];
if CEdit.Text = '' then
Sud[ix,iy]:= 0
else
Sud[ix,iy]:=StrToInt(CEdit.Text);
end; // for
end;

function IsValidSudoku(s:TSudoku):boolean;
var
ix,iy:integer;
p:TPoint;
begin
for ix:=1 to 9 do
for iy:=1 to 9 do begin
p.X:=ix;
p.Y:=iy;
if s[ix,iy] <> 0 then
if sudInAny(s,p,s[ix,iy]) then begin
Result:=False;
Exit;
end; // if
end; // for
Result:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
ix,iy:integer;
begin
for iy:=1 to 9 do
for ix:=1 to 9 do begin
CEdits[ix,iy]:=TEdit.Create(self);
with CEdits[ix,iy] do begin
Parent:=self;
Left:= (ix - 1) * 30 + 5;
Top:= (iy - 1) * 30 + 5;
Width:= 25;
Color:=clwhite;;
MaxLength:= 2;
Ctl3D:= false;
OnKeyPress:=EditKeyPress;
end; // with
end; // for, ix
end;

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
var
ci:integer;
ix,iy:integer;
CEdit:TEdit;
begin
for iy:=1 to 9 do
for ix:=1 to 9 do
if Sender is TEdit then
if (Sender as TEdit)=CEdits[ix,iy] then
CEdit:=CEdits[ix,iy];
if (Sender as TEdit)=CEdits[9,9] then
Exit;
if Pos(Key,'0123456789'#8) = 0 then
Key:= #0;
if Key <> #8 then begin
ci:=CEdit.ComponentIndex;
(self.Components[ci+1] as TEdit).SetFocus;
end; // if
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
l:integer;
begin
ans:=nil;
ReadInSud;
if not IsValidSudoku(sud) then begin
ShowMessage('ïîâòîðåíèå â èñõîäíîì');
Exit;
end; // if

if grpAns.ItemIndex = 0 then
mlen:=1
else
mlen:=1000;

DoRec(sud);

l:=length(ans);
showmessage('ðåøåíèé: '+IntToStr(l));
cmbMode.Clear;
cmbMode.Items.Add('èñõîäíîå');
for i:=1 to l do
cmbMode.Items.Add('ðåøåíèå '+IntToStr(i));
cmbMode.ItemIndex:=0;

end;

procedure TForm1.sudFill(s:TSudoku);
var
ix,iy:integer;
begin
for iy:=1 to 9 do
for ix:=1 to 9 do
CEdits[ix,iy].Text:=IntToStr(S[ix,iy]);
end;

procedure TForm1.cmbModeChange(Sender: TObject);
begin
if cmbMode.ItemIndex = 0 then
SudFill(sud)
else
SudFill(ans[cmbMode.ItemIndex-1]);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Pen.Width:=3;
Canvas.MoveTo(2,2);
Canvas.LineTo(272,2);
Canvas.LineTo(272,266);
Canvas.LineTo(2,266);
Canvas.LineTo(2,2);
Canvas.Pen.Width:=2;
Canvas.MoveTo(2,88+2);
Canvas.LineTo(272,88+2);
Canvas.MoveTo(2,88*2+2);
Canvas.LineTo(272,88*2+2);
Canvas.MoveTo(90+2,2);
Canvas.LineTo(90+2,266);
Canvas.MoveTo(90*2+2,2);
Canvas.LineTo(90*2+2,266);

end;

procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
if OpenDialog1.Execute then (Sender as TEdit).Text := OpenDialog1.FileName;
end;

procedure TForm1.N4Click(Sender: TObject);
var
saveDialog : TSaveDialog; // Ïåðåìåííàÿ äèàëîãà ñîõðàíåíèÿ
begin
// Ñîçäàíèå îáúåêòà äèàëîãà ñîõðàíåíèÿ - íàçíà÷àÿ åãî íàøåé ïåðåìåííîé äèàëîãà ñîõðàíåíèÿ
saveDialog := TSaveDialog.Create(self);

// Give the dialog a title
saveDialog.Title := 'Save your text or word file';

// Óñòàíîâêà íà÷àëüíîãî êàòàëîãà
saveDialog.InitialDir := GetCurrentDir;

// Ðàçðåøàåì ñîõðàíÿòü ôàéëû òèïà .txt è .doc
saveDialog.Filter := 'Text file|*.txt|Word file|*.doc';

// Óñòàíîâêà ðàñøèðåíèÿ ïî óìîë÷àíèþ
saveDialog.DefaultExt := 'txt';

// Âûáîð òåêñòîâûõ ôàéëîâ êàê ñòàðòîâûé òèï ôèëüòðà
saveDialog.FilterIndex := 1;

// Îòîáðàæåíèå äèàëîã ñîõðàíåíèÿ ôàéëà
if saveDialog.Execute
then ShowMessage('File : '+saveDialog.FileName)
else ShowMessage('Save file was cancelled');

// Îñâîáîæäåíèÿ äèàëîãà
saveDialog.Free;
end;

end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2011, 14:40
Ответы с готовыми решениями:

Игровое поле для "судоку-цветок"
Здравствуйте, помогите пожалуйста. Как лучше создать игровое поле для &quot;цветка&quot;, чтобы можно было легко проверять отдельные участки...

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

Судоку
Здравствуйте. Нужно реализовать приложение &quot;Судоку&quot;, использую компонент StringGrid, подскажите пожалуйста в каком направление...

1
4040 / 2652 / 582
Регистрация: 11.09.2009
Сообщений: 9,465
13.06.2011, 01:13
Цитата Сообщение от FILA Посмотреть сообщение
помогите, пожалуйста, с курсовой......посоветуйте, что можно сделать с ней??
Ну вы, батенька, спросили...
Обычно курсовые сдают, насколько я помню. Или теперь не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2011, 01:13
Помогаю со студенческими работами здесь

Судоку
Хочу написать программу которая генерирует все возможные варианты заполнения сетки судоку 9х9 (всего вариантов примерно 6,7*10 в 21...

Судоку
Надо написать программу, решающую судоку. Чтоб я вводила числа с клавы а прога в последствии решала

Судоку снежинка
Ребята, может кто писал или знает как писать программу этой головоломки, помогите)

Игра Судоку
Здравствуйте. Может кто нибудь дать исходник игры Судоку (думаю о правилах игры рассказывать не стоит), пробовал гуглить, но там только...

Игра судоку на Delphi 7
Игра судоку на Delphi 7 В прошлом году делал курсовой проект для одного парня. Называется судоку а разновидность...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru