Aide pour un programme en c++

Résolu/Fermé
ketty - Modifié par ketty le 5/01/2012 à 21:31
 ketty - 7 janv. 2012 à 15:29
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

mamiemando Messages postés 33262 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 septembre 2024 7 777
Modifié par mamiemando le 6/01/2012 à 21:37
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
jenaimarre2fr
6 janv. 2012 à 07:26
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
jenaimarre2fr
6 janv. 2012 à 19:01
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
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
6 janv. 2012 à 12:34
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
Alpharatz Messages postés 139 Date d'inscription mercredi 4 janvier 2012 Statut Membre Dernière intervention 13 août 2013 52
5 janv. 2012 à 21:22
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup pour votre aide !! :)
0