4 réponses
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
Modifié par matthoffman le 10/01/2012 à 11:04
Modifié par matthoffman le 10/01/2012 à 11:04
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());
Cette partie demande a l'utilisateur "Veuillez saisir un verbe du 1er groupe" tant que celui ci ne fourni pas un verbe qui se termine par "er" ou s'il donne le verbe "aller" (car il n'est pas du 1er groupe :))
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);
Ensuite tu demandes a l'utilisateur de saisir un temps parmi la liste de temps que tu lui propose (elle s'affiche a l'ecran).
Des lors l'utilisateur rentre le numero du temps correspondant (par rapport a la liste que tu lui as fourni)
Et tu fais ceci tant que l'index rentre par l'utilisateur n'est pas valide, d'ailleurs il manque une condition pour gerer un cas d'erreur:
while(idx_temps >= NUM_TEMPS && idx_temps < 0);
std::string base(verbe, 0, verbe.length() - 2);
La tu enregistres le radical de ton verbe (donc ton verbe sans "er" a la fin) dans la chaine de caractere base.
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; }
Enfin tu conjugues ton verbe a toutes les personnes en allant chercher dans ton tableau "terminaisons", les terminaisons du temps precedemment donne, ou elles sont enregistrees pour chaque personne
Voila :)
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
10 janv. 2012 à 11:29
10 janv. 2012 à 11:29
std c'est le nom du namespace ou se trouvent les objets cout, cin, etc
std::cout corresponds a la sortie standard
std::cin corresponds a l'entree standard
std::cerr corresponds a la sortie d'erreur
...
Tu dois mettre std:: pour preciser le namespace ou se trouvent les objets sinon il ne trouvera pas ou les objets sont (sauf s'ils sont dans le namespace courant).
Si tu veux faire un raccourci et ne pas ecrire a chaque fois std:: et ecrire cout et cin directement alors il faut que tu mettes cette ligne au debut:
Et la tu peux directement faire ca par exemple
std::cout corresponds a la sortie standard
std::cin corresponds a l'entree standard
std::cerr corresponds a la sortie d'erreur
...
Tu dois mettre std:: pour preciser le namespace ou se trouvent les objets sinon il ne trouvera pas ou les objets sont (sauf s'ils sont dans le namespace courant).
Si tu veux faire un raccourci et ne pas ecrire a chaque fois std:: et ecrire cout et cin directement alors il faut que tu mettes cette ligne au debut:
using namespace std;
Et la tu peux directement faire ca par exemple
cout << "Hello World" << endl;
oui je viens d essayer mais ca ne marche pas il y a une erreur :
personnes_t get_personnes() { <=ici il y a une erreur
vector < string> personnes(NUM_PERSONNES);
personnes_t get_personnes() { <=ici il y a une erreur
vector < string> personnes(NUM_PERSONNES);
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
10 janv. 2012 à 12:00
10 janv. 2012 à 12:00
En meme temps ca n'as rien a voir avec le bout de code que tu m'as donne ca ... ton probleme vient d'ailleurs, car je t'assure que ca, ca marche:
Quelle est ton erreur exactement ?
Est ce que ton programme fonctionne quand tu mets les std:: ?
Peux tu nous montrer la fonction en entier, et son appel ?
#include <iostream> using namespace std; int main () { cout << "Hello World!" << endl; return 0; }
Quelle est ton erreur exactement ?
Est ce que ton programme fonctionne quand tu mets les std:: ?
Peux tu nous montrer la fonction en entier, et son appel ?
oui la ca marche en fait !!
et si je veut rajouter un autre temps je modifie :
#include <vector>
#include <map>
#include <string>
#include <iostream>
using namespace std;
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... <=ici
NUM_TEMPS
} enum_temps_t;
typedef vector<string> personnes_t;
typedef vector < string> temps_t;
typedef vector < vector< string> > terminaisons_t;
personnes_t get_personnes() {
vector < 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() {
vector < string> temps(NUM_TEMPS);
temps[INDICATIF_PRESENT] = "Présent de l'indicatif";
temps[INDICATIF_IMPARFAIT] = "Imparfait de l'indicatif"; < =ici
return temps;
}
terminaisons_t get_terminaisons() {
vector < vector < string> > terminaisons(
NUM_TEMPS,
vector < 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... <=ici
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
string verbe;
do {
cout << "Veuillez saisir un verbe du 1er groupe" << endl;
cin >> verbe;
} while(verbe == "aller" || verbe.rfind("er") + 2 != verbe.length());
// Saisie du temps
unsigned idx_temps;
do {
cout << "Veuillez saisir un temps" << endl;
for( size_t i = 0 ; i < NUM_TEMPS; ++i) { <= et par la il faut que je change quoi ?
cout << i << ") " << temps[i] << endl;
}
cin >> idx_temps;
} while(idx_temps >= NUM_TEMPS && idx_temps < 0);
string base(verbe, 0, verbe.length() - 2);
// On conjugue
cout << temps[idx_temps] << endl;
for( size_t i = 0 ; i < NUM_PERSONNES; ++i) {
cout << personnes[i] << ' ' << base << terminaisons[idx_temps][i] << endl;
}
return 0;
}
et si je veut rajouter un autre temps je modifie :
#include <vector>
#include <map>
#include <string>
#include <iostream>
using namespace std;
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... <=ici
NUM_TEMPS
} enum_temps_t;
typedef vector<string> personnes_t;
typedef vector < string> temps_t;
typedef vector < vector< string> > terminaisons_t;
personnes_t get_personnes() {
vector < 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() {
vector < string> temps(NUM_TEMPS);
temps[INDICATIF_PRESENT] = "Présent de l'indicatif";
temps[INDICATIF_IMPARFAIT] = "Imparfait de l'indicatif"; < =ici
return temps;
}
terminaisons_t get_terminaisons() {
vector < vector < string> > terminaisons(
NUM_TEMPS,
vector < 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... <=ici
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
string verbe;
do {
cout << "Veuillez saisir un verbe du 1er groupe" << endl;
cin >> verbe;
} while(verbe == "aller" || verbe.rfind("er") + 2 != verbe.length());
// Saisie du temps
unsigned idx_temps;
do {
cout << "Veuillez saisir un temps" << endl;
for( size_t i = 0 ; i < NUM_TEMPS; ++i) { <= et par la il faut que je change quoi ?
cout << i << ") " << temps[i] << endl;
}
cin >> idx_temps;
} while(idx_temps >= NUM_TEMPS && idx_temps < 0);
string base(verbe, 0, verbe.length() - 2);
// On conjugue
cout << temps[idx_temps] << endl;
for( size_t i = 0 ; i < NUM_PERSONNES; ++i) {
cout << personnes[i] << ' ' << base << terminaisons[idx_temps][i] << endl;
}
return 0;
}
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
10 janv. 2012 à 14:45
10 janv. 2012 à 14:45
for( size_t i = 0 ; i < NUM_TEMPS; ++i) { <= et par la il faut que je change quoi ?
Tu n'as rien a changer ici, car lorsque tu ajoutes un temps dans ton enum, NUM_TEMPS s'incremente automatiquement (mais attention a le laisser bien a la fin de ton enum).
Du coup tu vas boucler de 0, jusqu'a NUM_TEMPS et donc tu vas afficher tous les temps de ton enum, donc rien a changer
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
10 janv. 2012 à 15:05
10 janv. 2012 à 15:05
Ba si tu l'as fait c'est que tu sais le faire non ?? ^^
Sinon il y a d'autre moyen, au lieu d'utiliser les vector tu utilises les "[]", quant aux map tu l'a ajoute dans ton include mais tu n'utilises aucune map de ce que j'ai vu de ton code. tu peux virer l'include <map>.
Enfin pour les enumerations, si tu ne veux pas les utiliser tu peux passer par la declarations de constantes.
Sinon il y a d'autre moyen, au lieu d'utiliser les vector tu utilises les "[]", quant aux map tu l'a ajoute dans ton include mais tu n'utilises aucune map de ce que j'ai vu de ton code. tu peux virer l'include <map>.
Enfin pour les enumerations, si tu ne veux pas les utiliser tu peux passer par la declarations de constantes.
10 janv. 2012 à 11:10
10 janv. 2012 à 12:32
demander à saisir un verbe du premier groupe tant que ce verbe est "aller" ou qu'il ne fini pas par "er".
10 janv. 2012 à 13:19
Tu viens de dire exactement ce que j'ai dit en inversant les conditions mdr
10 janv. 2012 à 13:47
10 janv. 2012 à 13:54