|
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
|
|
| 12.06.2011, 14:40 | |
|
Ответы с готовыми решениями:
1
Игровое поле для "судоку-цветок" Переделать обычное судоку в судоку чёт-нечёт Судоку |
|
4040 / 2652 / 582
Регистрация: 11.09.2009
Сообщений: 9,465
|
||
| 13.06.2011, 01:13 | ||
|
Обычно курсовые сдают, насколько я помню. Или теперь не так?
0
|
||
| 13.06.2011, 01:13 | |
|
Помогаю со студенческими работами здесь
2
Судоку Судоку
Игра Судоку Игра судоку на Delphi 7 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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. Пошагово создадим проект для загрузки изображения. . .
|