Aide en c++

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

  1. 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
    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
    2. Contributeur
      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
    3. Et j'ai ecris quoi ?
      Tu viens de dire exactement ce que j'ai dit en inversant les conditions mdr
      0
    4. Contributeur
      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
    5. 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
  2. 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
    1. 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
      1. 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
        1. 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
        2. 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
        3. 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
        4. 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
        5. 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