Estou realizando a construção de um programa em C para uma cadeira de minha faculdade, no entanto estou apresentando alguns problemas em sua execução.
Eu poderia ter realizado uma simplificação do programa, no entanto, como solicitado pelo professor, devo apresentar alguns recursos estudados,
como ponteiros para funções e alocação de memória.
Caso alguém consiga dar uma olhada e verificar possíveis erros, ficarei agradecido.
#include<stdio.h>#include<string.h>#include<stdlib.h>intMatriz[9][9];typedefstructSudoku{int l;int c;int*v;int aux;}Sudoku;voidSolucao(int,int);intAlocar(Sudoku*);voidDesalocar(int*,int(*func)(constint*));intMontar(Sudoku*);voidTroca(int,int);intLinha(int,int);intColuna(int,int);intNove(int,int,int);intAlocar(Sudoku*Jogo){(Jogo->v)=(int*)calloc(81,sizeof(int));if(!(Jogo->v)){
printf("** Erro: Memoria Insuficiente **");
exit();}}voidDesalocar(int*V,int(*func)(constint*)){(*func)(V);}intMontar(Sudoku*Jogo){FILE*fp;char arquivo[50];int i,j=,k=,a,o;do{
printf("Digite uma das opcoes:\n\n\t1 - Ler do teclado;\n\n\t2 - Ler de arquivo(formatado semelhante ao jogo apresentado).\n\nOpcao escolhida: ");
scanf("%d",&o);if((o!=1)&&(o!=2)){
printf("\n\n********OPCAO INVALIDA*******\n\n");}}while((o!=1)&&(o!=2));
printf("\n");
fflush(stdin);switch(o){case1:{for(i=;i<81;i++){
printf("Linha %d Coluna %d: ", k+1, j+1);
scanf("%d",&a);(Jogo->v[i])=a;
a=;
j++;if(!(j%9)){
j=;
k++;}}break;}case2:{
printf("Digite o nome do arquivo que contem os dados: ");
fflush(stdin);
fgets(arquivo,49,stdin);if(!(fp = fopen(arquivo,"r"))){
printf("\n\nErro, não foi possivel abrir o arquivo\n\n");
exit();}for(i=;i<81;i++){
fscanf(fp,"\t%d",&a);(Jogo->v[i])=a;
a=;
j++;if(!(j%9)){
j=;}}
fclose(fp);break;}default:break;}}voidTroca(int l,int c){if(c<8){Solucao(l,c+1);}else{Solucao(l+1,);}}voidSolucao(int col,int lin){int i;if(lin>8){
printf("\n\n\t*******SOLUCAO*******\n\n\t");for(lin=;lin<9;lin++){for(col=;col<9;col++)
printf("%5d",Matriz[lin][col]);
printf("\n\t");}
printf("\n\n");}if(Matriz[col][lin]!=){Troca(lin,col);}else{for(i=;i<9;i++){if((Linha(lin,i)==1)&&(Coluna(col,i)==1)&&(Nove(lin,col,i)==1)){Matriz[lin][col]=(i+1);Troca(lin,col);}}}}intLinha(int l,int aux){int c;for(c=;c<9;c++){if(Matriz[l][c]==(aux+1)){return;}return1;}}intColuna(int c,int aux){int l;for(l=;l<9;l++){if(Matriz[l][c]==(aux+1)){return;}return1;}}intNove(int l,int c,int aux){int li,co;for(li=;li<3;li++){for(co=;co<3;co++){if(Matriz[l+li][c+co]==(aux+1)){return;}}}return1;}int main(){int i, j;Sudoku S;(S.l)=9;(S.c)=9;int(*p)(constint*);
p=free;
printf("\t\t\tSOLUCIONADOR DE SUDOKU\n\n");
printf("A partir de um jogo de SUDOKU constituido por 9 linhas e 9 colunas de forma\ndemonstrada por:\n");
printf("\n\t0\t0\tX\t0\tX\t0\t0\t0\tX");
printf("\n\tX\tX\t0\tX\t0\t0\t0\tX\t0");
printf("\n\t0\t0\tX\t0\t0\tX\tX\tX\t0");
printf("\n\t0\tX\tX\t0\tX\t0\t0\tX\tX");
printf("\n\tX\t0\t0\tX\t0\tX\tX\t0\t0");
printf("\n\t0\tX\t0\t0\tX\t0\tX\tX\t0");
printf("\n\t0\t0\tX\t0\t0\tX\tX\tX\t0");
printf("\n\t0\tX\tX\t0\tX\t0\t0\tX\tX");
printf("\n\tX\t0\t0\tX\t0\tX\tX\t0\t0");
printf("\n\nOnde X representam os numeros apresentados no jogo e 0 os espacos vazios.\n\n");Alocar(&S);Montar(&S);for(i=;i<9;i++){for(j=;j<9;j++){Matriz[i][j]=(S.v[i*9+j]);}}Solucao(,);Desalocar(S.v,p);}
Estou tendo basicamente problemas ao abrir o arquivo, tendo-se como retorno que não foi possível abril-lo, e, quando digitados os dados, o programa trava.
Pergunta
rodri323
Olá pessoal,
Estou realizando a construção de um programa em C para uma cadeira de minha faculdade, no entanto estou apresentando alguns problemas em sua execução.
Eu poderia ter realizado uma simplificação do programa, no entanto, como solicitado pelo professor, devo apresentar alguns recursos estudados,
como ponteiros para funções e alocação de memória.
Caso alguém consiga dar uma olhada e verificar possíveis erros, ficarei agradecido.
Estou tendo basicamente problemas ao abrir o arquivo, tendo-se como retorno que não foi possível abril-lo, e, quando digitados os dados, o programa trava.
Desde já, muito obrigado.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.