Aide en c++

Fermé
loicam - 10 janv. 2012 à 10:19
 loicam - 10 janv. 2012 à 15:16
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
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 :)
1
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
10 janv. 2012 à 12:32
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
10 janv. 2012 à 13:19
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
10 janv. 2012 à 13:47
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
10 janv. 2012 à 13:54
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
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:

using namespace std;


Et la tu peux directement faire ca par exemple

cout << "Hello World" << endl;
0
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
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:

#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
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
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
0
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
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.
0
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