IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

problème erreur a la compilation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 216
    Par défaut problème erreur a la compilation
    bonjour,
    je vous écrit ce message car je bloque un peu sur une erreur.
    pour la fac j ai un tp de backtracking a faire
    le sujet etant

    I. Présentation
    Cinq maisons de couleurs différentes sont habitées par des hommes de nationalités diverses, ayant
    chacun un animal favori, une boisson préférée et une marque de cigarettes. Ces cinq maisons
    respectent les contraintes suivantes :
    – L'Anglais habite la maison rouge.
    – Le chien appartient à l'Espagnol.
    – On boit du café dans la maison verte.
    – L'Ukrainien boit du thé.
    – La maison verte est à côté de la blanche, à droite.
    – Le fumeur de Old Gold élève des escargots.
    – On fume des Kool dans la maison jaune.
    – On boit du lait dans la maison du milieu.
    – Le Norvégien habite la première maison à gauche.
    – Le fumeur de Chesterfield habite à côté du propriétaire du renard.
    – Le fumeur de Kool habite à côté du propriétaire du cheval.
    – Le fumeur de gitanes boit du vin.
    – Le Japonais fume des Craven.
    – Le Norvégien habite à côté de la maison bleue.

    II. Objectifs

    Répondre aux questions :
    Qui boit de l'eau ?
    A qui appartient le zèbre ?

    III. Structure de données

    Pour ce problème des structures légères suffiront : une matrice 5x5 (d'entiers ou de caractères par
    exemple) contiendra les 5 caractéristiques des 5 maisons.
    Dans une première version les contraintes à respecter pourront être codées "en dur" dans la fonction
    acceptable.
    Dans une deuxième version vous proposerez une structure de données plus générales pour
    représenter les contraintes.

    IV. Au final

    La solution sera donc un tableau rempli respectant toutes les contraintes. Le programme se terminera
    en répondant aux deux questions.
    Vous rendrez les sources de votre programme accompagné d'un fichier d'explications sous forme
    d'une archive tar.
    a l'heur actuel j ai fait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
     
    #include <iostream>
     
    using namespace std;
     
    //fonction d affichage
    void affichage ( string grille[5][5])
    {
        cout<<"------------------------------"<<endl;
        for(int i=0; i<5;i++) //on lis ligne par ligne
        {
            cout<<"|";
            for(int j =0 ; j < 5; j++) //on lis colonne par colonne
            {
                cout<<"  "<<grille[i][j]<<" | "; //permet de separer les block de maniere vertical
            }
            cout<<endl;
            cout<<"------------------------------"<<endl;
        }
        cout<<endl;
     
    }
    //nous allons avoir besoin de fonction pour tester si une valeur est bien abscente d une colonne
     
    bool AbsentSurColonne ( string k, string grille[5][5],int j)
    {
        for ( int i=0; i<5; i++)
        {
            if ( grille[i][j]==k)//si la valeur est deja presente sur la colonne
                return false;
            return true;
        }
    }
     
    // Prototype de la fonction
    // Cette fonction va recevoir une grille en entree et la reseoudre
     
    //nous devons constamment verifier que le choix fait en amont ne provoque pas de blocage en aval
     
    // on va doonc utiliser le retour de la fonction pour nous indiquer si la grille est valide ou non
    //enfin , comme notre fonction doit etre recursive, nous allonns ajouter un parametre pour savoir quelle case nous somme en train de trater
     
    //une case (i,j) dans un tableau peut etre representer par un nombre (i*largeur_tableau)+j, que nous nommerons position
     
    bool valide( string maison[5][5], int i ,int a )
    {
     
    //sur une même ligne: les valeurs doivent être différentes
      for(int k=0;k<i;k++)
       {
            if(maison[i][a]==maison[k][a])
                return false;
       }
     
        //On boit du lait dans la maison du milieu.
        if(  maison[2][3]!="lait")
            return false ;
     
    	//– L'Anglais habite la maison rouge
    	if( !((maison[i][1]="anglais") && (maison[i][0]="rouge") ))
            return false ;
     
    	//– Le chien appartient à l'Espagnol.
    	if( !((maison[i][1]="espagnol") && (maison[i][4]="chien")) )
            return false ;
     
    	//– On boit du café dans la maison verte.
    	if( !((maison[i][2]="cafe") && (maison[i][0]="verte")) )
            return false  ;
     
    	//– L'Ukrainien boit du thé.
    	if( !((maison[i][1]="ukrainien") && (maison[i][2]="the")) )
            return false;
     
    	//– La maison verte est à côté de la blanche, à droite.
    	if( !((maison[i][0]="blanche") && (maison[i+1][0]="verte")) )
            return false ;
     
    	//– Le fumeur de Old Gold élève des escargots.
    	if( !((maison[i][4]="escargots") && (maison[i][3]="old")) )
            return false;
     
    	//– On fume des Kool dans la maison jaune.
    	if( !((maison[i][3]="kool") && (maison[i][0]="jaune") ))
            return false ;
     
    	//– Le fumeur de Chesterfield habite à côté du propriétaire du renard.
    	if( !((maison[i][3]="chesterfield") && (maison[i+1][4]="renard" || maison[i-1][4])="renard" )))
            return false;
     
    	//– Le fumeur de Kool habite à côté du propriétaire du cheval.
    	if( !((maison[i][3]="kool") && ( maison[i+1][4]="chevale" || maison[i-1][4]="cheval") ))
            return false;
     
    	//– Le fumeur de gitanes boit du vin.
    	if( !((maison[i][2]="vin") && (maison[i][3]="gitane" )))
            return false ;
     
    	//– Le Japonais fume des Craven.
    	if( !((maison[i][3]="craven") && (maison[i][1]="japonais" ) ))
            return false;
     
    	//– Le Norvégien habite à côté de la maison bleue. et le norvegien habite la premiere maison a gauche
    	if( !((maison[0][1]="norvegien") && (maison[1][0]="bleu")) )
            return false ;
     
    	else
            return true;
     
    }
     
    bool estValide (string grille[5][5], int position, string tableau[5),tableau [5])
    {
        // si on est a la 25eme case ( on sort du tableau)
        if(position == 5*5)
            return true;
     
        //on recupere les coordonnees de la case
        int i = position/5, j = position%5;
     
        //si la case n'est pas vide, on passe a la suivante ( appel recursif)
        if (grille[i][j] !="0")
            return estValide(grille, position +1, tableau[5]);
     
        //enumeration des valeurs possible
        for(int k = 0; k<5 ; k++)
        {
            //si la valeur est abscente ,et si elle repond au contrainte
            if(AbsentSurColonne(tableau[k],grille,i)&& valide )
            {
                //on enregistre dans la grille
                grille[i][j];
                // on appelle recursivement la fonction estValide(), pour voir si ce choix est bon par la suite
                if( est valide (grille, position+1,tableau[5]))
                    return true; //si le choix est bon, plus la peine de continuer on renvoie true
            }
        }
        //toutes les valeur ont ete testes, aucun n'est bon , on reinitialise la case
        grille[i][j] = "0";
        //puis on retourn faux
        return false;
    }
     
    int main ()
    {
        //avant tout, on donner les variable possible grace a des tableau
        string couleur [5] = {rouge,verte,jaune,bleu,blanche}
        string nationalite [5] = {anglais,espagnol,norvegien,japonais,ukrainien}
        string boisson [5]= {eau,the,cafe,vin,lait}
        string cigarette [5]= {craven,old,kool,chesterfiel,gitane}
        string animaux [5]= {zebre,renard,chien,cheval,escargots}
       //  nous allons prendre un exemple de grille pour pouvoir tester notre code
        //on cree un tableau en deux dimension
        //les grille vides etant representer par des 0
        int grille[5][5] =
        {
            {0,0,0,0,0},// couleur
            {0,0,0,0,0},//nationalite
            {0,0,0,0,0},//boisson
            {0,0,0,0,0},//cigarette
            {0,0,0,0,0}//animaux
     
        };
     
        cout <<"grille avant"<<endl;
     
        affichage(grille);
        estValide(grille,0,couleur);
        estValide(grille,0,nationalite);
        estValide(grille,0,boisson);
        estValide(grille,0,cigarette);
        estValide(grille,0,animaux);
        cout<<"grille apres"<<endl;
        affichage(grille);
    }
    mon soucis étant que quand je lance la compilation j'obtient

    |

    error: no match for 'operator!' (operand type is 'std::basic_string<char>')|

    error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|

    error: no match for 'operator||' (operand types are 'const char [7]' and 'std::string {aka std::basic_string<char>}')|

    error: expected ']' before ')' token|

    error: expected initializer before ')' token|
    je ne comprend pas comment réparer les 3 premières erreur et je ne vois pas a quoi font référence les 2 dernières :/
    si quelqu un pouvais me renseigner sa serais cool car je bloque la dessus depuis ce matin

    et si vous voulez voir la liste d erreur dans son ensemble la voici

    ||=== Build: Debug in backtracking (compiler: GNU GCC Compiler) ===|
    C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool valide(std::string (*)[5], int, int)'
    C:\Users\User\Desktop\backtracking\main.cpp|59|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|59|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|59|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|59|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|63|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|63|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|63|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|63|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|67|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|67|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|67|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|67|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|71|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|71|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|71|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|71|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|75|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|75|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|75|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|75|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|79|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|79|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|79|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|79|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|83|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|83|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|83|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|83|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|87|error: no match for 'operator||' (operand types are 'const char [7]' and 'std::string {aka std::basic_string<char>}')|
    C:\Users\User\Desktop\backtracking\main.cpp|87|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|87|note: operator||(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|87|note: no known conversion for argument 2 from 'std::string {aka std::basic_string<char>}' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|87|error: expected primary-expression before ')' token|
    C:\Users\User\Desktop\backtracking\main.cpp|91|error: no match for 'operator||' (operand types are 'const char [8]' and 'std::string {aka std::basic_string<char>}')|
    C:\Users\User\Desktop\backtracking\main.cpp|91|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|91|note: operator||(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|91|note: no known conversion for argument 2 from 'std::string {aka std::basic_string<char>}' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|95|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|95|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|95|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|95|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|99|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|99|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|99|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|99|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|103|error: no match for 'operator&&' (operand types are 'std::basic_string<char>' and 'std::basic_string<char>')|
    C:\Users\User\Desktop\backtracking\main.cpp|103|note: candidate is
    C:\Users\User\Desktop\backtracking\main.cpp|103|note: operator&&(bool, bool) <built-in>|
    C:\Users\User\Desktop\backtracking\main.cpp|103|note: no known conversion for argument 2 from 'std::basic_string<char>' to 'bool'|
    C:\Users\User\Desktop\backtracking\main.cpp|111|error: expected ']' before ')' token|
    C:\Users\User\Desktop\backtracking\main.cpp|111|error: expected initializer before ')' token|
    C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool AbsentSurColonne(std::string, std::string (*)[5], int)'
    C:\Users\User\Desktop\backtracking\main.cpp|32|warning: control reaches end of non-void function [-Wreturn-type]|
    C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool valide(std::string (*)[5], int, int)'
    C:\Users\User\Desktop\backtracking\main.cpp|109|warning: control reaches end of non-void function [-Wreturn-type]|
    ||=== Build failed: 15 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
    )

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Le problème, c'est que tu as confondu l'opérateur de comparaison ==, qui retourne (normalement) un bool, et l'opérateur d'affectation =, qui retourne (normalement) une référence sur l'élément de gauche, qui est modifié.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 216
    Par défaut
    je vois ce que tu veux dire mais par contre je ne vois pas comment modifier mon code pour que cela puisse dire la meme chose et fonctionner
    :/
    car on ne peut pas cree une variable "contrainte = ((maison[i][1]="anglais") && (maison[i][0]="rouge"))
    et dire apres
    if !(contrainte)

    si ?

    j avais mal lu ton message mdr :p
    j ai donc mis les == a la place des =

    donc ca ma enlever les premiere erreurs
    merci a toi

    j en suis donc a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    #include <iostream>
     
    using namespace std;
     
    //fonction d affichage
    void affichage ( string grille[5][5])
    {
        cout<<"------------------------------"<<endl;
        for(int i=0; i<5;i++) //on lis ligne par ligne
        {
            cout<<"|";
            for(int j =0 ; j < 5; j++) //on lis colonne par colonne
            {
                cout<<"  "<<grille[i][j]<<" | "; //permet de separer les block de maniere vertical
            }
            cout<<endl;
            cout<<"------------------------------"<<endl;
        }
        cout<<endl;
     
    }
    //nous allons avoir besoin de fonction pour tester si une valeur est bien abscente d une colonne
     
    bool AbsentSurColonne ( string k, string grille[5][5],int j)
    {
        for ( int i=0; i<5; i++)
        {
            if ( grille[i][j]==k)//si la valeur est deja presente sur la colonne
                return false;
            return true;
        }
    }
     
    // Prototype de la fonction
    // Cette fonction va recevoir une grille en entree et la reseoudre
     
    //nous devons constamment verifier que le choix fait en amont ne provoque pas de blocage en aval
     
    // on va doonc utiliser le retour de la fonction pour nous indiquer si la grille est valide ou non
    //enfin , comme notre fonction doit etre recursive, nous allonns ajouter un parametre pour savoir quelle case nous somme en train de trater
     
    //une case (i,j) dans un tableau peut etre representer par un nombre (i*largeur_tableau)+j, que nous nommerons position
     
    bool valide( string maison[5][5], int i ,int a )
    {
     
    //sur une même ligne: les valeurs doivent être différentes
      for(int k=0;k<i;k++)
       {
            if(maison[i][a]==maison[k][a])
                return false;
       }
     
        //On boit du lait dans la maison du milieu.
        if( !(maison[2][3]=="lait"))
            return false ;
     
    	//– L'Anglais habite la maison rouge
    	if( !((maison[i][1]=="anglais") && (maison[i][0]=="rouge")))
            return false ;
     
    	//– Le chien appartient à l'Espagnol.
    	if( !((maison[i][1]=="espagnol") && (maison[i][4]=="chien")))
            return false ;
     
    	//– On boit du café dans la maison verte.
    	if( !((maison[i][2]=="cafe") && (maison[i][0]=="verte")))
            return false  ;
     
    	//– L'Ukrainien boit du thé.
    	if( !((maison[i][1]=="ukrainien") && (maison[i][2]=="the")))
            return false;
     
    	//– La maison verte est à côté de la blanche, à droite.
    	if( !((maison[i][0]=="blanche") && (maison[i+1][0]=="verte")))
            return false ;
     
    	//– Le fumeur de Old Gold élève des escargots.
    	if( !((maison[i][4]=="escargots") && (maison[i][3]=="old")))
            return false;
     
    	//– On fume des Kool dans la maison jaune.
    	if( !((maison[i][3]=="kool") && (maison[i][0]=="jaune")))
            return false ;
     
    	//– Le fumeur de Chesterfield habite à côté du propriétaire du renard.
    	if( !((maison[i][3]=="chesterfield") && ((maison[i+1][4]=="renard") || (maison[i-1][4])=="renard" )))
            return false;
     
    	//– Le fumeur de Kool habite à côté du propriétaire du cheval.
    	if( !((maison[i][3]=="kool") && (( maison[i+1][4]=="chevale") || (maison[i-1][4]=="cheval"))))
            return false;
     
    	//– Le fumeur de gitanes boit du vin.
    	if( !((maison[i][2]=="vin") && (maison[i][3]=="gitane" )))
            return false ;
     
    	//– Le Japonais fume des Craven.
    	if( !((maison[i][3]=="craven") && (maison[i][1]=="japonais" )))
            return false;
     
    	//– Le Norvégien habite à côté de la maison bleue. et le norvegien habite la premiere maison a gauche
    	if( !((maison[0][1]=="norvegien") && (maison[1][0]=="bleu")))
            return false ;
     
    	else
            return true;
     
    }
     
    bool estValide (string grille[5][5], int position, string tableau[5),tableau [5])
    {
        // si on est a la 25eme case ( on sort du tableau)
        if(position == 5*5)
            return true;
     
        //on recupere les coordonnees de la case
        int i = position/5, j = position%5;
     
        //si la case n'est pas vide, on passe a la suivante ( appel recursif)
        if (grille[i][j] !="0")
            return estValide(grille, position +1, tableau[5]);
     
        //enumeration des valeurs possible
        for(int k = 0; k<5 ; k++)
        {
            //si la valeur est abscente ,et si elle repond au contrainte
            if(AbsentSurColonne(tableau[k],grille,i)&& valide )
            {
                //on enregistre dans la grille
                grille[i][j];
                // on appelle recursivement la fonction estValide(), pour voir si ce choix est bon par la suite
                if( est valide (grille, position+1,tableau[5]))
                    return true; //si le choix est bon, plus la peine de continuer on renvoie true
            }
        }
        //toutes les valeur ont ete testes, aucun n'est bon , on reinitialise la case
        grille[i][j] = "0";
        //puis on retourn faux
        return false;
    }
     
    int main ()
    {
        //avant tout, on donner les variable possible grace a des tableau
        string couleur [5] = {rouge,verte,jaune,bleu,blanche}
        string nationalite [5] = {anglais,espagnol,norvegien,japonais,ukrainien}
        string boisson [5]= {eau,the,cafe,vin,lait}
        string cigarette [5]= {craven,old,kool,chesterfiel,gitane}
        string animaux [5]= {zebre,renard,chien,cheval,escargots}
       //  nous allons prendre un exemple de grille pour pouvoir tester notre code
        //on cree un tableau en deux dimension
        //les grille vides etant representer par des 0
        int grille[5][5] =
        {
            {0,0,0,0,0},// couleur
            {0,0,0,0,0},//nationalite
            {0,0,0,0,0},//boisson
            {0,0,0,0,0},//cigarette
            {0,0,0,0,0}//animaux
     
        };
     
        cout <<"grille avant"<<endl;
     
        affichage(grille);
        estValide(grille,0,couleur);
        estValide(grille,0,nationalite);
        estValide(grille,0,boisson);
        estValide(grille,0,cigarette);
        estValide(grille,0,animaux);
        cout<<"grille apres"<<endl;
        affichage(grille);
    }
    et
    |
    ||=== Build: Debug in backtracking (compiler: GNU GCC Compiler) ===|
    C:\Users\User\Desktop\backtracking\main.cpp|111|error: expected ']' before ')' token|
    C:\Users\User\Desktop\backtracking\main.cpp|111|error: expected initializer before ')' token|
    C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool AbsentSurColonne(std::string, std::string (*)[5], int)'
    C:\Users\User\Desktop\backtracking\main.cpp|32|warning: control reaches end of non-void function [-Wreturn-type]|
    ||=== Build failed: 2 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|


  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( !((maison[i][1]=="anglais") && (maison[i][0]=="rouge") )) {
    Voire, avec une variable intermédiaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    auto const condition = (maison[i][1]=="anglais") && (maison[i][0]=="rouge");
    if (!condition) {
    (tu peux aussi la définir commme bool const. En fait, auto sera déduit en bool.

    Quant à ton dernier problème, en général ce sont des ; manquants.
    Regardes les lignes 146 et suivantes.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    std::vector et std::array non ?

    Quant à ton erreur, commence par la lire parce qu'elle est on ne peut plus explicite
    bool estValide (string grille[5][5], int position, string tableau[5),tableau [5])
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 216
    Par défaut
    pas le droit mdr ^^ sa serais trop simple sinon mdr :p

    par contre j ai réussi a réparer la majeur partis des erreurs a l'aide des message precedent, il ne reste plus que celle ci

    ||=== Build: Debug in backtracking (compiler: GNU GCC Compiler) ===|
    C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool estValide(std::string (*)[5], int, std::string*)'
    C:\Users\User\Desktop\backtracking\main.cpp|129|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string (*)[5] {aka std::basic_string<char> (*)[5]}' for argument '1' to 'bool estValide(std::string (*)[5], int, std::string*)'|
    C:\Users\User\Desktop\backtracking\main.cpp|135|warning: the address of 'bool valide(std::string (*)[5])' will always evaluate as 'true' [-Waddress]|
    C:\Users\User\Desktop\backtracking\main.cpp|138|warning: statement has no effect [-Wunused-value]|

    C:\Users\User\Desktop\backtracking\main.cpp|140|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_string<char>*}' for argument '3' to 'bool estValide(std::string (*)[5], int, std::string*)'|
    C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool AbsentSurColonne(std::string, std::string (*)[5], int)'
    C:\Users\User\Desktop\backtracking\main.cpp|32|warning: control reaches end of non-void function [-Wreturn-type]|
    C:\Users\User\Desktop\backtracking\main.cpp||In function 'bool valide(std::string (*)[5])'
    C:\Users\User\Desktop\backtracking\main.cpp|116|warning: control reaches end of non-void function [-Wreturn-type]|
    ||=== Build failed: 2 error(s), 4 warning(s) (0 minute(s), 0 second(s)) ===|
    et donc le code corriger donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
     
     
    #include <iostream>
     
    using namespace std;
     
    //fonction d affichage
    void affichage ( string grille[5][5])
    {
        cout<<"------------------------------"<<endl;
        for(int i=0; i<5;i++) //on lis ligne par ligne
        {
            cout<<"|";
            for(int j =0 ; j < 5; j++) //on lis colonne par colonne
            {
                cout<<"  "<<grille[i][j]<<" | "; //permet de separer les block de maniere vertical
            }
            cout<<endl;
            cout<<"------------------------------"<<endl;
        }
        cout<<endl;
     
    }
    //nous allons avoir besoin de fonction pour tester si une valeur est bien abscente d une colonne
     
    bool AbsentSurColonne ( string k, string grille[5][5],int j)
    {
        for ( int i=0; i<5; i++)
        {
            if ( grille[i][j]==k)//si la valeur est deja presente sur la colonne
                return false;
            return true;
        }
    }
     
    // Prototype de la fonction
    // Cette fonction va recevoir une grille en entree et la reseoudre
     
    //nous devons constamment verifier que le choix fait en amont ne provoque pas de blocage en aval
     
    // on va doonc utiliser le retour de la fonction pour nous indiquer si la grille est valide ou non
    //enfin , comme notre fonction doit etre recursive, nous allonns ajouter un parametre pour savoir quelle case nous somme en train de trater
     
    //une case (i,j) dans un tableau peut etre representer par un nombre (i*largeur_tableau)+j, que nous nommerons position
     
    bool valide( string maison[5][5])
    {
     
    //sur une même ligne: les valeurs doivent être différentes
        for(int k=0;k<5;k++)
        {
            for(int i=0;i<5;i++)
            {
                for(int a=0;a<5;a++)
                {
                    if(maison[i][a]==maison[k][a])
                    return false;
                }
     
        //On boit du lait dans la maison du milieu.
        if( !(maison[2][3]=="lait"))
            return false ;
     
    	//– L'Anglais habite la maison rouge
    	if( !((maison[i][1]=="anglais") && (maison[i][0]=="rouge")))
            return false ;
     
    	//– Le chien appartient à l'Espagnol.
    	if( !((maison[i][1]=="espagnol") && (maison[i][4]=="chien")))
            return false ;
     
    	//– On boit du café dans la maison verte.
    	if( !((maison[i][2]=="cafe") && (maison[i][0]=="verte")))
            return false  ;
     
    	//– L'Ukrainien boit du thé.
    	if( !((maison[i][1]=="ukrainien") && (maison[i][2]=="the")))
            return false;
     
    	//– La maison verte est à côté de la blanche, à droite.
    	if( !((maison[i][0]=="blanche") && (maison[i+1][0]=="verte")))
            return false ;
     
    	//– Le fumeur de Old Gold élève des escargots.
    	if( !((maison[i][4]=="escargots") && (maison[i][3]=="old")))
            return false;
     
    	//– On fume des Kool dans la maison jaune.
    	if( !((maison[i][3]=="kool") && (maison[i][0]=="jaune")))
            return false ;
     
    	//– Le fumeur de Chesterfield habite à côté du propriétaire du renard.
    	if( !((maison[i][3]=="chesterfield") && ((maison[i+1][4]=="renard") || (maison[i-1][4])=="renard" )))
            return false;
     
    	//– Le fumeur de Kool habite à côté du propriétaire du cheval.
    	if( !((maison[i][3]=="kool") && (( maison[i+1][4]=="chevale") || (maison[i-1][4]=="cheval"))))
            return false;
     
    	//– Le fumeur de gitanes boit du vin.
    	if( !((maison[i][2]=="vin") && (maison[i][3]=="gitane" )))
            return false ;
     
    	//– Le Japonais fume des Craven.
    	if( !((maison[i][3]=="craven") && (maison[i][1]=="japonais" )))
            return false;
     
    	//– Le Norvégien habite à côté de la maison bleue. et le norvegien habite la premiere maison a gauche
    	if( !((maison[0][1]=="norvegien") && (maison[1][0]=="bleu")))
            return false ;
     
    	else
            return true;
     
            }
       }
     
    }
     
    bool estValide (string grille[5][5], int position, string tableau[5])
    {
        // si on est a la 25eme case ( on sort du tableau)
        if(position == 5*5)
            return true;
     
        //on recupere les coordonnees de la case
        int i = position/5, j = position%5;
     
        //si la case n'est pas vide, on passe a la suivante ( appel recursif)
        if (grille[i][j] !="0")
            return estValide(grille[5][5], position +1, tableau[5]);
     
        //enumeration des valeurs possible
        for(int k = 0; k<5 ; k++)
        {
            //si la valeur est abscente ,et si elle repond au contrainte
            if(AbsentSurColonne(tableau[k],grille,i)&& valide )
            {
                //on enregistre dans la grille
                grille[i][j];
                // on appelle recursivement la fonction estValide(), pour voir si ce choix est bon par la suite
                if( estValide (grille, position+1,tableau[5]))
                    return true; //si le choix est bon, plus la peine de continuer on renvoie true
            }
        }
        //toutes les valeur ont ete testes, aucun n'est bon , on reinitialise la case
        grille[i][j] = "0";
        //puis on retourn faux
        return false;
    }
     
    int main ()
    {
        //avant tout, on donner les variable possible grace a des tableau
        string couleur [5] = {"rouge","verte","jaune","bleu","blanche"};
        string nationalite [5] = {"anglais","espagnol","norvegien","japonais","ukrainien"};
        string boisson [5]= {"eau","the","cafe","vin","lait"};
        string cigarette [5]= {"craven","old","kool","chesterfiel","gitane"};
        string animaux [5]= {"zebre","renard","chien","cheval","escargots"};
       //  nous allons prendre un exemple de grille pour pouvoir tester notre code
        //on cree un tableau en deux dimension
        //les grille vides etant representer par des 0
        string grille[5][5] =
        {
            {"0","0","0","0","0"},// couleur
            {"0","0","0","0","0"},//nationalite
            {"0","0","0","0","0"},//boisson
            {"0","0","0","0","0"},//cigarette
            {"0","0","0","0","0"}//animaux
     
        };
     
        cout <<"grille avant"<<endl;
     
        affichage(grille);
        estValide(grille,0,couleur);
        estValide(grille,0,nationalite);
        estValide(grille,0,boisson);
        estValide(grille,0,cigarette);
        estValide(grille,0,animaux);
        cout<<"grille apres"<<endl;
        affichage(grille);
    }

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 216
    Par défaut
    bon j ai réussi a résoudre toutes les erreurs
    mais le soucis est que mon code compile mais ne fait rien du tout mdr ^^' il ne modifie pas mon tableau bidimensionnelle
    et l affichage me donne donc le mm tableau avant et apres

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 06/11/2017, 21h58
  2. Problème Erreur de compilation "For Sans Next"
    Par lesly94 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/07/2015, 09h12
  3. Problème! Erreur de compilation Caml.
    Par jocven dans le forum Caml
    Réponses: 6
    Dernier message: 09/01/2012, 00h19
  4. PRoblème erreur compilation
    Par cricri77200 dans le forum Langage
    Réponses: 1
    Dernier message: 23/04/2009, 14h22
  5. maven 2 problème erreur de compilation
    Par jigz77 dans le forum Maven
    Réponses: 5
    Dernier message: 02/08/2007, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo