[C++] Sudoku

coubou -  
dandypunk Messages postés 838 Statut Membre -
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
Configuration: Windows XP
Internet Explorer 6.0

20 réponses

  1. dandypunk Messages postés 838 Statut Membre 83
     
    En GROS c'est cela.

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

    PS : A priori mon code fonctionait
    1
  2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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
  3. coubou
     
    je suis bloker je ne sai pa commen faire pour faire une fonction booleenne avec un parametre de saisie
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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
  6. coubou
     
    pa bien compris pour la fonction
    comment dois je faire alors pour le numero de ligne qui devra etre passé en parametre
    0
  7. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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
  8. coubou
     
    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
  9. dandypunk Messages postés 838 Statut Membre 83
     
    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
  10. coubou
     
    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
  11. coubou
     
    #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
  12. coubou
     
    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
  13. coubou
     
    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
  14. coubou
     
    OK MERCI BEAUCOUP DE TON AIDE
    MAIS MAINTENANT IL VA FALLOIR QUE JE LE COMPRENNE ET QUE JE LE MODIFIE
    0
  15. dandypunk Messages postés 838 Statut Membre 83
     
    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
  16. coubou
     
    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
  17. dandypunk Messages postés 838 Statut Membre 83
     
    Regarde à la ligne 26, il y a peut être un pb d'espace. (V )
    0
  18. dandypunk Messages postés 838 Statut Membre 83
     
    Pour k (main.cpp:32:35), j'avais mis un point à la place d'un ; dans le for
    0
  19. coubou
     
    comment transformer un tablau 2D en une D
    0
  20. dandypunk Messages postés 838 Statut Membre 83
     
    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