DEVOIR POUR DEMAIN!!!! HELP!!! (language C) - Programmation
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;
}
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 ...
Marsh Posté le 24-04-2001 à 21:33:17
arf ... pas assez rapide ...
t'as qu'a mixer les 2 progs !
Marsh Posté le 24-04-2001 à 21:38:02
ouai ... je comprend pas d'ou il sort ton quote
c'est koi "e ???
Marsh Posté le 24-04-2001 à 21:40:19
ReplyMarsh Posté le 24-04-2001 à 21:44:52
en faite c =a c pendant le copier coller il y a eu un blem
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.
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;
}
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
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à.
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]
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+,
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();
}
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+,
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.
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 :
|
à mon avis le prof aimerait mieux ça
[edit]--Message édité par antp--[/edit]
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 :
|
donc tu considère que toutes les lettres sont des voyelles?
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é.
Marsh Posté le 25-04-2001 à 11:43:36
je penserais a la fonction isalpha(char)
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.
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!