DEVOIR POUR DEMAIN!!!! HELP!!! (language C)

DEVOIR POUR DEMAIN!!!! HELP!!! (language C) - Programmation

Marsh Posté le 24-04-2001 à 21:22:56    

voila ce ke je doi faire mais j'y arrive pas!!! si kk1 peu me le faire je lui en serai reconnaissant! surtout ke c noté! ;-)
 
il faut ecrir un prog ki lit une ligne entrée au clavier et compte le nombre de voyelles de cette ligne.
Entrée: Une ligne de texte terminée par un asterixe
Sorti: la phrase "Le nombre de voyelle dans la ligne est xxx" ou xxx est le nombre de voyelles dans la ligne entrée.
 
Merci!

Reply

Marsh Posté le 24-04-2001 à 21:22:56   

Reply

Marsh Posté le 24-04-2001 à 21:26:09    

voila ce ke je doi faire mais j'y arrive pas!!! si kk1 peu me le faire je lui en serai voila ce ke j'ai fais mais il y a des errursje capte pas pkoi
#include<stdio.h>
main()
{
char c;
int v=0;
printf ("Entrez une ligne qui se termine par*\n";);
while((c=getchar( ))!='*')
switch (c)
{
case 'A':
case 'a':v++;   /* Achaque fois que le compilateur va renconter ce caractères, il va ajouter 1                                                  case 'E':                     à  la valeur de v */
case 'e':v++;
case 'I':
case'i':v++;
case 'O':
case'o':v++;
case 'U':
case'u':v++;
}
printf ("Le nombre de voyelles dans la ligne est%d\n",v);
return 0;
}

Reply

Marsh Posté le 24-04-2001 à 21:31:47    

#include <stdio.h>
 
void main(void)
{
char ligne[100]; /* si ton gars entre + de 100 carateres ... */
int i,nb;
 
    printf("Ce source viens de Hardware.fr\n" ); /* indispensable */
    scanf("%s",&ligne);
    for(i=0;i<99;i++)
    {
        switch(ligne[i])
        {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u': nb++;break;
            case '*': printf("Le nombre de voyelles est %d.\n",nb);
    }
}
ca doit etre a peu pres ca ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-04-2001 à 21:33:15    

merci! je vais essayer

Reply

Marsh Posté le 24-04-2001 à 21:33:17    

arf ... pas assez rapide ...
t'as qu'a mixer les 2 progs ! :D


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-04-2001 à 21:35:41    

:-( error ligne 18 et 21

Reply

Marsh Posté le 24-04-2001 à 21:38:02    

ouai ... je comprend pas d'ou il sort ton quote
c'est koi "e ??? :??:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-04-2001 à 21:40:19    

oups ... les majuscules :D


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-04-2001 à 21:44:52    

en faite c =a c pendant le copier coller il y a eu un blem

Reply

Marsh Posté le 24-04-2001 à 21:47:59    

j'ai un ptre exo celui la c plus compliker:
 
ecrir un prog ki calcule le nombre de chiffre de xxx et yyy ou xxx est l'entier entré, et yyy est son nombre de chiffres.
ameliorer le prog de mise a jour d'un compte bancaire : l'utilisateur peut faire plusieurs operation successives lorskil a terminer il entre au clavier la lettre f.

Reply

Marsh Posté le 24-04-2001 à 21:47:59   

Reply

Marsh Posté le 24-04-2001 à 22:17:43    

En francais ca donne koi? Tu veux un soft qui compte le nombre de chiffre d'un nombre? Ben tu fais ca :  
 
cin >> chiffre
v=0;
while(chiffre !=0)
{
  chiffre=chiffre/10;
  v=v+1;
}

Reply

Marsh Posté le 24-04-2001 à 23:22:43    

t'es pas obligé de sauvegarder les valeurs je suppose ?
 
donc  
 
debut
  valeur = 0;
  c <- lecture caractere
  tantque (c != *)
  faire
    si (voyelle(c))
      valeur <- valeur+1
    finsi
    c <- lecture caractere
  fintq
  retourne valeur
fin
 
voyelle(c)
 
debut
  si ( c = a,e,i,o,u,y)
   retourne 1
  sinon
   retourne 0
  finsi
fin

Reply

Marsh Posté le 24-04-2001 à 23:56:34    

bon c'est un truc de base ça. Allez, je te file le principale, à toi de le transcrire :
while (c!='\n')
{
   if((c=='a' || c=='e' || etc ..) || (c=='A' || c=='E' etc))
       voy++;
}
 
Sinon tu peux donner les intervalles des caractères ASCII, sachant que les majuscules sont comprises entre la position 65 et la position 90, les minuscules entre la position 97 et la position 122, c'est plus fastoche, c'est moins lourd et tout prof appréciera plus à mon avis. Je ne me souviens plus de la fonction ASCII qui le fait, dont je l'appelerais ASCII, ok? On a donc:
While(c!='\n')
{
    if (((ASCII(c)>65) && (ASCII(c)<90))||((ASCII(c)>97) && (ASCII(c)<122)))
     voy++;
}
 
Voilà.

Reply

Marsh Posté le 25-04-2001 à 00:07:22    

bon, apparemment, c'est plus simple que ça, tu fais ça:
 
char phrase[n]; //déclaration du tableau contenant la phrase, n fixé.
int voy=0; //déclaration du compteur et initialisation pour éviter les surprises
 
dans le corps du programme tu mets;
i=0;
while (phrase[i] != '\n')
{
   if (((phrase[i]>65) && (phrase[i]<90)) || ((phrase[i]>97) && (phrase[i]<122)))
      voy++; //si on trouve une voyelle, on incrémente voy
 
   i++; //incrémentation de i pour pouvoir passer au caractère suivant
}
 
tu utilises quoi comme compilateur ?

 

[edit]--Message édité par Bounga69--[/edit]

Reply

Marsh Posté le 25-04-2001 à 00:19:04    

Tiens, voici un programme qui marche, contrairement a ce que j'ai lu plus haut. Car faudrait pas oublier que scanf s'arretent au premier blanc...
Et pas besoin de regarder les voyelles une par une, il y a des fonctions de la librairie std pour cela.
Le code ci dessous prend une ou plusieurs lignes, il n'arrete la lecture clavier que lorsque une * a ete tapee dans la ligne.
Il ne compte pas les voyelles qui sont eventuellement tapees apres le * . A toi d'adapter selon tes besoins.
 
#include <stdio.h>  
#include <string.h>  
int main(void)  
{  
  char input[255];  
  char *aux=NULL;  
  int  count=0;  
 
  printf("*** Ce source viens de Hardware.fr ***\n" );  
  /* indispensable */
  printf("Veuillez entrer une chaine de caracteres terminee par *\n" );  
  printf(">" );   /* pour faire joli: un prompt */
  fflush(NULL); /* flushe tout stream en output */
  while (scanf("%s",&input))
    {
      aux=input;
      while (aux && (aux=strpbrk(aux,"aeiouAEIOU*" )))
 {
   if (*aux == '*')
     goto done;
   count++;
   aux++;
 }
    }
 done:
  printf("Le nombre de voyelles avant l'* est %d.\n",count);  
  return 0;  
}  
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-04-2001 à 00:20:57    

Moi j'utiliserais une fonction déja toute faite : strchr de string.h
 
#include<stdio.h>
#include<string.h>
#include<conio.h>
 
void main()
{
char car;
int compteur;
car=' ';
compteur=0;
clrscr();
 
while((car=getchar())!='*')
 
        if(strchr("aeiou",car)) /* Ici strchr compte le nbre d'occurrence car dans la chaîne "aeiou" */  
 
                compteur++;
 
printf("\nLe nombre de voyelle dans la ligne est %d",compteur);
getch();
}

Reply

Marsh Posté le 25-04-2001 à 00:31:19    

C'est pas faux ton approche, mais fortement inefficace par rapport a ce que j'ai ecrit:
Tu avances caractere par caractere, et tu testes pour chaque caractere.
Ce que j'ai file avance mot par mot, et se positionne directos sur les caracteres voyelles, sautant les consonnes a chaque etape.  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-04-2001 à 08:08:34    

gilou, c'est pas mal. Effectivement mon programme vérifie caractère par caractère. Je programme en Visual C++ et actuellement c'est la seule méthode que je connaisse. Mais je vais essayer d'adapter la tienne.

Reply

Marsh Posté le 25-04-2001 à 09:32:36    

Bounga69 a écrit a écrit :

 
Sinon tu peux donner les intervalles des caractères ASCII, sachant que les majuscules sont comprises entre la position 65 et la position 90, les minuscules entre la position 97 et la position 122, c'est plus fastoche, c'est moins lourd et tout prof appréciera plus à mon avis. Je ne me souviens plus de la fonction ASCII qui le fait, dont je l'appelerais ASCII, ok? On a donc:
While(c!='\n')
{
    if (((ASCII(c)>65) && (ASCII(c)<90))||((ASCII(c)>97) && (ASCII(c)<122)))
     voy++;
}
 
Voilà.




 
C'est un peu tordu... Ce serait plus facile de faire :

Code :
  1. if (((c>='A') && (c<='Z')) || ((c>='a') && (c<='z')))


à mon avis le prof aimerait mieux ça :)

 

[edit]--Message édité par antp--[/edit]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-04-2001 à 10:23:55    

antp a écrit a écrit :

 
 
C'est un peu tordu... Ce serait plus facile de faire :

Code :
  1. if (((c>='A') && (c<='Z')) || ((c>='a') && (c<='z')))


à mon avis le prof aimerait mieux ça :)
 
 




 
donc tu considère que toutes les lettres sont des voyelles?


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 25-04-2001 à 11:41:49    

outch j'crois qu'j'ai fait une connerie. Il vaut mieux garder ca :
while (c!='\n')  
{  
   if((c=='a' || c=='e' || etc ..) || (c=='A' || c=='E' etc))  
       voy++;  
}  
 la précipitation c'est pas bien quand on est fatigué.

Reply

Marsh Posté le 25-04-2001 à 11:43:36    

je penserais a la fonction isalpha(char)


---------------
Do androïds dream of electric sheep ?
Reply

Marsh Posté le 25-04-2001 à 12:51:14    

jupiler a écrit a écrit :

 
 
donc tu considère que toutes les lettres sont des voyelles?




 
Non, mais le truc avec la fonction ASCII faisait pareil mais avec un appel de fonction inutile pour chaque lettre.
D'ailleurs je sais pas quel était le but, mais c'est juste que ce truc ASCII(c)>65 ça me semblait trop louche.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 25-04-2001 à 16:48:42    

merci a tous

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed