je suis en train de réaliser un petit jeu de réflexion "Sudoku" en C (avec Boraland C++). j'ai une problème au niveau de l'allocation dynamique
1)---->j'ai commencé par une matrice de pointeur sur structure
typedef int tableau[9];
typedef struct {
tableau tab;
int solution;
}cellule;
typedef cellule* sudoku[9][9];
2)--->çi-dessous je vous donne le code de mon programme (pas complet mais ça pose pas une problème) mais dés que le programme essaye d'accéder au case du structure j'ai une problème, je peut vous affirmer que c'est une problème d'allocation dynamique qui manque et dont je suis hésiter ou je doit mettre ma fonction malloc et avec qu'elle paramétere,,,
svp veuillez compiler mon minuscule prog et m'aider à régler les erreurs que j'ai..merci d'avance pour votre soutient
/**---------------------------------------------**\
|* Mini-projet: programmation C *|
|* sujet: Sudoku *|
|* Elaboré par: Achraf Noomane *|
|* Med Anis Harrak *|
|* *|
\**---------------------------------------------**/
#include<stdio.h>
#include<conio.h> //définir les bibliothèque
#include<windows.h>
#include<stdlib.h>
#define gauche 18
#define haut 4
#define espace ' '
typedef int tableau[9];
typedef struct {
tableau tab;
int solution;
}cellule;
typedef cellule* sudoku[9][9]; //< je ne suis pas sure la
/*-------------------------------------------------------------------------------*/
void write1xy(int x,int y,char c[80])
{
gotoxy(x,y);
printf("%s",c);
}
void Sudoku_Board() //afficher la grille de mon sudoku
{
write1xy(gauche,haut, "+---+---+---+---+---+---+---+---+---+ \0");
write1xy(gauche,haut+1, "| | | I | | I | | | \0");
write1xy(gauche,haut+2, "+---+---+---+---+---+---+---+---+---+\0");
write1xy(gauche,haut+3, "| | | I | | I | | |\0");
write1xy(gauche,haut+4, "+---+---+---+---+---+---+---+---+---+\0");
write1xy(gauche,haut+5, "| | | I | | I | | |\0");
write1xy(gauche,haut+6, "+===+===+===+===+===+===+===+===+===+\0");
write1xy(gauche,haut+7, "| | | I | | I | | |\0");
write1xy(gauche,haut+8, "+---+---+---+---+---+---+---+---+---+\0");
write1xy(gauche,haut+9, "| | | I | | I | | |\0");
write1xy(gauche,haut+10,"+---+---+---+---+---+---+---+---+---+\0");
write1xy(gauche,haut+11,"| | | I | | I | | |\0");
write1xy(gauche,haut+12,"+===+===+===+===+===+===+===+===+===+\0");
write1xy(gauche,haut+13,"| | | I | | I | | |\0");
write1xy(gauche,haut+14,"+---+---+---+---+---+---+---+---+---+\0");
write1xy(gauche,haut+15,"| | | I | | I | | |\0");
write1xy(gauche,haut+16,"+---+---+---+---+---+---+---+---+---+\0");
write1xy(gauche,haut+17,"| | | I | | I | | |\0");
write1xy(gauche,haut+18,"+---+---+---+---+---+---+---+---+---+\0");
}
/*------------------------------------------------------------------------*/
void Sudoku_Help_Board()
{
write1xy(2,2,"Resolveur de Sudoku ver Esprit/08/S2/P1\tAchraf Noomane & Anis harrak");
write1xy(2,5,"x= | y= |\0");
write1xy(2,7,"choix=\0");
write1xy(2,24,"F1-Aide F2-Enregistrer F3-Charger F5-Resoudre F8-Effacer ESC-Quit\n\0");
}
/*-------------------------------------------------------------------*/
void initialiser_sudoku(cellule *sudoku[9][9])
{
cellule *grid[9][9]
grid=(liste) malloc(sizeof(cellule));
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
for(int k=0;k<9;k++)
{
sudoku[i][j]->tab[k]=k+1; //<--ça marche pas la
sudoku[i][j]->solution=0; //<--je pense ici non plus
}
}
}
}
/*--------------------------------------------------------------------*/
void Curseur(int x,int y,cellule *sudoku[9][9])
{
int xr,yr;
//écrire les coordonnées d'une case
gotoxy(5,5); printf("%d",x);
gotoxy(11,5); printf("%d",y);
//écrire les choix possibles
gotoxy(8,7);
for(int i=0;i<9;i++)
{ if (!sudoku[x][y]->tab[i]) //<---ici non plus
printf(" ");
else
printf("%d",i+1);
}
//aller à la position sur la grille
xr=gauche+ x*4 -2;
yr=haut + y*2 -2;
gotoxy(xr,yr);
system("color 0c");
if(!sudoku[x][y]->solution)
printf(" ");
else
printf("%d",sudoku[x][y]->solution);
gotoxy(xr,yr);
}
/*-----------------------------------------------------------------*/
void vider(cellule *sudoku[9][9])
{
int x_vid,y_vid,i;
for(x_vid=0;x_vid<9;x_vid++)
{
for(y_vid=0;y_vid<9;y_vid++)
{for(i=0;i<9;i++)
{
sudoku[x_vid][y_vid]->tab[i]=i+1 ;
sudoku[x_vid][y_vid]->solution=0;
Curseur(x_vid,y_vid,sudoku);
}
}
}
}
/*---------------------------------------------------------------------*/
/*
fonction pour enregistrer dans une ficher
fonction pour charger depuis une ficher
*/
/*-------------------------------------------------------------------*/
/*---------------------------------------------------------*/
void main()
{
cellule *grid[9][9];
initialiser_sudoku(grid);
int x,y;
x=1;
y=1;
Sudoku_Board();
Sudoku_Help_Board();
Curseur(x,y,grid);
system("PAUSE");
}
