[C++] Sudoku

Fermé
coubou - 3 févr. 2008 à 22:30
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 - 6 févr. 2008 à 20:49
Bonjour,
probleme avec mon programme en c++

je doi cree un tableau en 3D puis saisir les cases et ensuite
avec une fonction booleenne je dois verifier que dans chaque ligne n'a y a pas de doublons
le numero de la ligne à passer sera passer en parametre
A voir également:

20 réponses

dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
4 févr. 2008 à 21:13
En GROS c'est cela.

Mis à part que la fonction booléenne doit arriver avant l'affichage.

PS : A priori mon code fonctionait
1
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 1 526
3 févr. 2008 à 23:22
Bonjour,

Et donc ou est le problème?
Au fait c'est d'un tableau en 2 D dont tu as besoin pour un sudoku.
0
oui c un tableau 2D
zute
0
je suis bloker je ne sai pa commen faire pour faire une fonction booleenne avec un parametre de saisie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 1 526
4 févr. 2008 à 00:00
Tu veux dire que tu veux saisir des nombres pour les mettre dans un tableau 2D et ensuite écrire une fonction booléenne qui vérifie les doublons dans les lignes?

Pour saisir un nombre tu peux utiliser la fonction scanf.
Pour ce qui est d'écrire une fonction booléenne, tu peux faire une fonction qui retourne un entier (0 pour faux et 1 pour vrai).
0
pa bien compris pour la fonction
comment dois je faire alors pour le numero de ligne qui devra etre passé en parametre
0
kilian Messages postés 8732 Date d'inscription vendredi 19 septembre 2003 Statut Non membre Dernière intervention 5 février 2025 1 526
4 févr. 2008 à 00:28
Mettons que tu aies ton sudoku défini comme ça:
int sud[9][9];

La première ligne sera sud[0][i] sachant que i représente n'importe quel nombre de 0 à 8 (On part de zero donc on s'arrête à huit) et i c'est la colonne bien sûr.

Je te donne un exemple: "écrire une fonction qui permet de vérifier que la case de ligne 4 et colonne 9 possède la valeur 1":
int verif(int sudoku[9][9])
{
    if(sudoku[3][8] == 1){
        return 1;
   }
   else{
       return 0;
   }
}
0
donc d'apres toi ma consigne dit que je doit mettre mon tableau en parametre ??



int verif(int sudoku[9][9])
{
for(i=0;i<ligne;i++)
{ for(j=0;j<colonne;j++)

la fo je trouve la soluce pour chch les doublons !!
if(sudoku[3][8] == 1){
return 1;
}
else{
return 0;
}
}
}



puis la je ne sait pa comment faire pour apperler ma fonction et retrouver le retour??
0
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
4 févr. 2008 à 13:25
Essayes avec

int iVérifierDoublon(int iSudoku[9][9])
{

  int i, j, k; //Compteurs

  for(i=0;i<9;i++) //On teste toutes les lignes
 { 
   for(j=0;j<8;j++) //Inutile de tester la dernière colonne elle a déja été testée 8 fois
   {
	for (k=j+1;k<9.k++) // Inutile de tester les colonnes précédentes, s'il y avait un doublon il aurait été détecté
	{
	 if(iSudoku[i][j]==iSudoku[i][k])
		return 1; 
	 }
    }
 }
 
 return 0; // pas de doublon

}


Je n'ai pas pu le tester, je suis sous Windows pour l'instant et mon compilateur C est sous Linux, mais avec les commentaires tu devrais t'en sortir.
0
nn lors de la compilation il me dit qu'il y a une erreure de type

de plus je doit declarer mon tableau en variable globale donc elle ne doit pa figuerée selon moi en parametre dans la fonction ??
car la fonction est du type booleene et le tableau est de l'entier
0
#include <iostream>
using namespace std;
//declaration en variable globale;
const int ligne=9;
const int colone=9;
int Tsudoku[ligne][colone],i,j;


//procedure de saisie
void saisie(int p1)
{
//SAISIE ET CONTROLE DU TABLEAU
for (i=0;i<ligne;i++)
{ for (j=0;j<colone;j++)
{cout<<"saisir LES ELEMENTS DE LA LIGNE__"<<i+1<<"___"<<"DE LA COLONNE__"<<j+1<<endl;
cin>>Tsudoku[i][j];
while (Tsudoku[i][j]<1 || Tsudoku[i][j]>9)
{cout<<"erreure de saisie recommencer !!"<<endl;
cin>>Tsudoku[i][j];}
}
}
//AFFICHAGE DU TABLEAU
for (i=0;i<ligne;i++)
{for (j=0;j<colone;j++)
cout<<Tsudoku[i][j]<<"-";
cout<<endl;}
}
int VérifDoublon(int Tsudoku[9][9])
{

int i, j, k; //Compteurs

for(i=0;i<9;i++) //On teste toutes les lignes
{
for(j=0;j<8;j++) //Inutile de tester la dernière colonne elle a déja été testée 8 fois
{
for (k=j+1;k<9.k++) // Inutile de tester les colonnes précédentes, s'il y avait un doublon il aurait été détecté
{
if(Tsudoku[i][j]==Tsudoku[i][k])
return 1;
}
}
}

return 0; // pas de doublon

}


int main()

{int a,b;


//appel de la procedure saisie
saisie(a);
//appel de la fonction et affectation de la reponse si il y a des doublons oui ou non
VérifDoublon(b);


}
0
sachant que je dois realisé trois fonction de verification l'une pour les lignes l'autre pour les colonnes et la dernieres pour les carrés
0
en gros je dois avoir

une procedure saisie

une procedure affichage


une fonction booléenne controleligne(avec le numeros de la ligne sera passé en parametre)



pouvez vous svp juste m'expliquer comment dois je faire avec cette fonction
0
OK MERCI BEAUCOUP DE TON AIDE
MAIS MAINTENANT IL VA FALLOIR QUE JE LE COMPRENNE ET QUE JE LE MODIFIE
0
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
4 févr. 2008 à 22:30
A vue de nez le problème vient de là

//déclaration en variable globale;
const int ligne=9;
const int colone=9;


//Les déclarations de tableau commencent à 0,

(0,1,2,.8) 9 chiffres comme te l'avait précisé un de mes prédesseurs.

Je n'ai pas lu plus looin.
0
main.cpp:26: error: `V' does not name a type
main.cpp:32:35: invalid suffix "k" on floating constant
Process terminated with status 1 (0 minutes, 0 seconds)
3 errors, 0 warnings



voila le rapport d'erreure
0
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
5 févr. 2008 à 02:07
Regarde à la ligne 26, il y a peut être un pb d'espace. (V )
0
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
5 févr. 2008 à 13:03
Pour k (main.cpp:32:35), j'avais mis un point à la place d'un ; dans le for
0
comment transformer un tablau 2D en une D
0
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 83
6 févr. 2008 à 20:49
Dans ton cas, tu a un tableau 9x9 (=81). Il suffit de créer un tableau de dimension 81.
En considérant que tu a un tableau Sudo2D [9] [9] et un tableau Sudo[81], le passage se fera de la manière suivante (à la volée):

Sudo2d[i][j] correspond à Sudo[9*i+j]
0