[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
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
A voir également:
- [C++] Sudoku
- Sudoku gratuit - Télécharger - Jeux vidéo
- Sudoku apk - Télécharger - Puzzle & Réflexion
- Sudoku Susser - Télécharger - Outils professionnels
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
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
Mis à part que la fonction booléenne doit arriver avant l'affichage.
PS : A priori mon code fonctionait
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
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.
Et donc ou est le problème?
Au fait c'est d'un tableau en 2 D dont tu as besoin pour un sudoku.
je suis bloker je ne sai pa commen faire pour faire une fonction booleenne avec un parametre de saisie
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
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).
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).
pa bien compris pour la fonction
comment dois je faire alors pour le numero de ligne qui devra etre passé en parametre
comment dois je faire alors pour le numero de ligne qui devra etre passé en parametre
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
4 févr. 2008 à 00:28
Mettons que tu aies ton sudoku défini comme ça:
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 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; } }
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??
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??
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
4 févr. 2008 à 13:25
Essayes avec
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.
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.
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
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
#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);
}
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);
}
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
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
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
OK MERCI BEAUCOUP DE TON AIDE
MAIS MAINTENANT IL VA FALLOIR QUE JE LE COMPRENNE ET QUE JE LE MODIFIE
MAIS MAINTENANT IL VA FALLOIR QUE JE LE COMPRENNE ET QUE JE LE MODIFIE
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
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.
//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.
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
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
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
5 févr. 2008 à 02:07
Regarde à la ligne 26, il y a peut être un pb d'espace. (V )
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
5 févr. 2008 à 13:03
Pour k (main.cpp:32:35), j'avais mis un point à la place d'un ; dans le for
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
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]
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]