Aide en c++

loicam -  
 loicam -
Bonjour,
j aimerais savoir ce que signifie cette fin de programme. Est ce que vous pouvez m aider. merci :



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());


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);


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;
}

4 réponses

matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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 :)
1
loicam
 
ok et ca sers à quoi de mettre std:: cout ou tt court std:: on peut pas laisser seulement cout ou string base ou bien encore cin ?
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
tu as tout faut pour le premier while, c'est :
demander à saisir un verbe du premier groupe tant que ce verbe est "aller" ou qu'il ne fini pas par "er".
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
Et j'ai ecris quoi ?
Tu viens de dire exactement ce que j'ai dit en inversant les conditions mdr
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
de mémoire, tu disait que la condition sur "aller" ne servait à rien. Mais je vois que tu as modifié 2 fois le message depuis.
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
Mouais enfin j'ai rectifie ce matin a 11h, j'avais lu en diagonale vu que j'etais presse, ton message date d'1h30 apres.
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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:

using namespace std;


Et la tu peux directement faire ca par exemple

cout << "Hello World" << endl;
0
loicam
 
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);
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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:

#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 ?
0
loicam
 
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;
}
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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
0
loicam
 
ok d'accord et sinon on peut pas ecrire le programme plus simplement en evitant les enumerations et # include vector et map parce que tt ca je ne l ai pas vu encore en cours !?
0
matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
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.
0
loicam
 
non en fait on m'a aidé ! lol c pour ca que je ne le comprend pas vraiment surtt que je vais devoir l expliquer en cours :/
0