Aide pour un programme en c++
Résolu/Fermé
A voir également:
- Aide pour un programme en c++
- Programme demarrage windows 10 - Guide
- Desinstaller un programme - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Programme démarrage windows 10 - Guide
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
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 :
Mais par contre, tes tests ne faisaient pas du tout ce que tu croyais. Concrètement, écrire :
... 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 :
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 :
4) Voici par exemple ce que tu pourrais écrire :
.. ce qui donne :
... et :
Bonne chance
- 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
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;)
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;)
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
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).
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).
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
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
Bonne chance
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question