onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008
-
9 juin 2008 à 13:40
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008
-
16 juin 2008 à 15:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 16 juin 2008 à 15:45
Merci sincèrement pour cette note.
Je vais me mettre à une nouvelle mise à jour du code en gérant donc manuellement la mémoire à grand coups de new et delete[]...
Je sais me servir de ceci mais n'ai jamais réellement utilisé ce concept. Le résultat risque de faire un petit peu brouillon au début... En espérant pouvoir de nouveau vous faire confiance quand à vos conseils formateurs.
Merci encore
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 16 juin 2008 à 10:57
Salut
Bon voila d'autres petits commentaires:
Pourquoi declares-tu pour toutes tes boucles des "unsigned long int", des simples int ne sont t'il pas suffisant(32767 caracteres au min tout de meme!)?
Beaucoup plus important, il ne faut jamais mettre dans une boucle des vector ( truc.size() ). A chaque fois que la boucle s'incremetera, il recalculera la taille du vector ce qui est completement inutile. Il faut faire quelque chose comme ca:
int size= truc.size();
for(int i;i<size;i++)
...
Sinon, la POO est bien assimile et c'est toujours aussi bien commente.
En fait je disais de laisser tomber les string pour des char, pour que tu geres toi meme la gestion de la memoire. Les string, les vector, passent beaucoup de temps a faire des realloc alloc et free ce qui est couteux en performance.
Autre avantage, il est aussi tres formateur de le faire par toi meme, meme si au debut tu obtiendras quelque chose de moins optimise que les string ou vector.
Je te mets 8/10 pour tous les efforts concentits et pour cette source qui pourra aider les debutants.
A+
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 14 juin 2008 à 17:37
Voilà, la nouvelle source est postée.
Lachez vos critiques ! :)
Ps: "cout << "\033[2J" << endl;" ne fonctionne pas sous Vista.
J'ai laissé donc le code comme avant à ce niveau.
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 14 juin 2008 à 13:31
Tu as raison Sodams, merci du conseil.
En fait j'ai tout recodé cela fait déjà un moment en POO.
Le code est beaucoup mieux pensé et beaucoup plus digeste.
Je me retrouve avec un main et une classe Mystere qui contient toutes ses fonctions plus 3, 4 statiques pour afficher le titre ETC...
Je posterai quand j'en aurais le temps, la source étant sur un autre ordinateur que celui ayant la connexion au NET.
Sodams : oouuuuhhh double post le vilain.
----) Bienvenue au club ! :D
cs_Sodams
Messages postés57Date d'inscriptionmercredi 11 juin 2008StatutMembreDernière intervention18 novembre 2009 14 juin 2008 à 01:17
Encore une chose (oouuuuhhh double post le vilain)
Essaie d'optimiser au maximum ton code.
Dans ta fonction ici tu répètes 2 fois des même lignes :
cs_Sodams
Messages postés57Date d'inscriptionmercredi 11 juin 2008StatutMembreDernière intervention18 novembre 2009 14 juin 2008 à 01:12
Je n'aime pas les longs main();
J'opterais plus tôt pour une fonction menu supplémentaire.
L'avantage de la POO, est de pouvoir réutiliser tes classes plus tard.
Si un jour tu veux faire un pendu avec une belle interface, tu n'auras plus qu'a reprendre ta classe.
Cela te permet également d'avoir beaucoup moins de variables à passer en paramètre (et donc, de moins se prendre la tête avec les références).
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 11 juin 2008 à 17:24
Pffffffffffiouuuuuuuuuuu...........
Enfin, ça compile !
J'ai passé un bon bout de temps à améliorer le code, sa lisibilité... et surtout à l'adapter à la POO !
J'ai suivi vos conseils, reste deux trois trucs à régler au niveau de deux fonctions statiques...
J'ai fait en sorte de ne pas utiliser un seul string pour faire hommage à pistol_Pete. ;)
J'ai ainsi tout remplacer par des vecteurs< char >...
Ca m'a pas mal compliqué la vie mais maintenant ça fonctionne !
Je règle les deux trois détails et j'édite !
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 11 juin 2008 à 08:08
Ok génial ! :D
Je vais retaper mon code cet après-midi en l'adaptant à vos conseils et en intégrant la notion de POO ( genre une structure/classe MotMystere...).
Je verrai bien. :)
Merci pour le "\033[2J", je ne connaissais pas du tout ce genre de chaine bizarre... :)
Je vous remercie tous, JOJO930, Spoolega et Pistol_Pete, en espérant pouvoir de nouveau compter sur vos conseils et astuces après la mise à jour du code.
Bye, bonne journée. :]
jojo930
Messages postés9Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention20 août 2008 11 juin 2008 à 05:45
Arf c'est sûr qu'il n'y a pas grand chose à mettre en POO ...
Pour effacer la console (Testé sous Linux) : cout << "\033[2J" << endl; ou encore system("clear");
Dans tout les cas, je pense qu'il est préférable d'éviter les system("cls/clear"), je trouve ça brouillon...
Je me demande pourquoi il n'y a pas de fonctions POSIX pour cela, d'ailleurs.
Bye.
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 10 juin 2008 à 19:55
Salut Pistol_Pete ! :]
Bien vu pour le vector.h ! ;) Je m'en étais servi pour stocker les lettres déjà entrées dans un vector< char > à grand coup de push_back()...
Finalement j'ai décidé de tout stocker dans une chaine string pour éviter d'avoir à inclure cette bibli... ce que j'ai oublié de retirer ! :D
Merci également pour le srand(), tu as raison c'est une grosse gourde de ma part ! :)
Un point que je ne comprends pas cependant... Pourquoi me conseilles-tu d'abandonner les string ? Je dois employer de simples tableaux de char C ???
Quel est le défaut de cet emploi ?
Merci en tout cas pour ton aide et en espérant avoir à refaire à tes précieux conseils, je te dis à la prochaine ! :)
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 10 juin 2008 à 11:15
Salut
Voila j'apporte aussi quelques remarques:
-Pourquoi inclure vector.h alors que tu ne t'en sert pas?
-Dans ta fonction nombreAleatoire, il est inutile d'appeler srand() a chaque fois que tu appeles cette fonction. srand sert a initialiser le random. Il doit donc etre executer UNE SEULE fois au debut du programme.
Voila pour les remarques. J'ajouterai que c'est bien commenté et que l'organisation du programme est bonne. Il reste maintenant a abandonner les string et a pourquoi pas faire une petite interface graphique.
Bonne continuation
A+
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 10 juin 2008 à 08:28
Euuh... Je ferai ça après avoir obtenu des réponses... Là je suis au CDI du lycée donc... ce sera pour ce soir...
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 10 juin 2008 à 08:25
Bonjour messieurs ! :)
Tout d'abord, merci d'avoir répondu et de m'apporter vos conseils...
Spoolega: Je vais initialiser ça, tu as raison. Pas de warning cependant...
Merci.
JOJO930: C'est vrai, aucune utilisation de la POO... Je me dois de te poser une question... Faut-il utiliser la POO dans le cas où un seul objet sera instancié ?
Simplement pour "ranger les fonctions" ?
Dans un cas tel que ce petit jeu, quelles classes devrai-je créer ? Mot, Joueur, AI ? Merci de m'éclairer un peu sur ce point qui me semble obscur...
Quant à la portabilité de mon code, je suis d'accord et me suis toujours rendu compte de ce défaut. J'utilise en permanence les deux fonctions systemes DOS "CLS" et "PAUSE", car je ne connais pas d'alternative... Si tu as un lien à ce sujet, ou tout simplement la réponse, je suis preneur !
En attendant, je vais modifier mon code pour l'adapter à la POO et je remettrai plus tard en ligne... Merci ! :)
jojo930
Messages postés9Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention20 août 2008 10 juin 2008 à 06:02
Salut,
Quel est l'interêt de dire "je l'ai écris en C++" si ton code est pas orienté objet ?
Utilisation de system("CLS") <-- Pas portable.
Bon code pour débuter, mais après...
Essai encore :) !
Spoolega
Messages postés65Date d'inscriptiondimanche 8 janvier 2006StatutMembreDernière intervention27 février 20111 9 juin 2008 à 23:57
absolument pas*
Spoolega
Messages postés65Date d'inscriptiondimanche 8 janvier 2006StatutMembreDernière intervention27 février 20111 9 juin 2008 à 18:58
Bonjour,
Dans ton main, tu viens tester tout de suite ta variable 'choixMenu' dans le while... elle est bien déclarée mais absolument initialisée, ca me "gène" un peu.
Ca ne provoque pas un warning ? O_O
je n'ai pas regardé le reste.
++
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 9 juin 2008 à 14:58
Svp, j'aimerai vraiment avoir le conseil de personnes expérimentées pour m'améliorer...
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 9 juin 2008 à 13:40
16 juin 2008 à 15:45
Je vais me mettre à une nouvelle mise à jour du code en gérant donc manuellement la mémoire à grand coups de new et delete[]...
Je sais me servir de ceci mais n'ai jamais réellement utilisé ce concept. Le résultat risque de faire un petit peu brouillon au début... En espérant pouvoir de nouveau vous faire confiance quand à vos conseils formateurs.
Merci encore
16 juin 2008 à 10:57
Bon voila d'autres petits commentaires:
Pourquoi declares-tu pour toutes tes boucles des "unsigned long int", des simples int ne sont t'il pas suffisant(32767 caracteres au min tout de meme!)?
Beaucoup plus important, il ne faut jamais mettre dans une boucle des vector ( truc.size() ). A chaque fois que la boucle s'incremetera, il recalculera la taille du vector ce qui est completement inutile. Il faut faire quelque chose comme ca:
int size= truc.size();
for(int i;i<size;i++)
...
Sinon, la POO est bien assimile et c'est toujours aussi bien commente.
En fait je disais de laisser tomber les string pour des char, pour que tu geres toi meme la gestion de la memoire. Les string, les vector, passent beaucoup de temps a faire des realloc alloc et free ce qui est couteux en performance.
Autre avantage, il est aussi tres formateur de le faire par toi meme, meme si au debut tu obtiendras quelque chose de moins optimise que les string ou vector.
Je te mets 8/10 pour tous les efforts concentits et pour cette source qui pourra aider les debutants.
A+
14 juin 2008 à 17:37
Lachez vos critiques ! :)
Ps: "cout << "\033[2J" << endl;" ne fonctionne pas sous Vista.
J'ai laissé donc le code comme avant à ce niveau.
14 juin 2008 à 13:31
En fait j'ai tout recodé cela fait déjà un moment en POO.
Le code est beaucoup mieux pensé et beaucoup plus digeste.
Je me retrouve avec un main et une classe Mystere qui contient toutes ses fonctions plus 3, 4 statiques pour afficher le titre ETC...
Je posterai quand j'en aurais le temps, la source étant sur un autre ordinateur que celui ayant la connexion au NET.
Sodams : oouuuuhhh double post le vilain.
----) Bienvenue au club ! :D
14 juin 2008 à 01:17
Essaie d'optimiser au maximum ton code.
Dans ta fonction ici tu répètes 2 fois des même lignes :
afficherTitre();
et system("PAUSE");
# void finPartie(string &motTrouve, string &motMystere) {
# if(motTrouve == motMystere) {
# afficherTitre();
# cout << " VOUS AVEZ TROUVE LE MOT MYSTERE !" << endl << endl;
# cout << " Ce dernier etait bien : "<< motMystere <<"" << endl << endl << endl << " ";
# system("PAUSE");
# }
#
# else {
# afficherTitre();
# cout << " VOUS AVEZ PERDU !" << endl << endl;
# cout << " Le mot mystere etait : "<< motMystere <<"" << endl << endl << endl << " ";
# system("PAUSE");
# }
# }
Qui deviendrait donc :-)
# void finPartie(string &motTrouve, string &motMystere) {
# afficherTitre();
# if(motTrouve == motMystere) {
# cout << " VOUS AVEZ TROUVE LE MOT MYSTERE !" << endl << endl;
# cout << " Ce dernier etait bien : "<< motMystere <<"" << endl << endl << endl << " ";
# }
# else {
# cout << " VOUS AVEZ PERDU !" << endl << endl;
# cout << " Le mot mystere etait : "<< motMystere <<"" << endl << endl << endl << " ";
#
# }
# system("PAUSE");
# }
14 juin 2008 à 01:12
J'opterais plus tôt pour une fonction menu supplémentaire.
L'avantage de la POO, est de pouvoir réutiliser tes classes plus tard.
Si un jour tu veux faire un pendu avec une belle interface, tu n'auras plus qu'a reprendre ta classe.
Cela te permet également d'avoir beaucoup moins de variables à passer en paramètre (et donc, de moins se prendre la tête avec les références).
11 juin 2008 à 17:24
Enfin, ça compile !
J'ai passé un bon bout de temps à améliorer le code, sa lisibilité... et surtout à l'adapter à la POO !
J'ai suivi vos conseils, reste deux trois trucs à régler au niveau de deux fonctions statiques...
J'ai fait en sorte de ne pas utiliser un seul string pour faire hommage à pistol_Pete. ;)
J'ai ainsi tout remplacer par des vecteurs< char >...
Ca m'a pas mal compliqué la vie mais maintenant ça fonctionne !
Je règle les deux trois détails et j'édite !
11 juin 2008 à 08:08
Je vais retaper mon code cet après-midi en l'adaptant à vos conseils et en intégrant la notion de POO ( genre une structure/classe MotMystere...).
Je verrai bien. :)
Merci pour le "\033[2J", je ne connaissais pas du tout ce genre de chaine bizarre... :)
Je vous remercie tous, JOJO930, Spoolega et Pistol_Pete, en espérant pouvoir de nouveau compter sur vos conseils et astuces après la mise à jour du code.
Bye, bonne journée. :]
11 juin 2008 à 05:45
Pour effacer la console (Testé sous Linux) : cout << "\033[2J" << endl; ou encore system("clear");
Dans tout les cas, je pense qu'il est préférable d'éviter les system("cls/clear"), je trouve ça brouillon...
Je me demande pourquoi il n'y a pas de fonctions POSIX pour cela, d'ailleurs.
Bye.
10 juin 2008 à 19:55
Bien vu pour le vector.h ! ;) Je m'en étais servi pour stocker les lettres déjà entrées dans un vector< char > à grand coup de push_back()...
Finalement j'ai décidé de tout stocker dans une chaine string pour éviter d'avoir à inclure cette bibli... ce que j'ai oublié de retirer ! :D
Merci également pour le srand(), tu as raison c'est une grosse gourde de ma part ! :)
Un point que je ne comprends pas cependant... Pourquoi me conseilles-tu d'abandonner les string ? Je dois employer de simples tableaux de char C ???
Quel est le défaut de cet emploi ?
Merci en tout cas pour ton aide et en espérant avoir à refaire à tes précieux conseils, je te dis à la prochaine ! :)
10 juin 2008 à 11:15
Voila j'apporte aussi quelques remarques:
-Pourquoi inclure vector.h alors que tu ne t'en sert pas?
-Dans ta fonction nombreAleatoire, il est inutile d'appeler srand() a chaque fois que tu appeles cette fonction. srand sert a initialiser le random. Il doit donc etre executer UNE SEULE fois au debut du programme.
Voila pour les remarques. J'ajouterai que c'est bien commenté et que l'organisation du programme est bonne. Il reste maintenant a abandonner les string et a pourquoi pas faire une petite interface graphique.
Bonne continuation
A+
10 juin 2008 à 08:28
10 juin 2008 à 08:25
Tout d'abord, merci d'avoir répondu et de m'apporter vos conseils...
Spoolega: Je vais initialiser ça, tu as raison. Pas de warning cependant...
Merci.
JOJO930: C'est vrai, aucune utilisation de la POO... Je me dois de te poser une question... Faut-il utiliser la POO dans le cas où un seul objet sera instancié ?
Simplement pour "ranger les fonctions" ?
Dans un cas tel que ce petit jeu, quelles classes devrai-je créer ? Mot, Joueur, AI ? Merci de m'éclairer un peu sur ce point qui me semble obscur...
Quant à la portabilité de mon code, je suis d'accord et me suis toujours rendu compte de ce défaut. J'utilise en permanence les deux fonctions systemes DOS "CLS" et "PAUSE", car je ne connais pas d'alternative... Si tu as un lien à ce sujet, ou tout simplement la réponse, je suis preneur !
En attendant, je vais modifier mon code pour l'adapter à la POO et je remettrai plus tard en ligne... Merci ! :)
10 juin 2008 à 06:02
Quel est l'interêt de dire "je l'ai écris en C++" si ton code est pas orienté objet ?
Utilisation de system("CLS") <-- Pas portable.
Bon code pour débuter, mais après...
Essai encore :) !
9 juin 2008 à 23:57
9 juin 2008 à 18:58
Dans ton main, tu viens tester tout de suite ta variable 'choixMenu' dans le while... elle est bien déclarée mais absolument initialisée, ca me "gène" un peu.
Ca ne provoque pas un warning ? O_O
je n'ai pas regardé le reste.
++
9 juin 2008 à 14:58
9 juin 2008 à 13:40