compter les voyelles dans une chaine de caractere [c++] - C++ - Programmation
Marsh Posté le 27-03-2003 à 14:25:07
Didier1809 a écrit : [cpp] |
t'as pas l'impression d'écrire n'importe ou en RAM là ?
et dire que j'ai pas lu le reste.... ça doit etre beau !
Marsh Posté le 27-03-2003 à 14:28:31
Harkonnen a écrit : |
pkoi j'ecrirai n'importe ou ? si tu poste ici juste pour critiquer les prog de noob, c'est pas la peine hein
Marsh Posté le 27-03-2003 à 14:32:39
Didier1809 a écrit : |
Un pointeur ca s'alloue
Marsh Posté le 27-03-2003 à 14:32:47
Je critique pas ton programme !!!! Je dis juste que tu écris dans une zone mémoire que tu n'as pas allouée !
Cette ligne :
int *tata=0;
Ne fait qu'initialiser un pointeur vers un int (et en plus tu l'initialises mal !), mais n'alloue pas l'espace nécessaire à tes 26 int !
Si tu veux allouer correctement, tu écris :
int tata[26];
et basta !!!
Avant de gueuler, réflechis donc la prochaine fois !
Marsh Posté le 27-03-2003 à 14:44:32
bizarement ca me rapelle un labo que j'ai du faire il y a deux ans..
EDIT : mais a mon avis ca marcherait deja un peu mieux si tu faisais alpha = voyelle(ch);
sinon comment veux tu que ton resultat se retrouve dans alpha?????
Ne montres surtout pas ca a M...
Marsh Posté le 27-03-2003 à 14:46:07
Harkonnen> merci, mais ca me resort des valeur n'imp, excuse moi
polo021> quelle ecole ?
edit : jemelle ?
Marsh Posté le 27-03-2003 à 14:46:57
Harkonnen a écrit : |
Le super conseil
Alors que tata doit être retourné en dehors de la fonction...
Marsh Posté le 27-03-2003 à 14:50:01
Didier1809 a écrit : |
1) Pourquoi files-tu un tableau de chaine alors qu'un tableau de char suffit ?
2) Ce n'est pas forcément une bonne idée d'allouer un tableau dans une fonction puisqu'il va falloir le désallouer en dehors.
Marsh Posté le 27-03-2003 à 14:51:48
Tetragrammaton IHVH a écrit : |
je sais pas, je debute vraiment la dedan, je fait comme je pense, mais c'est pas genial. pourquoi un tableau de char est mieux ?
2) c'eswt le seul truc que j'ai trouvé pour faire un return de plusieurs valeurs
Marsh Posté le 27-03-2003 à 14:53:25
Tetragrammaton IHVH a écrit : |
j'ai dit que j'avais pas tout lu !
j'ai parcouru son code, et quand je suis tombé sur l'allocation foireuse, je lui ai répondu sans lire le reste ! une telle énormité, ça se voit tellement que tout le reste est secondaire
Marsh Posté le 27-03-2003 à 15:08:02
Didier1809 a écrit : |
Il est plus correct de filer un tableau déjà aloué en paramètre :
Code :
|
Pas besoin de se compliquer la vie.
Marsh Posté le 27-03-2003 à 15:09:35
apparement tous tes labos vont ou sont passes par ici.
Le tri de 3 nombres, la saisie d'un entier, les conversions de bases, ...
je te conseille de quand meme y reflechir par toi meme un maximum et de ne demander de l'aide qu'en dernier recours (si c'est ce que tu fais tant mieux) parce que le but de ces exercices est de fouiller les langages C et Pascal et non pas de demander une solution toute faite.
Marsh Posté le 27-03-2003 à 15:10:40
ReplyMarsh Posté le 27-03-2003 à 15:36:46
polo021 a écrit : apparement tous tes labos vont ou sont passes par ici. |
je ne demande pas une soluce toute faite, mais bien un "coup de pouce" pour avancer si tu a des bouquins a me conseiller
Marsh Posté le 27-03-2003 à 15:43:47
vala, faut pas se compliquer la vie des fois
Code :
|
et l'appel
Code :
|
Marsh Posté le 27-03-2003 à 15:48:52
Didier1809 a écrit : |
ton syllabus de C de 132 pages devrait amplement te suffir pour debuter
Marsh Posté le 27-03-2003 à 15:50:35
Didier1809 a écrit : vala, faut pas se compliquer la vie des fois
|
déja utilise la notation de tableaux...
*(*(toto+i)+j) ca devient toto[i][j] et c plus claire
ton truc ca fait un peu concours d'obscurantisme programmationnel !
quant à écrire char* toto[], choisis un écriture plus coherente (avec le reste de ton prog) donc soit tu fais du *, soit du [], mais ne mixe pas.
ca devrait rendre ton code plus facile a lire, pour nosu comme pour toi; et t'éviter un bon nombre de fautes
et puis les char* cai mal ( ++Taz Engine Powered )
Marsh Posté le 27-03-2003 à 15:52:45
polo021 a écrit : |
Marsh Posté le 27-03-2003 à 15:55:28
Didier1809 a écrit : vala, faut pas se compliquer la vie des fois |
Ton algorithme est super inéfficace puisque tu parcours la chaine pour chaque voyelle. Difficile de faire une programmation plus sale...
Marsh Posté le 27-03-2003 à 16:01:37
Tetragrammaton IHVH a écrit : |
c'est le seul que j'ai reussi a faire
tu croit que je devrait tout faire en : if a : a++ ; if e : e++ ? et la parcourir qu'une fois, et retourner un tableau ?
Marsh Posté le 28-03-2003 à 15:01:46
Didier1809 a écrit : |
Pas besoin de faire des "if". Tu comptes toutes les lettres et tu n'affiches que celles qui t'interessent (aeiouy). C'est l'algo que j'ai fourni un peu plus haut.
Marsh Posté le 28-03-2003 à 21:00:29
Tetragrammaton IHVH a écrit : |
ca c'est plutot intelligent!
Marsh Posté le 29-03-2003 à 12:31:21
Solution optimisée :-) Présence d'algorithme: nulle :-)
Code :
|
Marsh Posté le 29-03-2003 à 13:27:24
kenshiro182 a écrit : Solution optimisée :-) Présence d'algorithme: nulle :-)
|
heeeuuu, merci, mais j'ai pas encore vu les classes
si tu a le temps et le courage, tu peut expliquer
Marsh Posté le 29-03-2003 à 13:55:49
Didier1809 a écrit : |
Bon en fait c'est tout bête :-)
Dans un tableau de 256 éléments, je stocke pour chaque caractère possible si c'est une voyelle ou pas. L'idée est de le remplir une seule fois dans le programme. Ca pourrait être une variable globale (mais les variables globales c'est mal).
Après, pour tester si un caractère est une voyelle, tu fais "tableau[caractere]". D'ailleurs il y a un bug, comme "caractere" est une valeur signée, il se peut qu'on accède à un élément d'index négatif. Donc vaut mieux faire "tableau[(unsigned char)caractere]" (ouais faudrait faire un "static_cast<unsigned char>" ).
Après, compter dans une chaine le nombre de voyelles est tout bete (une boucle "for" ).
En C++ il y a des fonctions utilisant des algorithmes génériques dans la bibliothèque standard. Ici la fonction "std::count_if" va compter tous les éléments se situant entre "array" et "array+len" pour lequel l'object "testeur" va répondre "true".
"testeur" est un objet-fonction. Il agit comme une fonction (une fonction qui teste si c'est une voyelle).
Bon pourquoi une classe ? Mon besoin est:
- initialiser le tableau une fois. Si je crée un élément "static" de cette classe, son constructeur sera appelé une seule fois. Et autant encapsuler ce tableau dans une classe
- utiliser ce tableau dans une fonction (ou un objet-fonction) avec la fonction "std::count". "operator()" permet de faire passer mon objet pour une fonction.
Marsh Posté le 27-03-2003 à 14:14:47
je doit compter des voyelles, avec une fonction qui accpete un tableau de char et qui ressort un tableau pour pouvoir imprimer dans le main :
a: 8
e: 9
par exemple, j'ai deja ca :
pour la fonction
pour l'appel et l'affichage du tableau
et
comme declaration
mais ca merde, comment je doit faire ?
Message édité par didier1809 le 27-03-2003 à 14:15:32
---------------
.