|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Программа для решения простых Судоку (бесконечный цикл) |
|
Разное - Программа для решения простых Судоку (бесконечный цикл)
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать Всем привет. Пытался написать на pascal программу, решающую элементарное судоку. Но возникает бесконечный цикл. Не могу понять почему.
program sudoku4; type shortstr=string[9]; var a,b,c,c_temp,c_temp2,co,d,e,i,j,ip,x,oldc:integer; mas:array[1..9,1..9] of byte; ef:array[1..162,0..9] of byte; str:array[1..9] of shortstr; rand:array[1..81] of byte; label 1; begin randomize; for i:=1 to 9 do readln(str[i]); {preobrazovanie massiva} for i:=1 to 9 do begin for j:=1 to 9 do begin val(str[i,j],mas[i,j],c); end; end; ip:=1; {sohranenie koordinat pustyh ya4eek} for i:=1 to 9 do begin for j:=1 to 9 do begin if mas[i,j]=0 then begin ef[ip,0]:=i; ip:=ip+1; ef[ip,0]:=j; ip:=ip+1; end; end; end; co:=(ip-1) div 2; 1: for i:=co downto 0 do begin {sozdanie massiva slu4aynyh 4isel} c:= (ip-1) div 2; for i:=1 to c do begin rand[i]:=random(9)+1; end; d:=1; writeln(' '); for i:=1 to c do write(rand[i],' '); writeln(' '); for a:=1 to c do begin mas[ef[d,0],ef[d+1,0]]:=rand[a]; d:=d+2; write(mas[ef[d,0],ef[d+1,0]]); write('a=',a); end; c_temp:=c-1; {zanosim polosy i,j dlya pustyh ya4eek v ef} for i:=1 to ip-1 do {esli stroka} if i mod 2<>0 then begin for j:=1 to 9 do ef[i,j]:=mas[ef[i,0],j]; end {esli stolbec} else begin for j:=1 to 9 do ef[i,j]:=mas[j,ef[i,0]]; end; {vyvod massiva ef na ekran} writeln('ef'); for i:=1 to ip-1 do begin for j:=0 to 9 do begin write(ef[i,j]); end; writeln; end; c:=(ip-1) div 2; writeln('c=',c); co:=c; writeln('xxx=',mas[ef[1,0],ef[2,0]]); {proverka na sovpadeniya v stroke/stolbce} for x:=1 to ip-1 do begin for i:=1 to 9 do begin a:=ef[x,i]; for j:=1 to 9 do if (ef[x,j]=a)and(j<>i) then goto 1; end; end; end; {vyvod massiva mas na ekran} writeln(''); for i:=1 to j do begin for j:=1 to 9 do begin write(mas[i,j]); end; writeln; end; readln; end. |
|
Отправлено: 02:42, 05-01-2009 |
Забанен Сообщения: 463
|
for x:=1 to ip-1 do begin for i:=1 to 9 do begin a:=ef[x,i]; for j:=1 to 9 do if (ef[x,j]=a)and(j<>i) then goto 1; end; Обрати внимания что вложенный цикл использует для итерации туже переменную что и основной - i . Глянул дальше.. другие циклы тоже используют эту переменную практически до конца программы |
Отправлено: 19:20, 06-01-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать спасибо, попробую поменять переменные. Отпишусь
|
Отправлено: 20:28, 06-01-2009 | #3 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать да, проблема, видимо в этом, и еще в том, что программа не может вовремя остановить цикл...
|
Отправлено: 05:05, 07-01-2009 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочее - Решения для персонального удаленного доступа - LogMeIn | AACC | Общий по Linux | 4 | 29-12-2009 17:12 | |
Прочие - Программы для решения задач по высшей математике и физике | stan88 | Программное обеспечение Windows | 10 | 09-11-2009 23:11 | |
EventID 1056. Какую учетную запись можно использовать для решения проблемы? | __sa__nya | Microsoft Windows NT/2000/2003 | 0 | 03-09-2008 08:13 | |
Решения для шлюза | Negativ | Программное обеспечение Linux и FreeBSD | 0 | 29-11-2007 10:36 | |
бесконечный цикл. Функция не возвращает FALSE ? | xamelion | Вебмастеру | 5 | 19-09-2005 14:21 |
|