Discussion about math, puzzles, games and fun.   Useful symbols: ÷ × ½ √ ∞ ≠ ≤ ≥ ≈ ⇒ ± ∈ Δ θ ∴ ∑ ∫ • π ƒ -¹ ² ³ °

You are not logged in.

#1 2011-09-29 19:23:56

anonimnystefy
Real Member

Offline

Another programming problem!!!

hi guys

i am trying to make a program to solve a Sudoku.i hope you know what that is.

now i have finished the code but there seems to be a logical error because i entered a valid one and it outputted the message 'The Sudoku cannot be solved!!!'

here's the code:

Code:

```program Sudoku_solver;

{\$mode objfpc}{\$H+}

uses
{\$ENDIF}{\$ENDIF}
Classes
{ you can add units after this };

{\$IFDEF WINDOWS}{\$R Sudoku.rc}{\$ENDIF}

const
max=9;

type
niz=array[1..max] of integer;
matrica=array[1..max] of niz;

var
a:matrica;
i,j:integer;
ok:boolean;

function row(a:matrica;i1,j1:integer):boolean;
var
j:integer;
b:boolean;
begin
b:=true;
for j:=1 to 9 do
if j<>j1 then
if a[i1][j]=a[i1][j1] then
b:=false;
red:=b;
end;

function column(a:matrica;i1,j1:integer):boolean;
var
i:integer;
b:boolean;
begin
b:=true;
for i:=1 to 9 do
if i<>i1 then
if a[i][j1]=a[i1][j1] then
b:=false;
vrsta:=b;
end;

function square(a:matrica;i1,j1:integer):boolean;
var
i,j,k,l:integer;
b:boolean;
begin
b:=true;
case i1 of
1,2,3: begin
k:=0;
i:=3
end;
4,5,6: begin
k:=3;
i:=6;
end;
7,8,9: begin
k:=6;
i:=9;
end;
end;
case j1 of
1,2,3: begin
l:=0;
j:=3
end;
4,5,6: begin
l:=3;
j:=6;
end;
7,8,9: begin
l:=6;
j:=9;
end;
end;
while (k<=i) do
begin
k:=k+1;
while (l<=j) do
begin
l:=l+1;
if (k<>i1) and (l<>j1) then
if a[k][l]=a[i1][j1] then
b:=false;
end;
end;
end;

function pos(a:matrica;i,j:integer):boolean;
begin
poz:=row(a,i,j) and column(a,i,j) and square(a,i,j);
end;

procedure sudoku(var a:matrica;n,i1,j1:integer;ok:boolean);
var
i,j,k:integer;
b:boolean;
begin
i:=i1;
j:=j1;
a[i][j]:=n;
ok:=false;
b:=true;
if poz(a,i,j) then
begin
ok:=true;
i:=0;
j:=0;
while (b=true) and (i<=max) do
begin
i:=i+1;
while (b=true) and (j<=max) do
begin
j:=j+1;
if a[i][j]=0 then
b:=false;
end;
end;
if b=false then
begin
k:=0;
ok:=false;
while (k<=9) and not ok do
begin
k:=k+1;
sudoku(a,k,i,j,ok);
end;
end;
end;
end;

begin
writeln('Enter the Sudoku: ');
for i:=1 to 9 do
begin
for j:=1 to 9 do
end;
k:=0;
ok:=false;
while (k<=9) and not ok do
begin
k:=k+1;
sudoku(a,k,i,j,ok);
end;
if ok then
begin
writeln('The solution is: ')
for i:=1 to 9 do
begin
for j:=1 to 9 do
write(a[i][j]);
writeln;
end;
end
else writeln('Sudoku cannot be solved!!!');
end.```

note that functions row,column and square check if there are same numbers as the number we are looking at in the same row,column and square.

my second question is: is there another (better) way to make the Sudoku solver,because this one is fairly long and complex !?

Last edited by anonimnystefy (2011-10-01 07:14:47)

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#2 2011-09-29 22:27:16

bobbym

Online

Re: Another programming problem!!!

Hi anonimnystefy;

That is not long at all for a sudoku solver. What is the sudoku problem that you are
testing this on?

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#3 2011-09-30 05:36:34

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

hi bobbym

it's:
0 4 7 0 0 0 3 0 0
8 0 6 0 7 4 0 0 0
0 0 0 2 0 3 8 4 0
0 7 0 0 0 0 4 0 3
9 0 0 4 0 8 0 0 2
4 0 3 0 0 0 0 9 0
0 2 8 6 0 1 0 0 0
0 0 0 8 2 0 7 0 9
0 0 9 0 0 0 2 1 8

the answer should be:

2 4 7 1 8 9 3 5 6
8 3 6 5 7 4 9 2 1
5 9 1 2 6 3 8 4 7
1 7 2 9 5 6 4 8 3
9 6 5 4 3 8 1 7 2
4 8 3 7 1 2 6 9 5
7 2 8 6 9 1 5 3 4
3 1 4 8 2 5 7 6 9
6 5 9 3 4 7 2 1 8

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#4 2011-09-30 06:07:24

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

just for practice:

Last edited by anonimnystefy (2011-09-30 06:13:23)

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#5 2011-09-30 06:35:11

bobbym

Online

Re: Another programming problem!!!

Funny thing is my program does noot get that one either.

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#6 2011-09-30 06:53:23

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

but why won't it work?

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#7 2011-09-30 06:59:44

bobbym

Online

Re: Another programming problem!!!

Hi;

I do not know. I checked the rows and columns of the solution as well as
every 3 x 3 grid. It should have got that answer?!

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#8 2011-09-30 07:14:34

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

have you checked it compleely.it uses recursion.

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#9 2011-09-30 07:17:52

bobbym

Online

Re: Another programming problem!!!

Hi anonimnystefy;

No, I haven't. I am looking at mine as to why it does not get that answer.

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#10 2011-09-30 07:27:03

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

what does it get?

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#11 2011-09-30 13:18:52

bobbym

Online

Re: Another programming problem!!!

Spits it out as if it does not have a solution! Where does that solution come from?

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#12 2011-10-01 04:39:40

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

from me!

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#13 2011-10-01 05:27:28

bobbym

Online

Re: Another programming problem!!!

That is what I was thinking. Did you try it on any others?

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#14 2011-10-01 06:37:54

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

nope! :embarrassed!

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#15 2011-10-01 06:38:56

bobbym

Online

Re: Another programming problem!!!

I can give you some examples if you do not have any.

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#16 2011-10-01 06:56:06

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

i have bunch of them and i tried this one:
0 5 6 0 8 0 0 1 0
8 3 0 2 0 7 0 0 0
0 1 2 0 0 0 0 0 0
0 0 0 6 0 0 7 0 9
0 0 0 1 0 4 0 0 0
2 0 3 0 0 8 0 0 0
0 0 0 0 0 0 3 9 0
0 0 0 4 0 9 0 2 6
0 7 0 0 5 0 1 4 0

it won't work!

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#17 2011-10-01 07:15:58

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

hi bobbym

i found an error on my side in the main code and i fixed it and i edited it but it still won't do it!

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#18 2011-10-01 07:19:43

bobbym

Online

Re: Another programming problem!!!

Hi;

Something must be wrong with yours.

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#19 2011-10-01 07:25:15

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

ya think?

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#20 2011-10-01 07:27:03

bobbym

Online

Re: Another programming problem!!!

That is about all I can do. I do not speak Java. Even my C++ is too rusty. Use your debugger to go line by line watching the variables as you go.

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#21 2011-10-01 20:03:47

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

where did you get Java?

i'm using Pascal.very basic.

i changed my code a bit and got a program that solves only the first row.it won't go to the next one!

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#22 2011-10-01 20:34:51

bobbym

Online

Re: Another programming problem!!!

Hi anonimnystefy;

Forgive my sense of humor, I know, you told me you were using Lazarus.

In the other thread, just out of curiosity, I asked if lazarus has a debugger? Does it?

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#23 2011-10-01 20:36:51

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

think so.

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

#24 2011-10-01 20:39:38

bobbym

Online

Re: Another programming problem!!!

Does it have a variable pane? Or a variable watch?

In mathematics, you don't understand things. You just get used to them.
Some cause happiness wherever they go; others, whenever they go.
If you can not overcome with talent...overcome with effort.

#25 2011-10-01 20:44:34

anonimnystefy
Real Member

Offline

Re: Another programming problem!!!

yes,yes it does.

The limit operator is just an excuse for doing something you know you can't.
“It's the subject that nobody knows anything about that we can all talk about!” ― Richard Feynman
“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment