Exercice en programme c

Résolu/Fermé
mannour85 Messages postés 69 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 25 avril 2015 - 7 déc. 2010 à 11:58
mannour85 Messages postés 69 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 25 avril 2015 - 7 déc. 2010 à 18:16
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() ;
}





6 réponses

Nanolenain Messages postés 72 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 3 février 2012 11
7 déc. 2010 à 16:29
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.
2
flo13142 Messages postés 71 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 21 février 2011 18
7 déc. 2010 à 16:33
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 ();
}
1
Nanolenain Messages postés 72 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 3 février 2012 11
7 déc. 2010 à 16:43
Ouch, en effet, je n'avais pas vu ca...^^
0
Nanolenain Messages postés 72 Date d'inscription lundi 6 décembre 2010 Statut Membre Dernière intervention 3 février 2012 11
7 déc. 2010 à 17:42
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 balises
 pour 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.
1
flo13142 Messages postés 71 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 21 février 2011 18
7 déc. 2010 à 17:46
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 test
else{ 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')
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mannour85 Messages postés 69 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 25 avril 2015
7 déc. 2010 à 17:12
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() ;
}
0
mannour85 Messages postés 69 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 25 avril 2015
7 déc. 2010 à 18:16
un grand merci les amis c'est resolu
0