Aide pour un programme en c++

Résolu
ketty -  
 ketty -
Bonjour,

J' ai un programme en c++ à faire et je voudrais conjuguer les verbes du 1 er groupe au present à l imparfait et au passe simple de l indicatif . J ai du mal à savoir quels caractères il faut que je mette . Est ce que vous pouvez m aidez svp!
j ai deja commencer un peu mais c' est que le début !! :

#include <cstring>
#include <iostream>
using namespace std;

int main()
{
char n[20];
cout << "tapez un verbe de premier groupe : ";
cin >> n;
int i;

i = strlen(n );
if (i<=2 ||n[i-1]!='r' || n[i-2]!='e')
cout << "le verbe n est pas du premier groupe" << endl;
else
{
n[i-2]='\0';
cout << " je " << n << "e" << endl;
cout << " tu " << n << "es" << endl;
cout << " il " << n << "e" << endl;
cout << " nous " << n << "ons" << endl;
cout << " vous " << n << "ez" << endl;
cout << "ils " << n << " ent " << endl;
else
}
{
cout << " je " << n << "ais" << endl;
cout << " tu " << n << "ait" << endl;
cout << " il " << n << "ais" << endl;
cout << " nous " << n << "ions" << endl;
cout << " vous " << n << "iez" << endl;
cout << "ils " << n << " aient " << endl;
else
}
{
cout << " je " << n << "ai" << endl;
cout << " tu " << n << "as" << endl;
cout << " il " << n << "a" << endl;
cout << " nous " << n << "ames" << endl;
cout << " vous " << n << "ates" << endl;
cout << "ils " << n << " èrent " << endl;
else
}
{
if("present de l indicatif")
cout << "tapez comme temps le présent de l'indicatif " << endl;
}
{
if(" imparfait de l indicatif")
cout << " tapez comme temps l' imparfait de l'indicatif" << endl;
}
{
if(" passe simple de l indicatif")
cout << " tapez comme temps le passé simple de l'indicatif " << endl;
}

}
return 0;
}
Dites moi ce qu'il ne va pas merci!!

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    1) Quelques petites remarques :
    - attention au verbe aller comme le souligne alphatratz à juste titre
    - les conseils de char snipeur sont justes même si la solution de char * reste tout à fait valable (voir ci dessous l'approche C++ avec std::string). Il a juste fait un petit abus de langage, on peut (et c'est complètement juste et pas ambigu) mettre autre chose qu'un bool dans un if(...) (d'autant plus en C que le type bool n'existe pas. Dans ce cas tout ce qui est différent de 0 ou NULL est considéré comme vrai.

    Exemple :

    unsigned num_joueurs;     
    std::cout << "Nombre de joueurs ?"     
    std::cin >> num_joueurs;     
    if(num_joueurs){     
       std::cout << "Il y a au moins un joueur << std::endl;     
    } else {     
       std::cout << "Il y a 0 joueur << std::endl;     
    }


    Mais par contre, tes tests ne faisaient pas du tout ce que tu croyais. Concrètement, écrire :

    if("toto")


    ... revient à vérifier si l'adresse de la chaîne "toto" est non nulle, ce qui sera toujours vrai.

    2) Tu peux éviter de réecrire std::cout << ... << std::endl; en les chaînant, ce qui en plus est plus efficace.

    Exemple :

    std::cout << "tata" << std::endl     
        << "titi" << std::endl     
        << "toti" << std::endl;


    3) Autre erreur, en C/C++ une chaîne est entre "..." et non entre '...' (les simples quotes servent pour décrire un caractère) :

    Exemple :

    char c = 'x';     
    const char *s = "coucou";


    4) Voici par exemple ce que tu pourrais écrire :

    #include <vector>   
    #include <map>   
    #include <string>   
    #include <iostream>   
    
    typedef enum _enum_personnes_t{   
        SINGULIER_1 = 0,   
        SINGULIER_2,   
        SINGULIER_3,   
        PLURIEL_1,   
        PLURIEL_2,   
        PLURIEL_3,   
        NUM_PERSONNES   
    } enum_personnes_t;   
    
    typedef enum _enum_temps_t{   
        INDICATIF_PRESENT = 0,   
        INDICATIF_IMPARFAIT,   
        // ajoute les autres temps ici...   
        NUM_TEMPS   
    } enum_temps_t;   
    
    typedef std::vector<std::string> personnes_t;   
    typedef std::vector<std::string> temps_t;   
    typedef std::vector<std::vector<std::string> > terminaisons_t;   
    
    personnes_t get_personnes() {   
        std::vector<std::string> personnes(NUM_PERSONNES);   
        personnes[SINGULIER_1] = "je";   
        personnes[SINGULIER_2] = "tu";   
        personnes[SINGULIER_3] = "il, elle, on";   
        personnes[PLURIEL_1]   = "nous";   
        personnes[PLURIEL_2]   = "vous";   
        personnes[PLURIEL_3]   = "ils, elles";   
        return personnes;   
    }   
    
    temps_t get_temps() {   
        std::vector<std::string> temps(NUM_TEMPS);   
        temps[INDICATIF_PRESENT]   = "Présent de l'indicatif";   
        temps[INDICATIF_IMPARFAIT] = "Imparfait de l'indicatif";   
        return temps;   
    }   
    
    terminaisons_t get_terminaisons() {   
        std::vector<std::vector<std::string> > terminaisons(   
            NUM_TEMPS,   
            std::vector<std::string>(NUM_PERSONNES)   
        );   
    
        // Présent de l'indicatif   
        terminaisons[INDICATIF_PRESENT][SINGULIER_1] = "e";   
        terminaisons[INDICATIF_PRESENT][SINGULIER_2] = "es";   
        terminaisons[INDICATIF_PRESENT][SINGULIER_3] = "e";   
        terminaisons[INDICATIF_PRESENT][PLURIEL_1]   = "ons";   
        terminaisons[INDICATIF_PRESENT][PLURIEL_2]   = "ez";   
        terminaisons[INDICATIF_PRESENT][PLURIEL_3]   = "ent";   
    
        // Imparfait de l'indicatif   
        terminaisons[INDICATIF_IMPARFAIT][SINGULIER_1] = "ais";   
        terminaisons[INDICATIF_IMPARFAIT][SINGULIER_2] = "ais";   
        terminaisons[INDICATIF_IMPARFAIT][SINGULIER_3] = "ait";   
        terminaisons[INDICATIF_IMPARFAIT][PLURIEL_1]   = "ions";   
        terminaisons[INDICATIF_IMPARFAIT][PLURIEL_2]   = "iez";   
        terminaisons[INDICATIF_IMPARFAIT][PLURIEL_3]   = "aient";   
    
        // etc...   
    
        return terminaisons;   
    }   
    
    int main(){   
        // Initialisation du programme   
        temps_t        temps        = get_temps();   
        personnes_t    personnes    = get_personnes();   
        terminaisons_t terminaisons = get_terminaisons();   
    
        // Saisie du verbe   
        std::string verbe;   
        do {   
            std::cout << "Veuillez saisir un verbe du 1er groupe" << std::endl;   
            std::cin >> verbe;   
        } while(verbe == "aller" || verbe.rfind("er") + 2 != verbe.length());   
    
        // Saisie du temps    
        unsigned idx_temps;   
        do {   
            std::cout << "Veuillez saisir un temps" << std::endl;   
            for(std::size_t i = 0 ; i < NUM_TEMPS; ++i) {   
                std::cout << i << ") " << temps[i] << std::endl;   
            }   
            std::cin >> idx_temps;   
        } while(idx_temps >= NUM_TEMPS);   
    
        std::string base(verbe, 0, verbe.length() - 2);   
    
        // On conjugue   
        std::cout << temps[idx_temps] << std::endl;   
        for(std::size_t i = 0 ; i < NUM_PERSONNES; ++i) {   
            std::cout << personnes[i] << ' ' << base   
                  << terminaisons[idx_temps][i] << std::endl;   
        }   
        return 0;   
    }


    .. ce qui donne :

    Veuillez saisir un verbe du premier groupe     
    marcher     
    Veuillez saisir un temps     
    0) Présent de l'indicatif     
    1) Imparfait de l'indicatif     
    1     
    Imparfait de l'indicatif     
    je marchais     
    tu marchais     
    il, elle, on marchait     
    nous marchions     
    vous marchiez     
    ils, elles marchaient 


    ... et :

    Veuillez saisir un verbe du premier groupe     
    marcher     
    Veuillez saisir un temps     
    0) Présent de l'indicatif     
    1) Imparfait de l'indicatif     
    0     
    Présent de l'indicatif     
    je marche     
    tu marches     
    il, elle, on marche     
    nous marchons     
    vous marchez     
    ils, elles marchent


    Bonne chance
    2
  2. jenaimarre2fr
     
    bonjour,
    je vais juste esayer de te mettre sur les bonnes raies..... :)
    pour les terminaisons present, passé simple........, crées plutot des tableaux ou tu vas mattre toutes tes terminaison, mais d'abord, crées d'abord une classe, par exemple:

    class conjugaison{
    public://variables membres
    char present[8]={'e','es','e','e','ons','ez','ent','ent'};
    char passe-simple[8]...........
    ..............................................
    char qui[8]={'je','tu','il','elle','nous','vous','ils','elles'};
    char* verbe; //pou recuperer l'adresse du verbe qu'on souhaite conjuguer
    char* temps; //pour recuperer l'adresse du temps auquel on souhaite conjuguer

    //fonction membre
    public:
    void conjuguer(void);
    char sans_terminaison(void); //renvoit le verbe sans terminaison (er....)
    void lire_verbe_temps(void);
    }//fin class

    void main (void){
    conjugaison A;
    //tu dois d'abord acquérir le verbe et le temps en appelant :
    A.lire_verbe_temps();
    //puis conjugaison
    A.conjuguer();
    }//fin main

    void conjugaison::lire_verbe_temps(void){

    cout<<entrer le verbe<<endl;
    cin<<this->verbe;

    cout<<entrer le temps<<endl;
    cin<<this->temps;
    }

    void conjugaison::conjuguer(void){
    for(int i=0;i<8,i++){
    cout<<qui[i]<<" "<<sans_terminaison()<<present[i]<<endl;
    }
    for(int i=0;i<8,i++){
    cout<<qui[i]<<" "<<sans_terminaison()<<passer_simple[i]<<endl;
    }
    //........meme chose pour les autre temps

    }//fin

    char conjugaison::sans_terminaison(void){
    //la tu dois renvoyer le verbe sans terminaison
    //excuse moi j'ai pas trop le temps, je dois aller a l'ecole
    //si t'as besoin de plus d'aide pour cette partie, n'hesite pas a me le demander...
    }

    bon courage pour la suite;)
    1
    1. jenaimarre2fr
       
      juste une petite rectification, temps et verbe ne sont pas des pointeurs sur char, mais des variables char ordinaire, sinon tu peux utiliser string au lieu de char comme te l'as suggerer char sniper
      0
  3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    d accord avec jenaimarre2fr dans l'ensemble. Juste peut être que comme tu fais du C++ au lieu d'utiliser les char* utilise les std::string, ça évite de se poser des questions de dimension.
    Les grosses erreurs dans ton code :
    seulement un else par if.
    éviter de mettre autre chose que des valeurs booléenne dans les if (là tu mets au final un pointeur, ça n'a pas de sens).
    1
  4. Alpharatz Messages postés 168 Statut Membre 52
     
    Désolé de ne pas pouvoir t'aider car je ne connais pas trop le codage, mais je sais que dans la plupart des correcteurs orthographiques amateurs, l'erreur se trouve au verbe ALLER qui n'est pas au premier groupe !!!

    Bonne chance
    Cordialement
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ketty
     
    Merci beaucoup pour votre aide !! :)
    0