Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Программа для решения простых Судоку (бесконечный цикл)

Ответить
Настройки темы
Разное - Программа для решения простых Судоку (бесконечный цикл)

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить 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

 

Аватара для Alan85

Старожил


Сообщения: 463
Благодарности: 91

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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 .

Код: Выделить весь код
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;
Глянул дальше.. другие циклы тоже используют эту переменную практически до конца программы
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:20, 06-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасибо, попробую поменять переменные. Отпишусь

Отправлено: 20:28, 06-01-2009 | #3


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


да, проблема, видимо в этом, и еще в том, что программа не может вовремя остановить цикл...

Отправлено: 05:05, 07-01-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Программа для решения простых Судоку (бесконечный цикл)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - Решения для персонального удаленного доступа - 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




 
Переход