CALCUL DU PGCD : EXEMPLE DE RÉCURSIVITÉ

cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 12 juin 2012 à 23:00
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 14 juin 2012 à 00:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54376-calcul-du-pgcd-exemple-de-recursivite

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 juin 2012 à 00:50
>> Hors je sais les utiliser nuance
Tu ne savais même pas qu'un namespace pouvait être limité, donc niveau crédibilité... Effectivement nuance !
C'est difficile de parler avec toi, tu ne sors aucun argument, ni exemple (pourtant j'ai parlé d'un exemple véritable, pas de question ?).
Tu ne cesses de répéter en boucle: Nan mais moi, j'ai pas eu de problème => donc personne n'a de problème => aucun problème ne peut avoir lieu.

>> Mais c'est pas pour ça que je vais aller faire ***** les autres qu'ils n'ont pas la bonne pratique.
Je m'en moque complètement que tu utilises de mauvaises pratiques tant que:
- On ne bosse pas ensemble sur un même projet.
- Ça ne soit pas montré publiquement, à tord, aux débutants comme une bonne pratique.

>> c'est ce qui est fait partout et enseigné partout
Absolument pas. J'ai quelques exemples, de tête ou c'est correctement enseigné. (Pas de pub, mp si tu veux les noms).

>> Si les professionnels continue d'apprendre l'usage du using namespace
S'il continue de le proscrire tu veux dire ? Bizarrement, j'ai toujours bossé avec des gens qui l'évitaient...

>> en utiliser qu'un par exemple, celui dont on a le plus besoin, ce que je fais
Aucun rapport. Le problème le plus vicieux, n'est pas lié au nombre de namespace utilisé. C'est essentiellement le masquage silencieux de fonction qui peut faire mal...

>> J'ai donc appris une pratique parfaitement fonctionnelle et ne posant aucun problème [...] Donc ma pratique est parfaitement bonne
Et encore un très joli sophisme :p (Tu as fait des études littéraires ?)
http://fr.wikipedia.org/wiki/Sophisme

>> Ce que je veux dire c'est que oui il est mieux de limiter
Pffou on avance un peu.

>> j'ai fait le choix de la portée globale ce que l'on déconseille comme on déconseille d'avoir dans sa classe les variables en public ou protected si il y en a pas besoin dans ce cas là.
Et oui, les deux sont déconseillés pour une bonne raison... Encore une fois, tu es libre de faire ce que tu veux. Mais ne me reproche pas de le signaler.

>> mais ma façon de faire ne pose aucun problème et n'est pas forcément à proscrire
Encore, une fois, tombe sur une erreur vicieuse de masquage en production, et après on en reparle.

>> Tant que tu utilises correctement pas de soucis
Je dirais même tant qu'il n'y a pas de problème, il n'y a pas de souci ! D'ailleurs s'il n'y a pas de souci, il n'y a pas de problème. CQFD.
Plus sérieusement, mieux vaut prévenir que guérir. Ne pas utiliser de "using" à l'arrache, c'est ajouter une couche de protection. Tu peux ne pas l'utiliser, mais c'est une bonne pratique de l'avoir. Pas question que je n'indique pas cette possibilité aux débutants.

>> D'ailleurs en parlant des variables globales, elles sont à proscrire mais pourtant on retrouve des cas où elles sont utilisées, pas forcément en C++ mais en C c'est chose courante, on va pourtant pas aller faire notre cirque qu'il faut pas s'en servir.
Encore une fois, ce n'est pas parce que tu l'as vu une fois dans un code, que c'est bien. Je suis prêt à voir le code dont tu parles et à te montrer qu'une variable globale peut toujours s'éviter. Voir à te réécrire le code pour l'éviter.
C'est une erreur que je t'aurais fait remarquer si tu l'avais faite.

>> [variables globales] mais en C c'est chose courante,
Oo ! Mais dans quelle école tu étudies ! (Non non, ne donne pas de nom, c'est une question rhétorique).

>> contrairement aux variables globales qui elles sont communes à tout le projet.
Les variables globales sont normalement limitées à un fichier de code, il faut utiliser explicitement une directive (extern) pour pouvoir l'utiliser dans un autre fichier de code. *A moins* que tu mettes aussi tes variables globales à l'arrache dans un header ? (Autre débat ?)

>> Un cas où mon using pose pas de soucis
Ce n'est pas le cas. Il y a bien souci pédagogique.

>> je ne vois pas pourquoi on viendrait critiquer et faire son cirque.
Je te rappelle que c'est toi qui est venu "faire ton cirque". Tu n'aimes apparemment pas la critique... Quant à "critiquer", tu es sur une section dédiée à la critique ! Évidemment que ton code est critiqué.

>> Si les professionnels continue d'apprendre l'usage du using namespace, peut être ont ils l'intelligence d'expliquer justement les risques et quoi faire pour éviter le problème
Tout à fait d'accord. Pour éviter les problèmes, cf mon lien. Lors de formation ou de cours, j'explique toujours cette notion à mes élèves, appuyant effectivement sur les risques et comment les éviter.

>> (je demanderais à mon frère qui est développeur de métier ce que son prof a dit à ce sujet).
J'avoue tu m'as bien faire rire sur ce coup :p
De mon côté, je demanderais à la cousine du beau frère d'un ami dont le copain de sa soeur est "développeur de métier", histoire de voir ce que le grand père de son prof aurait pu dire à ce sujet.
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
13 juin 2012 à 22:41
Pour qu'il y est un vrai problème de namespace, il faut ne pas les utiliser correctement. Hors je sais les utiliser nuance. Ce n'est pas parce que j'utilise les namespace en portée globale que forcément j'aurais un code qui déconnera, il déconnera si mon namespace est en conflit et c'est pour ça que dans le doute quand j'ai deux namespace j'en utilise qu'un seul, l'autre j'ai pris pour habitude de l'utiliser directement en préfixe mais maintenant que je sais qu'on peut limité le using à une classe ou fonction, je pourrais à loisir utiliser les using namespace et clarifier donc encore plus mon code (de mon point de vue). Mais c'est pas pour ça que je vais aller faire ***** les autres qu'ils n'ont pas la bonne pratique.

Oui un débutant voyant mon code utilisera les using namespace comme je le fais, c'est ce qui est fait partout et enseigné partout, c'est à la personne ensuite si elle tombe sur un problème, d'aller se renseigner avec la doc c'est tout. C'est pas comme si on lui foutait entre les main un code complexe et qu'on lui demandait de l'utiliser, là se renseigner sur les using namespace c'est fait en quelques cliques.

Si les professionnels continue d'apprendre l'usage du using namespace, peut être ont ils l'intelligence d'expliquer justement les risques et quoi faire pour éviter le problème (je demanderais à mon frère qui est développeur de métier ce que son prof a dit à ce sujet).

Au début moi j'ai appris les using namespace comme ce que je fais, bien vite j'ai appris ensuite les risques de conflits et comment gérer dans ce cas là (en utiliser qu'un par exemple, celui dont on a le plus besoin, ce que je fais ; j'avais pas appris la limitation de portée du using namespace). J'ai donc appris une pratique parfaitement fonctionnelle et ne posant aucun problème et qui correspond au site que j'ai cité : soit ne pas utiliser, soit utiliser uniquement ceux ne créant pas de conflit ou alors limiter la portée. Donc ma pratique est parfaitement bonne, simplement j'ai fait le choix de la portée globale ce que l'on déconseille comme on déconseille d'avoir dans sa classe les variables en public ou protected si il y en a pas besoin dans ce cas là.

Ce que je veux dire c'est que oui il est mieux de limiter, mais ma façon de faire ne pose aucun problème et n'est pas forcément à proscrire, ce qui est à proscrire c'est la mauvaise utilisation. Tan que tu utilises correctement pas de soucis et que je sache le using namespace en global a toujours une portée limitée : le fichier (a ce que j'en avais constaté un jour où j'ai oublié de mettre le using namespace dans un des autres fichiers du projet), contrairement aux variables globales qui elles sont communes à tout le projet.

D'ailleurs en parlant des variables globales, elles sont à proscrire mais pourtant on retrouve des cas où elles sont utilisée, pas forcément en C++ mais en C c'est chose courante, on va pourtant pas aller faire notre cirque qu'il faut pas s'en servir.

Un cas où mon using pose pas de soucis, je ne vois pas pourquoi on viendrait critiquer et faire son cirque. De plus mon code n'est pas là pour parler des using namespace mais apprendre à faire une fonction récursive et pour cela j'ai pris l'exemple du calcul du PGCD puisque ceci est très simple à faire.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 juin 2012 à 22:03
>> Je veux pas te contredire mais limiter les namespace à une seule fonction j'en vois pas l'intérêt autant dans ce cas là ne pas s'en servir tout simplement.
Raison pour laquelle je ne l'utilise quasiment pas. Ce n'est pas pour autant inutile. Ça m'a quand même bien servi pour du boost::spirit !

>> Je n'ai pas d'expérience professionnelle, mais je constate avec était en relation avec des professionnels et ils utilisent les namespace comme moi et n'ont aucun problème.
C'est bien ce que je pensais. Je te propose d'en reparler dans quelques années. Il y a un fossé entre expérience professionnelle et "j'ai un ami d'un ami qui m'a dit que".

>> Pour une classe je suis d'accord mais là c'est inutile.
Une bonne pratique c'est toujours une bonne pratique. Tu aurais pu utiliser une variable globale dans un code de deux lignes, je t'aurais fait la remarque qu'une variable globale est à proscrire et au pire à être contrôlé via un singleton. Et bien ici, c'est pareil. Ce n'est pas parce que le code est petit que la mauvaise pratique devient bonne.

>> tu dis bien : "n'utilisez pas using namespace, jamais !" et pourtant sur la page tu montres l'utilisation du using namespace.
Je te cite la première phrase de mon paragraphe qui porte dessus: "Maintenant que l'on a vu, pourquoi ne jamais utiliser de clause using namespace, voyons comment remplacer celle-ci de manière intelligente."
En quoi je me contredis ? C'est un peu la phrase d'amorce si tu préfères. Mon argumentation reste claire, et le plan est suivi.

>> Je cite : "Il est conseillé de limiter l'utilisation de using namespace car cela fait tout simplement perdre l'utilité des namespaces. En particulier, son usage est à proscrire dans les fichiers d'en-tête, ainsi que dans les cas où il
>>génère des conflits avec d'autres namespaces. On peut pour cela restreindre la portée de la clause using à un bloc en particulier :"
Heu... C'est *exactement* ce que je dis !
Oui, l'usage d'un using namespace fait perdre l'utilité d'un namespace !
Oui, c'est à proscrire dans une portée globale !
Oui, il faut restreindre la portée d'une clause using à un bloc particulier !
Je suis totalement en phase avec le site que tu viens de me donner. Citation qui appuie totalement mon argumentation.

>> Déjà ici il disent qu'il est conseillé de limiter son utilisation, toi tu interdis, voila déjà une sacrée nuance
Limiter ou interdire, il n'y a ici pas de différence. J'aurais pu le formuler: vous pouvez l'utilisez, tout comme vous pouvez vous tirer une balle dans le pied. Si tu n'as pas saisi ce que disait le site: Il entendent par limiter == à ne pas faire. Tout comme il conseille de "limiter" l'usage de variable globale...
Ex: http://cpp.developpez.com/faq/cpp/?page=classes#CLASS_singleton

Je cite: "Pour limiter le nombre d'instances d'une classe,"
Un singleton, par définition, interdit de multiple instance d'une classe (une seule possible). Limiter veut bien dire interdire.

On pourrait pinailler sur les mots encore longtemps... Mais si tu en es à critiquer le choix des mots et leurs sens dans un contexte donné => Manque d'argument :p ?
(Mais tu as réussi à me citer un site qui appuie ce que j'explique pour essayer de me contredire, il fallait le faire !)

>> Hors que je sache mon code ne pose aucun problème de conflit, conclusion mon usage du using namespace ne pose pas de problème et je peux donc l'utiliser comme ça.
Joli sophisme, mais ça ne prend pas.
Moi aussi je peux en faire:
- Je peux utiliser une variable globale dans un code de deux lignes.
- Ça va parfaitement marcher
- Donc les variables globales ne sont pas un problème

Encore une fois, quelque soit la taille d'un code, je signalerais toujours une mauvaise pratique.

>> Après oui il est conseillé d'en limiter la portée, mais là quel en aurait été l'intérêt ? Pour une classe je suis d'accord mais là c'est inutile.
Si tu l'avais fait, un débutant qui lit ton code se poserais la question: Tiens pourquoi a-t-il fait ça ? Et il se renseignera un minimum. Si tu ignores constamment toutes bonnes pratiques par flemme, ça n'aide pas les débutants. La preuve, tu ne savais pas qu'on pouvait limiter la portée d'un namespace, avant que j'en parle !

>> Pour l'instant donc tu m'as rien donné comme argumentation qui tend sur la non utilisation ou son utilisation en portée limité
C'est une blague ou de la simple mauvaise foi ? J'ai décrit toute mon argumentation dans le lien donné, ainsi que des exemples qui mènent a des erreurs d'exécution et de compilation. Je ne peut être plus exhaustif. L'un des exemples, bien que simplifié, est un vrai exemple arrivé en production lorsque l'on m'a demandé d'incorporer un ancien code dans une solution plus grosses. Un bug dû à un namespace, a fait perdre une sacré somme d'argent à l'entreprise. Je peux t'assurer que ça fait réfléchir (pourtant il n'y avait pas de using namespace dans le header, mais il y en avait dans le code...). Description détaillé en mp si tu le désires (je n'ai pas le droit de trop détailler sur un forum public pour des raisons évidentes).

>> Est-ce que j'ai fait n'importe quoi ?
Oui. Mais tu es libre de le faire.

>> car aucuns conflits et pas de présence dans un header.
Je te souhaite, dans ta future vie professionnelle, de ne pas tomber sur un vrai gros projet avec un souci de using namespace. Là tu comprendras (malheureusement il faut souvent en passer par là).
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
13 juin 2012 à 21:21
Je veux pas te contredire mais limiter les namespace à une seule fonction j'en vois pas l'intérêt autant dans ce cas là ne pas s'en servir tout simplement. Ton argument me semble bancale. D'autres part, ton lien j'ai pas pris la peine de le regarder car j'ai pensé à un lien comme ceux que j'ai eux. Ceux que j'ai eux ne parlaient absolument pas de limiter la portée du using namespace, je ne savais même pas que c'été possible.

Je n'ai pas d'expérience professionnelle, mais je constate avec était en relation avec des professionnels et ils utilisent les namespace comme moi et n'ont aucun problème.

Ma façon de faire n'est peut être pas des meilleurs, mais un code aussi minimal n'aura pas de soucis avec le using namespace d'ailleurs il m'a jamais posé de problèmes. Venir dire que c'est pas le bon moyen de faire quant on poste un gros truc OK, mais là venir critiquer un code dès plus minimal ce fut la goutte qui a fait débordé le vase.

Pour information, tu sais que ce n'est pas un lien trouvé sur le net, que tu as rédigé cet article et dedans tu dis bien : "n'utilisez pas using namespace, jamais !" et pourtant sur la page tu montres l'utilisation du using namespace. Oui au sein d'une fonction donc à portée limité mais tu l'utilises quand même ce qui est en totale contradiction avec ta phrase du début de l'article.

Ensuite un using namespace dans une fonction quel en est l'intérêt ? Autant préfixé tout simplement.
Autre chose, information provenant de ce site en qui j'ai pleinement confiance : http://cpp.developpez.com/faq/cpp/?page=namespace

Je cite : "Il est conseillé de limiter l'utilisation de using namespace car cela fait tout simplement perdre l'utilité des namespaces. En particulier, son usage est à proscrire dans les fichiers d'en-tête, ainsi que dans les cas où il génère des conflits avec d'autres namespaces. On peut pour cela restreindre la portée de la clause using à un bloc en particulier :"

Déjà ici il disent qu'il est conseillé de limiter son utilisation, toi tu interdis, voila déjà une sacrée nuance. Ensuite il est dit que c'est à proscrire dans les header, donc en global dans le fichier source on peut l'utiliser en tout cas d'après cette phrase. Ensuite il est dit aussi de l'éviter dans le cas où cela génère des conflits avec d'autres namespace, on en revient donc à ce que je disais : savoir utiliser de façon intelligente les using namespace, un programme en utilisant beaucoup doit choisir celui ou ceux qui seront à utiliser, par exemple ceux dont on a le plus besoin. Dans le cas donc des conflits, on peut restreindre à un bloc particulier.

Hors que je sache mon code ne pose aucun problème de conflit, conclusion mon usage du using namespace ne pose pas de problème et je peux donc l'utiliser comme ça. Après oui il est conseillé d'en limiter la portée, mais là quel en aurait été l'intérêt ? Pour une classe je suis d'accord mais là c'est inutile.

Et comme je m'en sert pas dans les fichiers d'en-têtes, toujours aucun problème.

Pour l'instant donc tu m'as rien donné comme argumentation qui tend sur la non utilisation ou son utilisation en portée limité. On en revient donc à ce que j'ai dit : savoir l'utiliser et pas faire n'importe quoi. Est-ce que j'ai fait n'importe quoi ? Non car aucuns conflits et pas de présence dans un header.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 juin 2012 à 19:46
>> faut pas utiliser les namespace
Il ne faut pas utiliser "using namespace" nuance ! (Précisément, il faut absolument éviter "using namespace" dans une portée globale).

>> d'utiliser le namespace c'est de l'utiliser n'importe comment.
Tout à fait d'accord. Si tu avais lu le lien, tu verrais que c'est ce qui est expliqué. (J'explique pourtant comment le faire proprement et de plusieurs manières ! Using en portée limitée par exemple...).

>> plutôt que balancez qu'il faut pas les utiliser et filer un lien.
Je t'explique ma démarche: J'en avait tellement marre de devoir réexpliquer sans cesse la même chose, que j'ai fini par synthétiser au propre comment utiliser correctement les namespaces. Le lien n'est qu'une manière pour moi de ne pas copier coller sans cesse des explications. Je ne balance pas un lien que j'ai trouvé sur le net, je ne fais qu'inclure mon argumentation (que j'ai écrite) à l'aide de ce lien. Tu voudrais que je fasse du copier-coller ?

>> on nous donne aucune liberté, on nous impose
Rien ne t'es imposé. Si tu veux utiliser 70 variables globales, remplacer tout tes while par des goto, tout coder dans un "main" de 7000 lignes, utiliser un "using namespace" à l'arrache, c'est toi choix. Encore une fois, nous sommes libres de critiquer, qui plus est sur la section dédiée à cela !

>> Donc aucun problème à l'utiliser si on le fait comme il faut point barre.
Tout à fait. Mais ici, tu ne fais pas "comme il faut"...

Juste par curiosité: Quelles sont tes expériences professionnelles ? As-tu déjà travaillé sur une base de code très grosse ? As-tu déjà du résoudre un bug d'exécution ou de compilation dû au using namespace ? (Un "using namespace" ne fait pas que provoquer des erreurs de compilation, il peut aussi entrainer des erreurs d'exécution, très vicieuse à détecter. Je parle en connaissance de cause.)
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
13 juin 2012 à 19:11
C'est bizarre mais j'ai pourtant vu des codes de pros et tous utilisent les namespace mais à bon escient. J'ai pas dis que vous pouviez pas critiquer, mais faut du constructif pas du : "faut pas utiliser les namespace" et balancer ensuite un lien. Simplement dire qu'il y a un moyen de faire mieux que d'utiliser les namespace. Car là on montre que vous incitez à aller voir comment faire mieux, plutôt que balancez qu'il faut pas les utiliser et filer un lien.

Et excuse moi, mais je vois partout des commentaires de ce genre, voir sans cesse qu'il faut pas utiliser les namespace désolé mais là on nous donne aucune liberté, on nous impose. L'erreur je le redis c'est pas d'utiliser le namespace c'est de l'utiliser n'importe comment.
J'en ai eu pleins des commentaires avec des liens et tout ceux que j'ai lu expliquaient les danger du namespace si c'est mal utilisé c'est tout. Donc aucun problème à l'utiliser si on le fait comme il faut point barre.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 juin 2012 à 18:54
>> Si on veut les utiliser c'est notre droit et vous vous n'avez pas le droit bla bla bla...
Tout à fait. C'est aussi mon droit de critiquer ton code. En effet, on poste ici des codes pour les soumettre à la critique. Si tu ne supportes pas la critique, je ne peux rien faire pour toi...
Je te retourne la remarque: de quel droit n'aurait-on pas l'opportunité de soumettre nos critiques constructives au code que tu soumets à cette même critique ?

>> on critique ma façon de coder, comme si la votre était la seule façon de coder de façon fonctionnelle.
Sans être méchant, je pense que tu manques d'expérience. Tu fais des petites erreurs/maladresses évidentes. Que faudrait-il donc faire ? Ne rien faire, ne rien dire, et laisser des débutants copier tes erreurs ? À quoi servirait un site d'échange dans ce cas ?
Il y a certes plusieurs façon de coder, mais une maladresse ou une erreur n'est pas à confondre avec un style de code. Tu manques encore un peu de recul pour distinguer ces deux choses. Ne t'inquiète pas, ça viendra avec l'expérience.

>> je dis que j'ai voulut contribuer et je constate le résultat : on critique ma façon de coder
Tiens on critique ton code dans une section dédié à la critique, mais c'est une honte :p !

>> Faut arrêter de se prendre pour le centre du monde.
Bien dit !
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
13 juin 2012 à 18:41
Moi je constate juste une chose : dès que quelqu'un utilise les namespace vous faîtes ***** ces personnes qu'il faut pas les utiliser. Si on veut les utiliser c'est notre droit et vous vous n'avez pas le droit, admin du site ou non de venir nous faire vos réflexions à deux balles.

J'ai jamais dit que ca allait être delete parce que mauvaise pratique, je dis que j'ai voulut contribuer et je constate le résultat : on critique ma façon de coder, comme si la votre était la seule façon de coder de façon fonctionnelle. Faut arrêter de se prendre pour le centre du monde.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 juin 2012 à 15:50
>> Bon ben puisque mes sources ne semblent pas apprécier du aux namespace je mettrait plus rien ici. Voila comment on est récomposé pour avoir voulut contribuer.
La source va être supprimée, parce que trop légère, et non pour usage de mauvaises pratiques (sinon on devrait supprimer pas mal de sources ici :p).

>> Je signale cependant que si les namespace sont si mauvais, expliquez moi pourquoi à l'université des sciences à Montpellier alors qu'en informatique il y a un des spécialistes du C++ comme professeur,
>> on apprend à utiliser les namespace ?
On peut être spécialiste et se tromper. Pourquoi ais-je appris à ne pas les utiliser ? (Avec argumentation d'ailleurs). J'ai moi même fait une école réputée, et ai appris avec comme professeur le mainteneur actuel de Flex/Bison, emacs et autoconf (excusez du peu !). Le C++ est le langage le plus mal enseigné en France. J'ai eu l'occasion d'enseigner ce langage dans plusieurs écoles, et dans des formations d'entreprise, et j'ai pu constater ce souci à chaque fois (Pas seulement une mauvaise utilisation des namespaces, une simple maîtrise superficielle du langage et pas mal de connerie).

>> D'ailleurs Mathieu Nebra (auteur du SiteDuZero) à appris les namespace et les utilises
Avec tout le respect que je lui dois, ce n'est pas une référence. Il est très pédagogique, et a beaucoup de mérite d'avoir créer ce site. Mais je ne classerais pas le bonhomme dans ceux qui ont maîtrise pointue du langage.

>> (et il est ingénieur pour information, sorti d'une des plus grande école d'informatique de France).
Aie, très très mauvais exemple. Je sais quelle école il a fait, et ils ne sont pas connus pour leur qualités techniques pointues. Ils developpent plus le côté manager, que gros geek technique (Je ne vais pas citer l'école pour ne pas lancer de troll). Disons juste que beaucoup d'étudiants de cette école venait demander de l'aide aux étudiants de notre école, moyennant rémunération :p ! (On mangeait dans le même resto U). Si tu ne me crois pas j'ai encore les sujets dans ma boîte mail...

L'erreur est humaine. Mais je te retourne la question, pourquoi cette pratique est-elle si décriée dans ce cas ?
http://www.parashift.com/c++-faq-lite/coding-standards.html

>> Les namespace faut savoir juste les utiliser.
Oui, il faut savoir les utiliser. C'est expliqué clairement dans mon lien.

>> Si on utilise les namespace alors que les deux namespace en question ont deux classes de même nom, il est clair que ça marchera pas.
Parce que tu penses que c'est le seul problème ? Relis attentivement le lien.

>> Un petit code comme là, je ne vois pas le mal à utiliser les namespace.
C'est une mauvaise pratique. Autant l'éviter au possible. On retrouve sinon ce genre de bêtise dans de vrai code en production ! (Et bonjour l'arrachage de cheveux !)
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
13 juin 2012 à 15:18
Bon ben puisque mes sources ne semblent pas apprécier du aux namespace je mettrait plus rien ici. Voila comment on est récomposé pour avoir voulut contribuer.

Je signale cependant que si les namespace sont si mauvais, expliquez moi pourquoi à l'université des sciences à Montpellier alors qu'en informatique il y a un des spécialistes du C++ comme professeur, on apprend à utiliser les namespace ? Parce que là j'aimerais bien comprendre alors pourquoi on nous apprend les namespace puisque c'est si mauvais. D'ailleurs Mathieu Nebra (auteur du SiteDuZero) à appris les namespace et les utilises (et il est ingénieur pour information, sorti d'une des plus grande école d'informatique de France).

Les namespace faut savoir juste les utiliser. Si on utilise les namespace alors que les deux namespace en question ont deux classes de même nom, il est clair que ça marchera pas.

Un petit code comme là, je ne vois pas le mal à utiliser les namespace. Si on est logique, le namespace le plus utile dans le code est celui qu'on utilise. Si on utilise une librairie A, B et C et que B est la plus utilisé, on utilisera le namespace de B ce qui raccourcis les lignes, rend donc clair le code. A et C n'auront pas le namespace utilisé. Après c'est le choix des codeurs, si on s'y retrouve et que le code est propre utilisé les namespace n'est pas un problème.
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 juin 2012 à 15:05
@CptPingu
>> @Admin: La source est-elle suffisamment fournie pour être conservé en tant que telle ? Ça ressemble plus à un snippet qu'à un projet complet.

non elle devrait être déposé ici:
http://www.codyx.org/snippet_pgcd-deux-nombres-grace-algorithme-euclidien_354.aspx
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 juin 2012 à 14:39
>> je sache la récursivité est dans certains cas obligatoire si tu veux un code rapide et parfaitement lisible.
Un code plus lisible oui. Plus rapide, non. L'itératif sera toujours plus rapide que le récursif. Je suis d'ailleurs d'accord avec Brunews sur ce point, ma remarque était simplement qu'une récursion terminale *est* une boucle et que l'on peut écrire d'une manière ou d'une autre en ayant les mêmes performances (grâce aux optimisations du compilateur, qui dérécursifie parfaitement).
On gagne aussi en élégance lorsque l'on applique cet idiome sur certains design patterns bien connus, ou sur certaines problématiques ou l'empilement n'est pas élevé (et où le point de contention n'est pas dû au coût d'appel de fonction).
@Brunews: Par élégance, je parle de pouvoir se retrouver avec un code aisément lisible, concit et clair. La récursivité permet généralement cela. A tel point, que des langages y sont dédiés (la fameuse programmation fonctionnelle, qui monte énormément en popularité en ce moment).

>> Pour ce qui concerne les namespace, franchement vous me gonflez tous avec ça, si ça existe c'est pas pour faire beau mais pour être utilisé.
Les variables globales sont présent dans le langage. Est-ce que c'est dans le langage ? Oui. Est-ce qu'il faut en abuser ? Non.
Il est possible d'écrire une fonction de 100000 lignes. Est-ce que c'est dans le langage ? Oui. Est-ce que c'est à faire ? Non.
Je peux remplacer toutes mes boucles par des goto. Est-ce que c'est dans le langage ? Oui. Est-ce que c'est à faire ? Non.
Je peux faire sauter tous les namespaces (rendant l'utilisation de création de namespace inutile). Est-ce que c'est dans le langage ? Oui. Est-ce que c'est à faire ? Non.

>> Si tu sais coder, il n'y a pas de soucis.
Ce n'est pas une question de savoir si "c'est dans le langage" ou si on "sait coder", mais de bonne pratique. Des pratiques qui te permettent, en entreprise, de ne pas t'arracher les cheveux à reprendre un code sale, ou sensible aux erreurs. Or tu es ici sur un site dédié essentiellement aux débutants, à qui montrer les bonnes pratiques est une nécessité évidente. Quand je vois un truc comme ça, il est normal que je le signale.

>> A toi de voir quoi utiliser comme namespace et pas faire n'importe quoi.
Et bien si tu relis mon lien, tu verras qu'il est possible de faire "sauter" les namespaces proprement (using simple dans une portée limité par exemple...). La meilleur solution étant tout de même de ne rien faire sauter ou d'utiliser un alias de namespace.
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
13 juin 2012 à 14:18
Bruneuws,

Que je sache la récursivité est dans certains cas obligatoire si tu veux un code rapide et parfaitement lisible. Prend les IA, je suis certains qu'il y a de la récursivité. Prend l'algo de Huffman, la récursivité est importante là aussi.


Pour ce qui concerne les namespace, franchement vous me gonflez tous avec ça, si ça existe c'est pas pour faire beau mais pour être utilisé. Si tu sais coder, il n'y a pas de soucis. A toi de voir quoi utiliser comme namespace et pas faire n'importe quoi.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 juin 2012 à 11:28
humour in: L'élégance c'est comme la tolérance, il y a des maisons pour cela.

humour off:
Il y a risque de stack overflow parce qu'il y a empilage des params + addr retour. On cumulera donc risque et lenteur, ceci est à cataloguer en nocivité pour du natif. Func récusrsive appelant ou appelée d'autres fonctions et la joie sera maximum...
S'il y a une littérature aussi fournie sur l'art de passer de la récusion à l'itératif, quelque raison il y aura.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 juin 2012 à 11:04
Bonjour.

Quelques remarques tout d'abord:
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- En C++, on ne met pas d'argument "void", donc "int main()" est plus propre.
- Tu peux déclarer et affecter en même temps, donc écrire directement: int rest = denominator % divisor;
- Au niveau des commentaires, la forme n'est pas la plus adaptée, mais elle pourrait se justifier par la volonté de mettre en avant la fonction. Dans le doute, je te transmet tout de même ce lien: http://0217021.free.fr/portfolio/axel.berardino/articles/ecrire-de-bons-commentaires

La récursivité n'est, fort heureusement, pas nocive. C'est souvent une réponse élégante à pas mal de problématique. Je pense notamment à un parcours d'arbre, ou au parcours appliqué par un design pattern Visitor (Je ne parle même pas de la programmation fonctionnelle). De plus, si celle-ci est terminale, le compilateur fera de toute façon une dérécursification. Le seul problème que l'on peut rencontrer, se fait avec une fonction récursive non terminale, qui serait appelée trop "profondement" et provoquerait un "stack overflow". Il conviendrait alors effectivement de la réécrire. Mais il ne faut pas pour autant se priver d'un idiome puissant.
(Pour voir rapidement ce que fait le compilateur avec un code, il y a "GCC explorer", qui est très pratique: http://gcc.godbolt.org/)

@Admin: La source est-elle suffisamment fournie pour être conservé en tant que telle ? Ça ressemble plus à un snippet qu'à un projet complet.
pgl10 Messages postés 381 Date d'inscription samedi 18 décembre 2004 Statut Non membre Dernière intervention 25 avril 2024 11
13 juin 2012 à 10:29
Je préfère programmer : return pgcd(divisor, rest); en lieu et place de : divisor = pgcd(divisor, rest); parce que divisor est l'un des arguments de pgcd(). Et si l'un des deux nombres entrés est nul ...
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 juin 2012 à 00:12
Il convient de bien insister auprès des débutants sur la nocivité de la récursivité.
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
12 juin 2012 à 23:00
Petite précision pour les jeunes qui ne seraient pas encore à l'apprentissage du PGCD (Plus Grand Commun Diviseur), il s'agit d'une méthode permettant par exemple de simplifier une fraction en obtenant le nombre le plus grand pour simplifier une fraction au maximum (c'est comme la décomposition en nombre premier mais c'est plus rapide).

C'est facile à comprendre mais s'apprend en 3ème normalement.
Rejoignez-nous