Prg pour conjugaison en C
tonguim
-
JSS Messages postés 3745 Date d'inscription Statut Contributeur Dernière intervention -
JSS Messages postés 3745 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
cette fois, je suis en train d'ecrire un programme en C qui conjugue au present de l'indicatif un verbe du premier groupe (c'est a dire en 'er') saisi au clavier. Mon but est de manier les fonctions gets, puts, strlen et strcat.
Mon programme ne s'execute pas. Merci de m'aider s'il vous plaît.
Voici mon code:
#include <stdio.h>
#include <string.h>
main ()
{
char mot [26], racine [26];
int i = 0, j = 0, num_pronom;
printf ("Veuillez entrer un mot: ");
gets (mot);
//for (i=0; i <= strlen (mot); i++)
//{
if (mot[strlen(mot)] == 'r' && mot[strlen(mot)-1] == 'e') //si les 2 derniers caracteres du mots sont 'er'
{
for (j=0; j <= strlen(mot)-2; j++) //je laisse tomber la chaine "er"
racine[j] = mot[i]; //et je met le reste dans racine
for (j = 0; j <= strlen (racine); j++)
for (num_pronom = 0; num_pronom <= 5; num_pronom++) // pronom je = num 1; tu = 2; etc.
switch (num_pronom)
{
case 1: printf ("je"); printf ("%s", racine); printf ("e");
break;
case 2: printf ("tu"); printf ("%s", racine); printf ("es");
break;
case 3: printf ("il"); printf ("%s", racine); printf ("e");
break;
case 4: printf ("nous"); printf ("%s", racine); printf ("ons");
break;
case 5: printf ("vous"); printf ("%s", racine); printf ("ez");
break;
case 6: printf ("ils"); printf ("%s", racine); printf ("ent");
break;
}
}
else
printf ("ce mot n'est pas un verbe\n\n");
//}
}
cette fois, je suis en train d'ecrire un programme en C qui conjugue au present de l'indicatif un verbe du premier groupe (c'est a dire en 'er') saisi au clavier. Mon but est de manier les fonctions gets, puts, strlen et strcat.
Mon programme ne s'execute pas. Merci de m'aider s'il vous plaît.
Voici mon code:
#include <stdio.h>
#include <string.h>
main ()
{
char mot [26], racine [26];
int i = 0, j = 0, num_pronom;
printf ("Veuillez entrer un mot: ");
gets (mot);
//for (i=0; i <= strlen (mot); i++)
//{
if (mot[strlen(mot)] == 'r' && mot[strlen(mot)-1] == 'e') //si les 2 derniers caracteres du mots sont 'er'
{
for (j=0; j <= strlen(mot)-2; j++) //je laisse tomber la chaine "er"
racine[j] = mot[i]; //et je met le reste dans racine
for (j = 0; j <= strlen (racine); j++)
for (num_pronom = 0; num_pronom <= 5; num_pronom++) // pronom je = num 1; tu = 2; etc.
switch (num_pronom)
{
case 1: printf ("je"); printf ("%s", racine); printf ("e");
break;
case 2: printf ("tu"); printf ("%s", racine); printf ("es");
break;
case 3: printf ("il"); printf ("%s", racine); printf ("e");
break;
case 4: printf ("nous"); printf ("%s", racine); printf ("ons");
break;
case 5: printf ("vous"); printf ("%s", racine); printf ("ez");
break;
case 6: printf ("ils"); printf ("%s", racine); printf ("ent");
break;
}
}
else
printf ("ce mot n'est pas un verbe\n\n");
//}
}
A voir également:
- Prg pour conjugaison en C
- Logiciel conjugaison - Télécharger - Dictionnaires & Langues
- Télécharger larousse conjugaison pdf gratuit - Télécharger - Dictionnaires & Langues
- Telecharger tableau conjugaison anglais pdf - Télécharger - Études & Formations
- Télécharger conjugaison 12000 verbe gratuit pdf - Télécharger - Études & Formations
- Conjugaison - Forum Réseaux sociaux
11 réponses
par contre il me semble que la fonction gets n'est pas top mais je ne suis pas tres sur.
As tu essaye de faire cela avé un scanf ?
JSS
As tu essaye de faire cela avé un scanf ?
JSS
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
en plus il me semble que tu as un probleme lors de ton affichage.
pourquoi ne pas simplement faire :
printf("je %s",racine); printf("e\n");
printf("tu %s",racine);printf("es\n");
//etc
et ne pas mettre de boucle du tout et de switch ?
JSS
pourquoi ne pas simplement faire :
printf("je %s",racine); printf("e\n");
printf("tu %s",racine);printf("es\n");
//etc
et ne pas mettre de boucle du tout et de switch ?
JSS
Par ailleurs lorsque tu recopie la racine de ton verbe n'oublie pas d'ajouter '\0' a la fin de ta chaine de caractere .
Voila je pense cette fois que j'ai plus de remarques.
JSS.si.tu.veux.bien.essayer.tout.ca.et.nous.tenir.au.courant
Voila je pense cette fois que j'ai plus de remarques.
JSS.si.tu.veux.bien.essayer.tout.ca.et.nous.tenir.au.courant
j'ai modifié, mais le programme ne donne pas le résultat attendu; lorsque je saisi par exemple le verbe "manger" ou le verbe "jeter", il me dit "ce mot n'est pas un verbe".
#include <stdio.h>
#include <string.h>
main ()
{
char mot [26], racine [26];
int i = 0, j = 0, num_pronom;
printf ("Veuillez entrer un mot: ");
gets (mot);
if (mot[strlen(mot)] == 'r' && mot[strlen(mot)-1] == 'e') //si les 2 derniers caracteres du mots sont 'er'
{
for (j=0; j <= strlen(mot)-2; j++) //je laisse tomber la chaine "er"
racine[j] = mot[i]; //et je met le reste dans racine
racine[strlen(mot)] = '\0';
for (j = 0; j <= strlen(racine)-1; j++)
for (num_pronom = 0; num_pronom <= 5; num_pronom++) // pronom je = num 1; tu = 2; etc.
switch (num_pronom)
{
case 0: printf ( "je %s", racine); printf ("e\n");
break;
case 1: printf ( "tu %s", racine); printf ("es\n");
break;
case 2: printf ( "il %s", racine); printf ("e\n");
break;
case 3: printf ("nous %s", racine); printf ("ons\n");
break;
case 4: printf ("vous %s", racine); printf ("ez\n");
break;
case 5: printf ( "ils %s", racine); printf ("ent\n");
break;
}
}
else
printf ("ce mot n'est pas un verbe\n\n");
}
#include <stdio.h>
#include <string.h>
main ()
{
char mot [26], racine [26];
int i = 0, j = 0, num_pronom;
printf ("Veuillez entrer un mot: ");
gets (mot);
if (mot[strlen(mot)] == 'r' && mot[strlen(mot)-1] == 'e') //si les 2 derniers caracteres du mots sont 'er'
{
for (j=0; j <= strlen(mot)-2; j++) //je laisse tomber la chaine "er"
racine[j] = mot[i]; //et je met le reste dans racine
racine[strlen(mot)] = '\0';
for (j = 0; j <= strlen(racine)-1; j++)
for (num_pronom = 0; num_pronom <= 5; num_pronom++) // pronom je = num 1; tu = 2; etc.
switch (num_pronom)
{
case 0: printf ( "je %s", racine); printf ("e\n");
break;
case 1: printf ( "tu %s", racine); printf ("es\n");
break;
case 2: printf ( "il %s", racine); printf ("e\n");
break;
case 3: printf ("nous %s", racine); printf ("ons\n");
break;
case 4: printf ("vous %s", racine); printf ("ez\n");
break;
case 5: printf ( "ils %s", racine); printf ("ent\n");
break;
}
}
else
printf ("ce mot n'est pas un verbe\n\n");
}
Salut tomguim,
je viens de passer quelques minutes a coriger ton code donc voici ci dessous la correction avec les commantaires:
Cependant pour apprendre au mieux je te conseil d'utiliser au maximum le debugger et de regarder les messages d erreur a la compilation tous ceci fait en general bien avancer les choses...
Bon courage pour la suite
je viens de passer quelques minutes a coriger ton code donc voici ci dessous la correction avec les commantaires:
#include <stdio.h> #include <string.h> void main () { char mot [26], racine [26]; int i = 0, j = 0, num_pronom; printf ("Veuillez entrer un mot: "); gets (mot); //attention sur ton test strlen renvoie taille+1 vu qu une chaine commence a chaine[0] //donc pour ton test il le r se trouve a taille-1 et le e a taille -2 //c'est pour cela que ton test ne passe pas //donc if (mot[strlen(mot)] == 'r' && mot[strlen(mot)-1] == 'e') devient if (mot[strlen(mot)-1] == 'r' && mot[strlen(mot)-2] == 'e') //si les 2 derniers caracteres du mots sont 'er' { for (j=0; j <= strlen(mot)-3; j++) //je laisse tomber la chaine "er" { //ici dans ton test il y a un gros probleme vu que i=0 et n evolue pas //on voit bien que tu veux recopeir le mot dans recine en retirant "er" //mais fo incrementer mot[i] et donc par deduction ce bn'est pas mot[i] mais mot[j] //donc on remplace racine[j] = mot[i]; //et je met le reste dans racine par racine[j] = mot[j]; //et je met le reste dans racine //j ai rajouté accolade pour clareté du codemais tu pourra les virer si tu veux } //encore une erreur la tu veux finaliser ta chaine mais la fin n est pas a taille mais a taille -2 //comme vu precedement //donc racine[strlen(mot)] = '\0'; devient racine[strlen(mot)-2] = '\0'; //pourquoi ce test maintenant que tu a la racine c est bon le travail est fini ya plus qu a afficher //for (j = 0; j <= strlen(racine)-1; j++) for (num_pronom = 0; num_pronom <= 5; num_pronom++) // pronom je = num 1; tu = 2; etc. { switch (num_pronom) { //un seul printf suffit pour ecrire sur la ligne donc j ai modifier :p case 0: printf ( "je %se\n", racine); break; case 1: printf ( "tu %ses\n", racine); break; case 2: printf ( "il %se\n", racine); break; case 3: printf ("nous %sons\n", racine); break; case 4: printf ("vous %sez\n", racine); break; case 5: printf ( "ils %sent\n", racine); break; } } } else printf ("ce mot n'est pas un verbe\n\n"); } //voila j ai testé et compilé ca marche..
Cependant pour apprendre au mieux je te conseil d'utiliser au maximum le debugger et de regarder les messages d erreur a la compilation tous ceci fait en general bien avancer les choses...
Bon courage pour la suite
Bonjour ou Bonsoir,
Je pense qu'avec les explications de canard tu as bien compris comment ca marche ... je me permets Canard cependant d'ajouter 2 réflexions :
1 le gets il me semble qu'il faut le remplacer par un scanf car cette methode a ete source de bug (gets vient de fgets qui a eu des bugs reconnus).
2 tu n'as nullement besoin de faire une boucle for pour afficher tes resultats. Un affichage directe te suffit (for et switch inutile). Ceci ce traduit par remplacer :
for (num_pronom = 0; num_pronom <= 5; num_pronom++) // pronom je = num 1; tu = 2; etc.
{
switch (num_pronom)
{
//un seul printf suffit pour ecrire sur la ligne donc j ai modifier :p
case 0: printf ( "je %se\n", racine);
break;
case 1: printf ( "tu %ses\n", racine);
break;
case 2: printf ( "il %se\n", racine);
break;
case 3: printf ("nous %sons\n", racine);
break;
case 4: printf ("vous %sez\n", racine);
break;
case 5: printf ( "ils %sent\n", racine);
break;
}
}
par :
printf("je%se\n,racine);
printf ( "tu %ses\n", racine);
printf ( "il %se\n", racine);
printf ("nous %sons\n", racine);
printf ("vous %sez\n", racine);
printf ( "ils %sent\n", racine);
Bravo a Canard pour ces explications.
Bon courage.
Regarde la doc sur la fonction scanf et sur la fonction gets
Bon courage.
A +
JSS
Je pense qu'avec les explications de canard tu as bien compris comment ca marche ... je me permets Canard cependant d'ajouter 2 réflexions :
1 le gets il me semble qu'il faut le remplacer par un scanf car cette methode a ete source de bug (gets vient de fgets qui a eu des bugs reconnus).
2 tu n'as nullement besoin de faire une boucle for pour afficher tes resultats. Un affichage directe te suffit (for et switch inutile). Ceci ce traduit par remplacer :
for (num_pronom = 0; num_pronom <= 5; num_pronom++) // pronom je = num 1; tu = 2; etc.
{
switch (num_pronom)
{
//un seul printf suffit pour ecrire sur la ligne donc j ai modifier :p
case 0: printf ( "je %se\n", racine);
break;
case 1: printf ( "tu %ses\n", racine);
break;
case 2: printf ( "il %se\n", racine);
break;
case 3: printf ("nous %sons\n", racine);
break;
case 4: printf ("vous %sez\n", racine);
break;
case 5: printf ( "ils %sent\n", racine);
break;
}
}
par :
printf("je%se\n,racine);
printf ( "tu %ses\n", racine);
printf ( "il %se\n", racine);
printf ("nous %sons\n", racine);
printf ("vous %sez\n", racine);
printf ( "ils %sent\n", racine);
Bravo a Canard pour ces explications.
Bon courage.
Regarde la doc sur la fonction scanf et sur la fonction gets
Bon courage.
A +
JSS
Je vous remercie les amis, le programme donne maintenant les résultats attendus. Si vous pouviez me voir, vous verriez mon laaaaaaaarge sourire. Merci encore