Exercice en programme c
Résolu
mannour85
Messages postés
91
Statut
Membre
-
mannour85 Messages postés 91 Statut Membre -
mannour85 Messages postés 91 Statut Membre -
Bonjour, j'ai essayer de corriger cet exercice en c mais j'ai pas eu une bonne exécution j'ai besoin d'aide .voici l'exercice puis mon essai.
exercice:
Ecrire un programme C qui accepte un texte qui se termine par le caractère `#' et qui affiche en sortie :
1/ Le nombre de caractères minuscules
2/ Le nombre de caractères majuscules
3/ Le nombre de chiffres
4/ Le nombre de lignes
5/ Le nombre de séparateurs
6/ La longueur du mot le plus long
mon essai:
#include<stdio.h>
#include<conio.h>
main()
{ char c;
int nmin=0,nmaj=0,nch=0,nlig=1,nsep=0,l=0,max=0;
c=getchar()
while (c!='#')
{if((c<='A')&&(c<='Z'))
nmaj=nmaj+1;
else
if((c<='a')&&(c<='z'))
nmin=nmin+1;
else
{ if(c==' `)||c=='\n `||c=='. `||c==', `)
nsep=sep+1;
else{ if(c=='\n `)
nlig=nlig+1;
else if(c==' `)||c=='\n `||c=='. `||c==', `)
{if(l>max)
max=1;
l=0;}
else l=l+1;
}}}
printf(« Le nombre de caractères minuscules est %d\n »,nmin) ;
printf(« Le nombre de caractères majuscules est %d \n»,nmaj) ;
printf(« Le nombre de chiffres est %d\n »,nch) ;
printf(« Le nombre de lignes est %d\n »,nlig) ;
printf(« Le nombre de séparateurs est %d\n »,nsep) ;
printf(« La longueur du mot le plus long est%d\n »,max) ;
getch() ;
}
exercice:
Ecrire un programme C qui accepte un texte qui se termine par le caractère `#' et qui affiche en sortie :
1/ Le nombre de caractères minuscules
2/ Le nombre de caractères majuscules
3/ Le nombre de chiffres
4/ Le nombre de lignes
5/ Le nombre de séparateurs
6/ La longueur du mot le plus long
mon essai:
#include<stdio.h>
#include<conio.h>
main()
{ char c;
int nmin=0,nmaj=0,nch=0,nlig=1,nsep=0,l=0,max=0;
c=getchar()
while (c!='#')
{if((c<='A')&&(c<='Z'))
nmaj=nmaj+1;
else
if((c<='a')&&(c<='z'))
nmin=nmin+1;
else
{ if(c==' `)||c=='\n `||c=='. `||c==', `)
nsep=sep+1;
else{ if(c=='\n `)
nlig=nlig+1;
else if(c==' `)||c=='\n `||c=='. `||c==', `)
{if(l>max)
max=1;
l=0;}
else l=l+1;
}}}
printf(« Le nombre de caractères minuscules est %d\n »,nmin) ;
printf(« Le nombre de caractères majuscules est %d \n»,nmaj) ;
printf(« Le nombre de chiffres est %d\n »,nch) ;
printf(« Le nombre de lignes est %d\n »,nlig) ;
printf(« Le nombre de séparateurs est %d\n »,nsep) ;
printf(« La longueur du mot le plus long est%d\n »,max) ;
getch() ;
}
6 réponses
-
Salut,
Donc, déjà y a une erreur dans tes deux premiers if : il faut que c soit supérieur ou égal a 'a' et 'A' et non pas "<=".
Sinon, pourquoi entoures-tu tes caractères d'une quote ' et d'un backquote ' ? Entoures les juste avec des quotes (ex: c=='\n').
Si tu as d'autre erreurs, il pourrait être intéressant de savoir ce qu'affiche exactement ton programme et si tu n'as pas de warning ou erreur a la compilation. -
A première vu, tu ne fais qu'un c=getchar() en début
et ensuite un while (c !='#'), du coup tu pars en boucle infini
il faudrait commencer par :c=getchar (); while (c != '#') { ... c=getchar (); } -
Je me suis permis de clarifier ton code et de corriger deux trois erreurs. j'ai commente ce que j'avais pour que tu comprennes, dis-moi si ce n'est pas assez clair.
Juste une précision avant de partir, tu peux mettre des balisespour poster du code, ca simplifie la lecture : <code> #include<stdio.h> #include<conio.h> main() { char c; int nmin=0,nmaj=0,nch=0,nlig=1,nsep=0,l=0,max=0; c=getchar(); while (c!='#') { if((c>='A')&&(c<='Z')) //Verifie que c'est une majuscule - tu avais oublie d'inverser le chevron nmaj=nmaj+1; else if((c>='a')&&(c<='z'))// Verifie que c'est une minuscule nmin=nmin+1; else if(c==' '||c=='\n'||c=='.'||c==',')// J'ai remis tous les separateurs ensemble, c'est plus clair et plus logique. { nsep=nsep+1; //C'est un separateur donc tu increment nsep if (c=='\n') //si c'est aussi un saut de ligne, tu increment nlig nlig=nlig+1; if(l>max) // Si le mot que tu vient de lire est plus long que l'ancien, tu stocke la nouvelle longueur max. max=l; l=0; //Tu viens de lire un separateur donc tu commence un nouveau mot } l=l+1; //a incrementer quoiqu'il arrive, pas dans un else sinon, on pourrait entrer dans le tout premier if et cette valeur ne serait pas incrementee... c=getchar(); } printf(" Le nombre de caractères minuscules est %d\n ",nmin) ; printf(" Le nombre de caractères majuscules est %d \n",nmaj) ; printf(" Le nombre de chiffres est %d\n ",nch) ; printf(" Le nombre de lignes est %d\n ",nlig) ; printf(" Le nombre de séparateurs est %d\n ",nsep) ; printf(" La longueur du mot le plus long est%d\n ",max) ; getch() ; }
tu utilisais deux if pour tes séparateurs, il y en avais donc un qui n'était jamais utilise... J'ai remplace tes "else { if" par des "else if", c'est plus propre et ca simplifie le code. -
si tu fais :
if((c<='A')&&(c<='Z')
tu regardes si c est inf ou égal à 'A', or il faut qu'il soit supérieur ou égal :if (c >= 'A' && c <= 'Z') nmaj++
de même pour les minuscules.
pour ton nombre de ligne, tu ne rentre jamais dans ton testelse{ if(c='\n') nlig=nlig+1;
car tu es passé dans le if du dessus en amont
pour les chiffres il faut faire pareil que les lettres :if ( c >= '0' && c <='9')
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
MERCI POUR L'AIDE.VOICI UN NOUVEAU ESSAI:
#include<stdio.h>
#include<conio.h>
main()
{ char c;
int nmin=0,nmaj=0,nch=0,nlig=1,nsep=0,l=0,max=0;
c=getchar();
while (c!='#')
{if((c<='A')&&(c<='Z'))
nmaj=nmaj+1;
else {
if((c>='a')&&(c<='z'))
nmin=nmin+1;
else
{ if(c==' '||c=='\n'||c=='.'||c==',')
nsep=nsep+1;
else{ if(c='\n')
nlig=nlig+1;
else if(c==' '||c=='\n'||c=='.'||c==',')
{if(l>max)
max=1;
l=0;}
else l=l+1;
}}}c=getchar();}
printf(" Le nombre de caractères minuscules est %d\n ",nmin) ;
printf(" Le nombre de caractères majuscules est %d \n",nmaj) ;
printf(" Le nombre de chiffres est %d\n ",nch) ;
printf(" Le nombre de lignes est %d\n ",nlig) ;
printf(" Le nombre de séparateurs est %d\n ",nsep) ;
printf(" La longueur du mot le plus long est%d\n ",max) ;
getch() ;
} -