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 algo anagrame


Sujet :

C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Concepteur 3D
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Concepteur 3D
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Par défaut Problème algo anagrame
    Bonjour,

    Je suis toute nouvelle dans l'apprentissage du C++.
    Sur un TP d'un site connu j'ai été amenée à réaliser deux codes très basiques de C++. Ces deux codes feront rire les professionnels de ce forum mais pour moi c'est un démarrage essentiel. Je me suis débrouillée toute seule et les deux codes fonctionnent parfaitement ( même si cela m'a pris beaucoup de temps ). Ainsi, j'ai pensé que j'étais faite pour la programmation. Je pense avoir un esprit logique sinon je n'aurais pas pu avancer.

    Le premier code consiste à bouleverser l'ordre des lettres d'un mot et le transformer en anagramme.

    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
     
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    #include <fstream>
     
    using namespace std;
     
    string fonctionMelange (string motMystere)
    {
        string melange ;
        int x(0);
        int nombreAleatoire(0);
        int nombreDeLettres(0) ;
     
        nombreDeLettres = motMystere.size() ;
        for (x = 0 ; x < nombreDeLettres ; x++)
        {
            nombreAleatoire = rand() % motMystere.size() ;
            melange += motMystere[nombreAleatoire] ;
            motMystere.erase(nombreAleatoire,1) ;
        }
        return melange ;
    }
     
    int main()
    {
        srand (time(0)) ;
        string leMotMystere, motMelange, motUtilisateur;
        cout <<"Saisissez un mot "<< endl ;
        cin >> leMotMystere ;  // saisie du mot mystère
        cout << leMotMystere << endl ;
        motMelange = fonctionMelange(leMotMystere) ;
     
        do
        {
            cout << motMelange << endl ;
            cout <<" ? " << endl ;
            cin >> motUtilisateur ;
            if ( motUtilisateur == leMotMystere)
            {
                cout <<"C'est le mot juste, bravo !" << endl ;
            }
            else
            {
                cout <<"Ce n'est pas le mot " << endl ;
            }
        } while ( motUtilisateur != leMotMystere ) ;
        return 0;
    }
    Le second code est simple aussi, il prend un mot au hasard dans une liste de mots ( un fichier ). Je l'ai mis en pièce jointe dans ce message.

    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
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    #include <fstream>
     
    using namespace std;
     
    int main()
    {
        srand (time(0)) ;
        ifstream fichier("dico2.txt") ;
        string ligne ;
     
        if(fichier)
        {
            int a (0), b(0) ;
            int nombreAleatoire(0);
            while ( getline( fichier, ligne))
            {
                a++ ;
            }
            fichier.clear() ;
            fichier.seekg(0,ios::beg) ;
            cout << "a : " << a << endl ;
     
            nombreAleatoire = rand () % a ;
            cout << "nombre aleatoire : " << nombreAleatoire << endl ;
     
            for( b=0 ; b < nombreAleatoire ; b++)
            {
                getline( fichier, ligne) ;
            }
            cout << ligne << endl ;
        }
        else
        {
            cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
        }
        return 0;
    }
    Si vous les essayez, vous verrez que mes deux codes fonctionnent parfaitement.
    Maintenant, j'associe les deux codes en un seul. Au lieu d'écrire un mot dont l'ordre des lettres sera changé, j'automatise la recherche aléatoire d'un mot dans la liste. Rien de plus basique ! Ensuite, l'ordre des lettre sera changé.
    J'ai dû ajouter la ligne 78 pour rapporter la chaîne string de la liste et la rendre compréhensible pour la suite du programme.
    Tout va bien ! C'est la partie la plus simple comparée à trouver les codes de chaque fonction.

    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
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    #include <fstream>
     
    using namespace std;
     
    string fonctionMelange (string motMystere)
    {
        string melange ;
        int x(0);
        int nombreAleatoire(0);
        int nombreDeLettres(0) ;
     
        nombreDeLettres = motMystere.size() ;
        for (x = 0 ; x < nombreDeLettres ; x++)
        {
            nombreAleatoire = rand() % motMystere.size() ;
            melange += motMystere[nombreAleatoire] ;
            motMystere.erase(nombreAleatoire,1) ;
        }
        return melange ;
    }
     
    int main()
    {
        srand (time(0)) ;
        string leMotMystere, motMelange, motUtilisateur;
        //cout <<"Saisissez un mot "<< endl ;
        ifstream fichier("dico2.txt") ;
        string ligne ;
        if(fichier)
        {
            int a (0), b(0) ;
            int nombreAleatoire(0);
            while ( getline( fichier, ligne))
            {
                a++ ;
            }
            fichier.clear() ;
            fichier.seekg(0,ios::beg) ;
            cout << "a : " << a << endl ;
            nombreAleatoire = rand () % a ;
            cout << "nombre aleatoire : " << nombreAleatoire << endl ;
     
            for( b=0 ; b < nombreAleatoire ; b++)
            {
                getline( fichier, ligne) ;
            }
            leMotMystere = ligne ;
            //
        }
        else
        {
            cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
        }
        //cin >> leMotMystere ;  // saisie du mot mystère
        cout << leMotMystere << endl ;
        motMelange = fonctionMelange(leMotMystere) ;
     
        do
        {
            cout << motMelange << endl ;
            cout <<" ? " << endl ;
            cin >> motUtilisateur ;
            if ( motUtilisateur == ligne )
            {
                cout <<"C'est le mot juste, bravo !" << endl ;
            }
            else
            {
                cout <<"Ce n'est pas le mot " << endl ;
            }
        } while ( motUtilisateur != leMotMystere ) ;
        return 0;
    }

    Tout devrait logiquement bien se passer ! Eh bien non, rien ne se passe comme prévu. Sous prétexte que l'origine du mot dont on change les lettres n'est plus la même ( un fichier au lieu de la fonction cin ) on obtient du n'importe quoi :
    Le mot mélangé est tronqué.
    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( motUtilisateur == ligne )
    ne marche plus puisque les deux variables sont absolument identiques mais le programme ne reconnait plus cette égalité. Ben voyons. Où est la logique là dedans ?
    Je croyais que le point fort du C++ c'était d'être logique. Je ne suis plus capable de comprendre ce qui m'arrive mais je suis dévastée. Face à un problème qui me dépasse alors que vous avez réussi à atteindre les sommets, je vais abandonner le C++

    Quelqu'un peut m'expliquer pourquoi ça ne marche pas ?
    Je vous remercie d'avance
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Poker - Problème Algo
    Par xinu1.1 dans le forum Langage
    Réponses: 9
    Dernier message: 17/06/2009, 16h54
  2. Problème algo [calcul de moyenne]
    Par Nathan66 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 05/10/2008, 08h15
  3. [Tableaux] Problème algo récursif
    Par Invité dans le forum Langage
    Réponses: 38
    Dernier message: 03/10/2006, 15h49
  4. problème algo
    Par petitgato dans le forum C
    Réponses: 1
    Dernier message: 17/03/2006, 12h32
  5. Problème algo de parcour de graphe
    Par goblin dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2005, 15h04

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