cs_khen
Messages postés4Date d'inscriptionsamedi 13 janvier 2007StatutMembreDernière intervention20 décembre 2007
-
19 déc. 2007 à 00:24
cs_sam20
Messages postés184Date d'inscriptionlundi 31 juillet 2006StatutMembreDernière intervention26 mai 2016
-
23 déc. 2007 à 11:03
Bonjour,
voila j'ai un petite problème avec l'initialisation de mon tableau , je vous explique le problème
on a un tableau de 3 dimension appelé tab et de taille 9*9*9
les donnée tab[i][j] et un tableau de taille 9contenant touts les information concernant la case de la ligne i et de la colonne j du sudoku
trois valeurs sont possibles pour tab[i][j][k]
0 si chiffre k+1 et interdit dans la case (i,j)
1 si chiffre k+1 et possible dans la case (i,j)
2 si chiffre k+1 et sûr dans la case (i,j)
pour l'initialisation
ils nous demande décrire une fonction void initsudoku(int tab[9][9][9]) qui prend en paramètre un tableau vide T(qui sera remplacer par tab lors de l'appel à la fonction) on demande à l'utilisateur d'entre les valeurs du sudoku (ligne par ligne,en séparant les valeurs par des espaces) après on remplit ce tableau avec ces valeurs,et la valeurs 0 correspond à des case vide dans ce sudoku
ils nous demandent de remplire le tableau T just avec les valeurs de départ
exp si l'utilisature rentre la valeurs 5 en ligne 1 et colonne 2 alors on sait que tab[1][2}=[0,0,0,0,2,0,0,0,0]
et décrire un fonction printsudoku(int tab[9][9][9]) qui prend en paramètre un tableau T(qui sera remplacer par tab lors de l'appel à la fonction) et imprime le sudoku correspondant sous forme de tableau à deux dimension
printf("entrer les valeurs de la ligne %d separais par un espace \n",i+1);
for(j=0;j<9;j++)
scanf("%d",&tab1[i][j]);
k=tab1[i][j];
if (k>0)
{
tab[i][j][k-1]=2;
}
void printsudoku(int x, int y,int tab[9][9][9]) // not completed yet
{
int k;
for (x=0;x<9;x++)
{
for(y=0;y<9;y++)
for(k=0;k<9;k++)
if(tab[x][y][k]==2)
printf("| %d |",k+1);
printf("\n");
}
}
int main()
{
int tab[9][9][9];
int i,j;
initsudoku(tab);
printsudoku(i,j,tab);
}
mon problème et que la partie initialisation marche mais quand je rajoute la partie printsudoku le programme bloc
il m'affiche un message d'erreur (printsudoku n'est pas initialiser) donc je voudrai vous demander qu'es que vous pensez de mon programme et si vous pouvez m'aider à résoudre le problème
et merci d'avance de votre aide
cs_sam20
Messages postés184Date d'inscriptionlundi 31 juillet 2006StatutMembreDernière intervention26 mai 20163 19 déc. 2007 à 17:02
Ton code manque de { }
ou mets tu cela?:
for(i=0;i<9;i++)
printf("entrer les valeurs de la ligne %d separais par un espace \n",i+1);
for(j=0;j<9;j++)
scanf("%d",&tab1[i][j]);
k=tab1[i][j];
if (k>0)
{
tab[i][j][k-1]=2;
}
printf("entrer les valeurs de la ligne %d separais par un espace \n",i+1);
for(j=0;j<9;j++)
scanf("%d",&tab1[i][j]);
k=tab1[i][j];
if (k>0)
{
tab[i][j][k-1]=2;
}
}
void printsudoku(int x, int y,int tab[9][9][9]) // not completed yet
{
int k;
for (x=0;x<9;x++)
{
for(y=0;y<9;y++)
for(k=0;k<9;k++)
if(tab[x][y][k]==2)
printf("| %d |",k+1);
printf("\n");
}
}
int main()
{
int tab[9][9][9];
int i,j;
initsudoku(tab);
printsudoku(i,j,tab);
return 0;
}
cs_sam20
Messages postés184Date d'inscriptionlundi 31 juillet 2006StatutMembreDernière intervention26 mai 20163 19 déc. 2007 à 17:50
#include <stdio.h>
#include <stdlib.h>
void initsudoku(int tab[9][9][9]) // lecture des valeurs
{
int i,j,k,tab1[9][9];
char res[255]= {0};
for(i=0;i<9;i++){
printf("entrer les valeurs de la ligne %d separé par un '-' \n",i+1);
//scanf("%d",&res);
scanf("%s",res);
cs_khen
Messages postés4Date d'inscriptionsamedi 13 janvier 2007StatutMembreDernière intervention20 décembre 2007 20 déc. 2007 à 00:33
es que vous pouvez m'expliquer le fonctionnement de ce que vous avez rajoute s'il vous plaît
int i,j,k,tab1[9][9];
char res[255]= {0};
for(i=0;i<9;i++){
printf("entrer les valeurs de la ligne %d separé par un '-' \n",i+1);
//scanf("%d",&res);
scanf("%s",res);tab1[i][0]=res[0]-48;tab1[i][1]=res[2]-48;
tab1[i][2]=res[4]-48;tab1[i][3]=res[6]-48;
tab1[i][4]=res[8]-48;tab1[i][5]=res[10]-48;
tab1[i][6]=res[12]-48;tab1[i][7]=res[14]-48;
tab1[i][8]=res[16]-48;tab1[i][9]=res[18]-48;
cs_khen
Messages postés4Date d'inscriptionsamedi 13 janvier 2007StatutMembreDernière intervention20 décembre 2007 20 déc. 2007 à 03:42
EN FAIT J'AI UNE AUTRE QUESTION
il ne demande d'écrire une fonction fligne1 qui prend en paramètre deux entiers x y et un tableau de 3 dimension ,x et y correspondent aux coordonées de la case de la ligne x et la colonne y
l'action de cette fonction et de vérifier si dans la ligne de la case (x,y) on sait de manière certaine qu'une autre case vaut un chiffre k,elle indique que k est impossible pour la case (x,y)
moi j'ai fait ça mais j'ai des doute ,alors je demande votre opinion
void fligne1(int x, int y, int tab[9][9][9])
{
int z,k;
for(k=0;k<9;k++)
for(x=0;x<9;x++)
for(y=0;y<9;y++)
if (tab[x][y][k]==2) // le but de ce "if" est de mettre 0 a toute la ligne x et de hauteur k si on trouve 2 dans cette ligne.
{
for(z=0;z<9;z++)
if (tab[x][z][k]!=2)
tab[x][z][k]=0;
}
}
cs_sam20
Messages postés184Date d'inscriptionlundi 31 juillet 2006StatutMembreDernière intervention26 mai 20163 20 déc. 2007 à 20:49
Tu veux faire un sodoku.
c'est un peu plus compliqué que ca.
char res[255]= {0};
for(i=0;i<9;i++){
printf("entrer les valeurs de la ligne %d separé par un '-' \n",i+1);
//scanf("%d",&res);
scanf("%s",res);tab1[i][0]=res[0]-48;tab1[i][1]=res[2]-48;
tab1[i][2]=res[4]-48;tab1[i][3]=res[6]-48;
tab1[i][4]=res[8]-48;tab1[i][5]=res[10]-48;
tab1[i][6]=res[12]-48;tab1[i][7]=res[14]-48;
tab1[i][8]=res[16]-48;tab1[i][9]=res[18]-48;
L'utilisateur entre 9chiffres avec "-" comme delimiteur (1-2-5-3-6-7-8-4-9)
une fois appuyé sur entrer ca remplit le tableau tab1 de ces valeurs.