logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Programmation - Langages de Programmation >> aidez-moi, svp ! (c++, programme tout con) Newtopic | Reply
1 | 2 | 3 |
poster txt
Nothing2Do
Inscrit le 17-04-2006
Posté le 21-05-2007 13:52

j'ai changé les "list<>" par des "map<>", et plus rien ne marche :
Code:

#include <iostream>
#include <map>
#include <string>
using namespace std;
void add(string word_, map<string, int> & conteneur_)
{
map<string, int> tmp=conteneur_.find(word_);
if(tmp==conteneur_.end()) /* le "tmp" évite 2 appel de la même fonction */
{/* si le mot n'est pas dans la liste */
conteneur_.insert( make_pair(word_, 1));
}
else
{/* si il y est */
conteneur_[word_]++;
}
}

int main(int argc, string argv[])
{
map<string, int> conteneur;
for(int bcl=0; bcl<argc; bcl++)
{
add(argv[bcl], conteneur);
}
}


sa maigris à chaque nouvel essai !
_________________________
On ne vois des anges que le dos ...
profil | mail | Website | AIM | ICQ | Yahoo | MSN | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 21-05-2007 14:28

Quote:

Le 21-05-2007 12:11, Nothing2Do a écrit :
___________________________________________________
je n'aime ni microsoft, ni l'interface de son site. j'ai cherché autre chose et : http://www.cppreference.com/



Bof. Pas terrible:
- Pas de description des parametres templates
- Tres incomplet quant a la description, par exemple, des algos.

Deux exemples:

Pour les maps, tu peux specifier l'operation de comparaison des clefs qui regit l'ordonnancement des elements dans la map (3ieme parametre template). Ca n'est pas precise' sur cppreference. Dans ton cas ca pourrait par exemple servir a ordonner les elements par ordre alphabetique.

Pour les algos, ils ne donnent pas le type exact d'iterateurs qui peuvent etre utilises avec std::sort(). Donc on pourrait croire que ca fonctionne avec les map(). Or ca ne fonctionne qu'avec des random access iterator, tandis que map<>::iterator te retourne un bidirectionnal iterator (moins complet).

Si tu ne veux pas utiliser les refs de microsoft, utilise plutot ca comme reference pour la STL:
http://wwwasd.web.cern.ch/wwwasd/lhc++/RW/stdlibcr/classref.htm

Sinon, tu as tort de ne pas utiliser Visual Studio Express. Amha, c'est ideal pour debuter en C++. Tu pourras toujours faire ton cador sous xemacs plus tard.

_________________________
Un peu de science vaut mieux que beaucoup de dévotion

Edit: j'avais pas vu ta derniere version. Ca commence a ressembler a quelque chose . Par contre par convention, l'underscore en fin de nom de variable est plutot reserve' aux variables membres (ca ou um prefixe m ou m_), donc a eviter pour les variables locales - autant prendre tout de suite de bonnes habitudes.

[ Ce Message a été édité par: tweakie le 2007-05-21 14:34 ]
profil | Website | edit | quote
Nothing2Do
Inscrit le 17-04-2006
Posté le 21-05-2007 14:51

mais, là : "void add(string word_, map<string, int> & conteneur_)". word_ et conteneur_ ne sont pas des variables locales (ou membres) ?
et c'est quoi la différence entre une "variable membre" et une "variable locale" ?
mais tu me troubles avec tes convention (même si je suis pour leurs utilisation...)
edit : Et ton truc (visual "je sais plus quoi"), c'est pas un machin à microsoft ? désolé, mais je ne peux l'utiliser (sauf si sa existe pour linux ;-)

_________________________
On ne vois des anges que le dos ...

[ Ce Message a été édité par: Nothing2Do le 2007-05-21 15:07 ]
profil | mail | Website | AIM | ICQ | Yahoo | MSN | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 21-05-2007 16:37

Quote:

mais, là : "void add(string word_, map & conteneur_)". word_ et conteneur_ ne sont pas des variables locales (ou membres) ?
et c'est quoi la différence entre une "variable membre" et une "variable locale" ?



La, une variable "locale" est locale a la fonction.

Une variable "membre" est une variable de classe: elle est detruite a la destruction de l'objet.

La, tu n'as plus d'objets ( c'est quasiment du C avec des containers C++, ce que tu fais) donc tu ne risque pas d'avoir des variables membres.

Quote:

edit : Et ton truc (visual "je sais plus quoi"), c'est pas un machin à microsoft ? désolé, mais je ne peux l'utiliser (sauf si sa existe pour linux ;-)



T'as tort, faut pas etre sectaire comme ca. M'enfin je suppose que pour des petits programmes comme ca kdevelop fait aussi bien l'affaire...

_________________________
Un peu de science vaut mieux que beaucoup de dévotion

[ Ce Message a été édité par: tweakie le 2007-05-21 16:37 ]
profil | Website | edit | quote
Nothing2Do
Inscrit le 17-04-2006
Posté le 21-05-2007 17:38

Enfin, la tu joue sur les mots. Avec : "void add(string word_, map & conteneur_)", word_ et conteneur_ sont détruit aussi à la fin de la fonction ! La seul différence, c'est que toi, tu n'utilise pas le fait que le C++ nous autorise à le faire. Et, ça ne peut pas être du C parce que le C ne l'autorise pas ...
Je disais juste que je n'ai pas "windows", donc sectaire ou pas, de toute façon, je ne peux pas utiliser ton "truc".
le code que tu décris comme "un peu mieux" ne veux pas marcher

_________________________
On ne vois des anges que le dos ...

[ Ce Message a été édité par: Nothing2Do le 2007-05-21 17:43 ]
profil | mail | Website | AIM | ICQ | Yahoo | MSN | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 21-05-2007 18:11


> Enfin, la tu joue sur les mots. Avec : "void add(string word_, map & conteneur_)", word_ et conteneur_ sont détruit aussi à la fin de la fonction !


Oui, c'est bien ce que je dis.

Quote:

La seul différence, c'est que toi, tu n'utilise pas le fait que le C++ nous autorise à le faire. Et, ça ne peut pas être du C parce que le C ne l'autorise pas ...



Moi, je n'utilise rien du tout. Je me contente de critiquer les conventions de nommage que tu emploies et de t'expliquer la difference entre une variable membre (dont la vie se termine avec l'objet qui la contient, sauf si elle est statique) et une variable locale, dont la duree de vie se termine a la fin du "scope" courant.

Quote:

Je disais juste que je n'ai pas "windows", donc sectaire ou pas, de toute façon, je ne peux pas utiliser ton "truc".



Soit, te absolvo

Quote:

le code que tu décris comme "un peu mieux" ne veux pas marcher



Commencons par le commencement. map<>::find(), ca te retourne quoi, comme type ?
_________________________
Un peu de science vaut mieux que beaucoup de dévotion
profil | Website | edit | quote
Nothing2Do
Inscrit le 17-04-2006
Posté le 21-05-2007 18:20

map<>.find() renvoie un itérator (itérateur !) ou map<>.end() si le texte n'est pas dans la liste. Je l'ai lu sur le site que tu m'as offert !
je dois mettre une "*" ici :"map<string, int> tmp=conteneur_.find(word_);" entre "int>" et "tmp=" ? non ?

_________________________
On ne vois des anges que le dos ...

[ Ce Message a été édité par: Nothing2Do le 2007-05-21 18:24 ]
profil | mail | Website | AIM | ICQ | Yahoo | MSN | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 21-05-2007 18:30

Non, c'est bete comme chou: tu dois mettre un ::iterator

map<>::iterator, c'est un type, et map<>.end() est de type map<>::iterator.

D'ailleurs, tu pourrais meme mettre directement if(bidule.find(blabla) == bidule.end()), je ne saisis pas le sens de ton commentaire... Le tmp ne serait utile que si tu l'utilisais effectivement dans le else.

_________________________
Un peu de science vaut mieux que beaucoup de dévotion

[ Ce Message a été édité par: tweakie le 2007-05-21 18:34 ]
profil | Website | edit | quote
Nothing2Do
Inscrit le 17-04-2006
Posté le 21-05-2007 18:55

la fonction add() deviendrais :
Code:

void add(string word_, map<string, int> & conteneur_)
{
if(conteneur_.find(word_)==conteneur_.end())
{/* si le mot n'est pas dans la liste */
conteneur_.insert( make_pair(word_, 1));
}
else
{/* si il y est */
conteneur_[word_]++;
}
}


Et je ne vois pas non plus à quoi servait tmp (avant je créais la variable et je la testais aprés d'où l'utilisation de tmp, mais c'est inutile !)
edit : trop bien, maintenant sa marche ! mais il y a un problème : sa n'affiche rien !!! je dois le faire encore (mais c'est pas trop dur)
reedit : j'ai rajouté sa :
Code:

int affiche(map<string, int> & conteneur_)
{
map<string, int>::iterator iter;
for ( iter=conteneur_.begin(); iter!= conteneur_.end(); ++iter )
{
cout << "Key: '" << iter->first << "', Value: " << iter->second << " ;\n ";
}
}


avec un appelle tout con dans le main ("affiche(conteneur);") mais je crois qu'il y a un tas de variables locale en trop !

_________________________
On ne vois des anges que le dos ...

[ Ce Message a été édité par: Nothing2Do le 2007-05-21 19:13 ]
profil | mail | Website | AIM | ICQ | Yahoo | MSN | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 22-05-2007 02:04

Quote:

Et je ne vois pas non plus à quoi servait tmp (avant je créais la variable et je la testais aprés d'où l'utilisation de tmp, mais c'est inutile !)



Tu aurais pu incrémenter directement tmp->second, c'était la seule utilisation raisonnable (ça t'évite d'avoir à chercher deux fois l'élément dans la map).

Quote:

mais je crois qu'il y a un tas de variables locale en trop !



Suggestion d'évolution du programme, sous forme de tutorial:

1 - Next step, allons y progressivement, tu refais une classe Analyse avec une variable membre (la map) et deux fonctions membres (add() et affiche()), en respectant les conventions typographiques données plus haut (nom de classe en majuscule, trailing underscore pour les variables membres seulement, etc.)

2 - Ensuite, tu pourras modifier Analyse::affiche() pour que les résultats soient ordonnés en fonction du nombre d'occurrence de chaque mot (tri).

3 - 3ième étape: ajouter une fonction merge() qui prenne une analyse (je t'aide, on utilisera une const Analyse&) en paramètre et qui la fusionne avec l'analyse courante.

...et ce ne sera pas fini

_________________________
Un peu de science vaut mieux que beaucoup de dévotion

[ Ce Message a été édité par: tweakie le 2007-05-22 02:04 ]
profil | Website | edit | quote
Nothing2Do
Inscrit le 17-04-2006
Posté le 22-05-2007 11:01

j'ai fait comme tu as dit (1 classe, 2 fonctions membre, les conventions...) :
Code:

#include <iostream>
#include <map>
#include <string>
using namespace std;
class Analyse
{
map<string, int> conteneur_;
public:
int affiche();
int add (string);
};
int Analyse::affiche()
{
map<string, int>::iterator iter;
for ( iter=*this.begin(); iter!=*this.end(); ++iter )
{
cout << "Key: '" << iter->first << "', Value: " << iter->second << " ;\n ";
}
}
void Analyse::add(string word)
{
if(*this.find(word)==*this.end())
{/* si le mot n'est pas dans la liste */
*this.insert( make_pair(word, 1));
}
else
{/* si il y est */
*this[word]++;
}
}

int main(int argc, string argv[])
{

Analyse premiere;
for(int bcl=0; bcl<argc; bcl++)
{
premiere.add(argv[bcl]);
}
premiere.affiche();
}



_________________________
On ne vois des anges que le dos ...

[ Ce Message a été édité par: Nothing2Do le 2007-05-22 11:02 ]
profil | mail | Website | AIM | ICQ | Yahoo | MSN | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 22-05-2007 11:08

Pourquoi ces *this la ou il devrait y avoir conteneur_ ? Tu confonds l'objet Analyse et une de ses variables membres...
_________________________
Un peu de science vaut mieux que beaucoup de dévotion
profil | Website | edit | quote
Nothing2Do
Inscrit le 17-04-2006
Posté le 22-05-2007 11:14

trés juste ! je change sa !
et dans la déclaration, j'ai mis "int add(string)", il faut lire "void add(string)""

_________________________
On ne vois des anges que le dos ...

[ Ce Message a été édité par: Nothing2Do le 2007-05-22 11:21 ]
profil | mail | Website | AIM | ICQ | Yahoo | MSN | edit | quote
Place-Monge
Inscrit le 03-01-2017
Posté le 01-10-2017 21:57

Salut a linitiateur...

Je ne vois pas le code mais je vois le numero des lignes dans les erreurs..

Au sujet du code c++...

je vais tester si l'ide c++ connu ma trahi...

je ne comprend pas le c++ donc je ne vais pas parler sur ca...

comme un futur IDE correct que jaimerais avoir sur mon bureau je ne vais pas commenter cette extension .cpp

J'essayerais de travailler avec un IDE C++ dont l'EXTENSION est differente du premier projet en C++..
Amicalement

Tunisien....
profil | edit | quote
Newtopic | Reply 1 | 2 | 3 |

Online : Alonzorot, KennethWeshy, Ksnftousy, Lancepef, Mndsfmainna, MuratOn, MyronGot, RandyMycle, Robertrow, Rodneyhor, RolandoEluby, Stephendrure, Tizgarfum et 85 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page