I'm a begginer in C++. I use Microsoft Visual Studio 6.0. I'm writting a 4x4 Sudoku source code and I've named variables like that:
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
a4 b4 c4 d4
I've used while-if-break senteces and I've put printf sentences beetwen them like in the follow code:
In that code the program works but sometimes it reach a absurd situation and the program stops for example, at the ninth variable:Code://sudoku.cpp: #include<stdlib.h> #include<math.h> #include<stdio.h> #include<time.h> void main(){ srand(time(0)); int a1; int b1; int c1; int d1; int a2; int b2; int c2; int d2; int a3; int b3; int c3; int d3; int a4; int b4; int c4; int d4; srand(time(0)); // 1st row a1=(rand()%4)+1; printf("a1 = %d\n",a1); while((b1!=0)||(b1=a1)){ b1=rand()*5/32768; if ((b1!=0)&&(b1!=a1)){ break; printf("b1 %d\n",b1); }} printf("b1 = %d\n",b1); while((c1!=0)||(c1=a1)||(c1=b1)){ c1=rand()*5/32768; if ((c1!=0)&&(c1!=a1)&&(c1!=b1)){ break; }} printf("c1 = %d\n",c1); while((d1!=0)||(d1=a1)||(d1=b1)||(d1=c1)){ d1=rand()*5/32768; if ((d1!=0)&&(d1!=a1)&&(d1!=b1)&&(d1!=c1)){ break; }} printf("d1 = %d\n",d1); // Column A while((a2!=0)||(a2=a1)||(a2=b1)){ a2=rand()*5/32768; if ((a2!=0)&&(a2!=a1)&&(a2!=b1)){ break; }} printf("a2 = %d\n",a2); while((a3!=0)||(a3=a1)||(a3=a2)){ a3=rand()*5/32768; if ((a3!=0)&&(a3!=a1)&&(a3!=a2)){ break; }} printf("a3 = %d\n",a3); while((a4!=0)||(a4=a1)||(a4=a2)||(a4=a3)){ a4=rand()*5/32768; if ((a4!=0)&&(a4!=a1)&&(a4!=a2)&&(a4!=a3)){ break; }} printf("a4 = %d\n",a4); // Column D while((d2!=0)||(d2=c1)||(d2=d1)||(d2=a2)){ d2=rand()*5/32768; if ((d2!=0)&&(d2!=c1)&&(d2!=d1)&&(d2!=a2)){ break; }} printf("d2 = %d\n",d2); while((d3!=0)||(d3=d1)||(d3=d2)||(d3=a3)){ d3=rand()*5/32768; if ((d3!=0)&&(d3!=d1)&&(d3!=d2)&&(d3!=a3)){ break; }} printf("d3 = %d\n",d3); while((d4!=0)||(d4=d1)||(d4=d2)||(d4=d3)||(d4=a4)){ d4=rand()*5/32768; if ((d4!=0)&&(d4!=d1)&&(d4!=d2)&&(d4!=d3)&&(d4!=a4)){ break; }} printf("d4 = %d\n",d4); // 4th row while((b4!=0)||(b4=a3)||(b4=a4)||(b4=b1)||(b4=d4)){ b4=rand()*5/32768; if ((b4!=0)&&(b4!=a3)&&(b4!=a4)&&(b4!=b1)&&(b4!=d4)){ break; }} printf("b4 = %d\n",b4); while((c4!=0)||(c4=d3)||(c4=d4)||(c4=c1)||(c4=a4)||(c4=b4)){ c4=rand()*5/32768; if ((c4!=0)&&(c4!=d3)&&(c4!=d4)&&(c4!=c1)&&(c4!=a4)){ break; }} printf("c4 = %d\n",c4); // Central square while((b2!=0)||(b2=a1)||(b2=b1)||(b2=a2)||(b2=d2)||(b2=b4)){ b2=rand()*5/32768; if ((b2!=0)&&(b2!=a1)&&(b2!=b1)&&(b2!=a2)&&(b2!=d2)&&(b2!=b4)){ break; }} printf("b2 = %d\n",b2); while((c2!=0)||(c2=c1)||(c2=d1)||(c2=a2)||(c2=b2)||(c2=d2)||(c2=c4)){ c2=rand()*5/32768; if ((c2!=0)&&(c2!=c1)&&(c2!=d1)&&(c2!=a2)&&(c2!=b2)&&(c2!=d2)&&(c2!=c4)){ break; }} printf("c2 = %d\n",c2); while((b3!=0)||(b3=a3)||(b3=a4)||(b3=b4)||(b3=b1)||(b3=b2||(b3=d3))){ b3=rand()*5/32768; if ((b3!=0)&&(b3!=a3)&&(b3!=a4)&&(b3!=b4)&&(b3!=b1)&&(b3!=b2)&&(b3!=d3)){ break; }} printf("b3 = %d\n",b3); while((c3!=0)||(c3=c4)||(c3=d4)||(c3=d3)||(c3=c1)||(c3=c2)||(c3=a3)||(c3=b3)){ c3=rand()*5/32768; if ((c3!=0)&&(c3!=c4)&&(c3!=d4)&&(c3!=d3)&&(c3!=c1)&&(c3!=c2)&&(c3!=a3)&&(c3!=b3)){ break; printf("c3 = %d\n",c3); }}}
2 1 3 4
4 ? ? 1
1 ? ? 2
3 ? ? !
To solve this issue I've tried to put all the process into another while-if-break senetence in order to finish the program only when the last variable to be determinated (c3) has a valor.
I've wrote that:
In that code original printf sentences doesn't appears when I run the program and the last one appera like no initialized.Code://sudoku.cpp: #include<stdlib.h> #include<math.h> #include<stdio.h> #include<time.h> void main(){ srand(time(0)); int a1; int b1; int c1; int d1; int a2; int b2; int c2; int d2; int a3; int b3; int c3; int d3; int a4; int b4; int c4; int d4; srand(time(0)); d4=0; while(d4=0){ // 1st row a1=(rand()%4)+1; printf("a1 = %d\n",a1); while((b1!=0)||(b1=a1)){ b1=rand()*5/32768; if ((b1!=0)&&(b1!=a1)){ break; printf("b1 %d\n",b1); }} printf("b1 = %d\n",b1); while((c1!=0)||(c1=a1)||(c1=b1)){ c1=rand()*5/32768; if ((c1!=0)&&(c1!=a1)&&(c1!=b1)){ break; }} printf("c1 = %d\n",c1); while((d1!=0)||(d1=a1)||(d1=b1)||(d1=c1)){ d1=rand()*5/32768; if ((d1!=0)&&(d1!=a1)&&(d1!=b1)&&(d1!=c1)){ break; }} printf("d1 = %d\n",d1); // Column A while((a2!=0)||(a2=a1)||(a2=b1)){ a2=rand()*5/32768; if ((a2!=0)&&(a2!=a1)&&(a2!=b1)){ break; }} printf("a2 = %d\n",a2); while((a3!=0)||(a3=a1)||(a3=a2)){ a3=rand()*5/32768; if ((a3!=0)&&(a3!=a1)&&(a3!=a2)){ break; }} printf("a3 = %d\n",a3); while((a4!=0)||(a4=a1)||(a4=a2)||(a4=a3)){ a4=rand()*5/32768; if ((a4!=0)&&(a4!=a1)&&(a4!=a2)&&(a4!=a3)){ break; }} printf("a4 = %d\n",a4); // Column D while((d2!=0)||(d2=c1)||(d2=d1)||(d2=a2)){ d2=rand()*5/32768; if ((d2!=0)&&(d2!=c1)&&(d2!=d1)&&(d2!=a2)){ break; }} printf("d2 = %d\n",d2); while((d3!=0)||(d3=d1)||(d3=d2)||(d3=a3)){ d3=rand()*5/32768; if ((d3!=0)&&(d3!=d1)&&(d3!=d2)&&(d3!=a3)){ break; }} printf("d3 = %d\n",d3); while((d4!=0)||(d4=d1)||(d4=d2)||(d4=d3)||(d4=a4)){ d4=rand()*5/32768; if ((d4!=0)&&(d4!=d1)&&(d4!=d2)&&(d4!=d3)&&(d4!=a4)){ break; }} printf("d4 = %d\n",d4); // 4th row while((b4!=0)||(b4=a3)||(b4=a4)||(b4=b1)||(b4=d4)){ b4=rand()*5/32768; if ((b4!=0)&&(b4!=a3)&&(b4!=a4)&&(b4!=b1)&&(b4!=d4)){ break; }} printf("b4 = %d\n",b4); while((c4!=0)||(c4=d3)||(c4=d4)||(c4=c1)||(c4=a4)||(c4=b4)){ c4=rand()*5/32768; if ((c4!=0)&&(c4!=d3)&&(c4!=d4)&&(c4!=c1)&&(c4!=a4)){ break; }} printf("c4 = %d\n",c4); // Central square while((b2!=0)||(b2=a1)||(b2=b1)||(b2=a2)||(b2=d2)||(b2=b4)){ b2=rand()*5/32768; if ((b2!=0)&&(b2!=a1)&&(b2!=b1)&&(b2!=a2)&&(b2!=d2)&&(b2!=b4)){ break; }} printf("b2 = %d\n",b2); while((c2!=0)||(c2=c1)||(c2=d1)||(c2=a2)||(c2=b2)||(c2=d2)||(c2=c4)){ c2=rand()*5/32768; if ((c2!=0)&&(c2!=c1)&&(c2!=d1)&&(c2!=a2)&&(c2!=b2)&&(c2!=d2)&&(c2!=c4)){ break; }} printf("c2 = %d\n",c2); while((b3!=0)||(b3=a3)||(b3=a4)||(b3=b4)||(b3=b1)||(b3=b2||(b3=d3))){ b3=rand()*5/32768; if ((b3!=0)&&(b3!=a3)&&(b3!=a4)&&(b3!=b4)&&(b3!=b1)&&(b3!=b2)&&(b3!=d3)){ break; }} printf("b3 = %d\n",b3); while((c3!=0)||(c3=c4)||(c3=d4)||(c3=d3)||(c3=c1)||(c3=c2)||(c3=a3)||(c3=b3)){ c3=rand()*5/32768; if ((c3!=0)&&(c3!=c4)&&(c3!=d4)&&(c3!=d3)&&(c3!=c1)&&(c3!=c2)&&(c3!=a3)&&(c3!=b3)){ break; }} printf("c3 = %d\n",c3); if (b4!=0){ break; }} printf("a1 = %d\n",a1); }
How can I solve that problem?
Thank you for your help.



LinkBack URL
About LinkBacks


