Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

edit the following code to read in the sudoku puzzle from a text file. #include<

ID: 3733483 • Letter: E

Question

 edit the following code to read in the sudoku puzzle from a text file.  #include<stdio.h> #include <stdlib.h>  int sudoku[9][9]= {     0,0,0,0,0,4,0,0,0,     0,6,8,0,0,0,5,0,0,     0,2,0,0,0,0,0,7,6,     6,0,0,0,0,0,8,9,0,     0,0,5,2,6,0,0,0,0,     0,0,0,9,0,0,1,0,0,     0,0,0,0,0,7,0,5,0,     0,4,0,0,0,0,0,0,1,     0,0,0,0,5,1,4,0,0 }; int a[9][9]= {     0,0,0,0,0,4,0,0,0,     0,6,8,0,0,0,5,0,0,     0,2,0,0,0,0,0,7,6,     6,0,0,0,0,0,8,9,0,     0,0,5,2,6,0,0,0,0,     0,0,0,9,0,0,1,0,0,     0,0,0,0,0,7,0,5,0,     0,4,0,0,0,0,0,0,1,     0,0,0,0,5,1,4,0,0 }; //PRINT SUDOKU void printSudoku() {     int i,j;               FILE *fp;    FILE *fw;   fp = fopen("in.txt", "r");    fw= fopen("out.txt", "w");    if(fp == NULL)     {        perror("Error while opening the file");        exit(EXIT_FAILURE);                                }     char ch;     while((ch = fgetc(fp))!=EOF){         if(j==9){             i++;             j=0;         }              }          for(i = 0; i < 9; i++) { if(i==3 || i==6) fprintf(fw, " ");         for(j = 0; j < 9; j++)    {             fprintf(fw,  "%d",sudoku[i][j]);             fprintf(fw, " ");             if(j>7) fprintf(fw, " ");             if(j==2 || j==5) fprintf(fw, "  ");                      }     }     fprintf(fw," ");      fclose(fp); } //CHECK ROW int checkRow(int num, int i)    {     int j,x=1;     for(j = 0; j < 9; j++)         if(sudoku[i][j] == num)    return 0;          return x; } //CHECK COLUMN int checkCol(int num, int j) {     int i,x=1;     for(i = 0; i < 9; i++)         if(sudoku[i][j]==num)    return 0;          return x; }  //CHECK SQUARE int checkSquare(int num, int xj, int yi) {     int x=1;     int i,j;     for(i = yi; i < yi+3; i++)         for(j = xj; j < xj+3; j++)             if(sudoku[i][j]==num)    return 0;          return x; } //MAIN PROGRAM main() {     int i,j,num,row,col;     int pi,pj,xj,yi,square;          printSudoku();          for(i = 0; i < 9; i++)         for(j = 0; j < 9; j++) {             if(sudoku[i][j]==0)    {                 num=1;                                  do    {                     if(num>9)    {                         pi=i;                         if(j == 0)  {                             if(i!=0)    {                                 pj=8;                                 pi=i-1;                             }                         }                         else    {                             pj=j-1;                         }                         for(i = pi; i >= 0; i--)                             for(j = pj; j >= 0; j--)    {                                 pj=8;                                                                  if(a[i][j]==0 && sudoku[i][j]==9)    {                                     sudoku[i][j]=0;                                 }                                 else if(a[i][j]==0 && sudoku[i][j]<9)    {                                                                          num=sudoku[i][j]+1;                                     sudoku[i][j]=0;                                     goto check;                                 }                             }                     }                 check:row=checkRow(num,i);                     col=checkCol(num,j);                     if(j<3)    xj=0;                     if(j>2 && j<6) xj=3;                     if(j>5) xj=6;                     if(i<3)    yi=0;                     if(i>2 && i<6) yi=3;                     if(i>5) yi=6;                     square=checkSquare(num,xj,yi);                     if(row==1 && col==1 && square==1)                         sudoku[i][j]=num;                     else                         num++;                                      }                 while(row==0 || col==0 || square==0);             }         }          printf(" ");     printSudoku();      } 

Explanation / Answer


#include<stdio.h>
#include <stdlib.h>
FILE *FF;
int sud[9][9];
void read()
{
FILE *FF;
int i, j;
FF = fopen("in.txt", "r");
while (!feof(FF)) {
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
printf("reading sud[%d][%d] ", i, j);
fscanf(FF, "%d", &sud[i][j]);
if(feof(FF)) {
printf("found eof ");
}
}
}
}
}
//PRINT SUDOKU
void printSudoku()
{
int i,j;
  
  
FILE *fp;
FILE *fw;
fp = fopen("in.txt", "r");
fw= fopen("out.txt", "w");
if(fp == NULL)
{
perror("Error while opening the file");
exit(EXIT_FAILURE);
  
  
  
}
char ch;
while((ch = fgetc(fp))!=EOF){
if(j==9){
i++;
j=0;
}
  
}
  
for(i = 0; i < 9; i++) { if(i==3 || i==6) fprintf(fw, " ");
for(j = 0; j < 9; j++) {
fprintf(fw, "%d",sudoku[i][j]);
fprintf(fw, " ");
if(j>7) fprintf(fw, " ");
if(j==2 || j==5) fprintf(fw, " ");
  
}
}
fprintf(fw," ");
fclose(fp);
}
//CHECK ROW
int checkRow(int num, int i) {
int j,x=1;
for(j = 0; j < 9; j++)
if(sudoku[i][j] == num) return 0;
  
return x;
}
//CHECK COLUMN
int checkCol(int num, int j) {
int i,x=1;
for(i = 0; i < 9; i++)
if(sudoku[i][j]==num) return 0;
  
return x;
}
//CHECK SQUARE
int checkSquare(int num, int xj, int yi)
{
int x=1;
int i,j;
for(i = yi; i < yi+3; i++)
for(j = xj; j < xj+3; j++)
if(sudoku[i][j]==num) return 0;
  
return x;
}
//MAIN PROGRAM
main()
{
int i,j,num,row,col;
int pi,pj,xj,yi,square;
  
printSudoku();
  
for(i = 0; i < 9; i++)
for(j = 0; j < 9; j++) {
if(sudoku[i][j]==0) {
num=1;
  
do {
if(num>9) {
pi=i;
if(j == 0) {
if(i!=0) {
pj=8;
pi=i-1;
}
}
else {
pj=j-1;
}
for(i = pi; i >= 0; i--)
for(j = pj; j >= 0; j--) {
pj=8;
  
if(a[i][j]==0 && sudoku[i][j]==9) {
sudoku[i][j]=0;
}
else if(a[i][j]==0 && sudoku[i][j]<9) {
  
num=sudoku[i][j]+1;
sudoku[i][j]=0;
goto check;
}
}
}
check:row=checkRow(num,i);
col=checkCol(num,j);
if(j<3) xj=0;
if(j>2 && j<6) xj=3;
if(j>5) xj=6;
if(i<3) yi=0;
if(i>2 && i<6) yi=3;
if(i>5) yi=6;
square=checkSquare(num,xj,yi);
if(row==1 && col==1 && square==1)
sudoku[i][j]=num;
else
num++;
  
}
while(row==0 || col==0 || square==0);
}
}
  
printf(" ");
printSudoku();
  
}