TEST DE PARITÉ ARITHMÉTIQUE

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 27 mai 2011 à 17:44
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 28 mai 2011 à 08:40
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/53222-test-de-parite-arithmetique

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 mai 2011 à 08:40
jusqu'à ce soir.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 mai 2011 à 00:17
> pour ma part j'ai pas de temps à consacrer au partage...
Alors pourquoi postes-tu ici ?

> Par contre même si je l'ai utilisé ici avec un printf la fonction seul est valable aussi bien en C qu'en C++
En C++ c'est std::cout et non printf. Même si c'est rétro-compatible, ce n'est en rien une bonne pratique à montrer aux débutants.

> Et je crois que les /* commentaires */ passe en orange pas très lisible alors que les //commentaires passent en vert très lisible...
1) Les couleurs dépendent de ta configuration et de l'éditeur que tu utilises (emacs, QtCreator, Code::Block, vim, Visual Studio, etc...).
2) Ce n'est pas parce que pour toi le orange est moins lisible que le vert, que ça l'est pour les autres
Tout ça pur dire que cet argument n'est pas valide. La couleur n'a absolument rien à voir avec le langage...
En revanche, utiliser des commentaires C++ en C, là y a un souci.

> quand j'envoi des débutants dessus ils reviennent toujours avec des void fonction(){printf()} trouvé sur les forums présent dans la première page google...
C'est pas dur, Google > fonction retourne une chaîne de caractères, et tu as tout ce qu'il te faut.
Si un débutant ne fait pas l'effort de chercher il ne mérite pas d'aide. C'est acceptable de ne pas connaître, mais ça ne l'est pas d'être feignant.

> pour être franc je ne le posterai pas dans les snippets : aucune utilité
Ça l'est déjà dans les snippets...

@admin: Ce n'est pas une source, à garder quand même ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 mai 2011 à 21:09
char *pRes = parite("");

tmp[strlen(tmp)-1]
va etre tip top comme test...

C'est pas franchement utile d'insister sur cette "source", hein...
lynxtyle Messages postés 79 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 31 octobre 2011 2
27 mai 2011 à 19:30
Si tu te sens d'attaque pour faire ce tuto je te laisse le faire... pour ma part j'ai pas de temps à consacrer au partage...

oui ça devrait être dans les snippets (d'ailleur je ne savais même pas qu'il y en avait proposé sur ce site) et pour être franc je ne le posterai pas dans les snippets : aucune utilité
bool parite(int *tmp){return tmp&1;} <- je n'ai jamais eu de cas de l'utiliser ! (et dans mon cas de traitement d'un grand nombre grâce à un char est bien moins intéressant que d'utiliser GMP)

Par contre même si je l'ai utilisé ici avec un printf la fonction seul est valable aussi bien en C qu'en C++ (et C#) le main étant là pour ne pas être un simple snippet.

Par ailleur je n'ai pas testé ce code, c'est la dernière réponse à un code effacé (oui c'est pas bien mais bon... au bout de 1 semaine d'explication à une tête dure j'espère qui lira cette solution une fois quand même...)
Et je crois que les /* commentaires */ passe en orange pas très lisible alors que les //commentaires passent en vert très lisible...

Peut-être qu'un jour je participerai un peu plus sur Codes-Sources... cela fait quelques années que j'y suis sans rien poster... aujourd'hui c'était un post coup de tête... la prochain fois ça sera peut être une vrai source ;)

pour ce qui est de ta recherche google je reste un peu étonné : quand j'envoi des débutants dessus ils reviennent toujours avec des void fonction(){printf()} trouvé sur les forums présent dans la première page google... (le site du zero donnant aussi cette méthode dans ses tuto sur les fonctions)
Par contre oui quand on cherche vraiment on trouve...!

PS : si tu veux chercher la petite bête avec la modification du résultat de la fonction tu peux aussi dire que je n'ai pas vérifier la validité de la valeur rentrée et que valeur="toto" ne devrait pas retourner de parité etc... (malgré qu'un const char *parite(char *tmp) ne m'aurait pas tué je l'avous !)
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 mai 2011 à 18:37
> le else étant aussi là pour la forme... c'est comme les {} qui ne serve pas à grand chose parce qu'il n'y a qu'une instruction...
Les { }, ok, pourquoi pas. Mais le else alors qu'il y a un return, ce n'est pas une simplification, c'est une inélégance.

> oui c'est très léger, oui ça ne sert à rien... mais comme précisé c'est pour répondre à 3 sources qui sont arrivé il n'y a pas longtemps sur dans les sources...
Je ne critique pas la démarche, mais la forme. Je maintiens que ce code devrait être un snippets.

> on ne trouve pas sur les sites débutants comment faire une fonction qui retourne une chaine de caractère
Ah bon ? Une simple recherche Google me sort une masse de sites qui traitent de ce sujet.
Une bonne introduction:
http://www.siteduzero.com/tutoriel-3-14023-les-chaines-de-caracteres.html
Des exemples vraiment très complet de fonctions qui retournent des chaines de caractères:
http://nicolasj.developpez.com/articles/libc/string/#LIII

Si tu veux apprendre aux débutants à retourner une chaîne de caractères, tu peux poster dans la section "tutoriel", sur ce même site. Ça serait bien plus adapté.

Enfin, tu dis t'addresser aux débutants, mais tu leurs montres des choses qu'il ne faut pas faire...
1) Tu retournes un char* au lieu d'un const char*. Que se passe-t-il si je fais:
char* c = parite(valeur);
c[0] = 'a'; /* Plante */
printf("%s est %s\n", valeur, c);
2) Utilisation de commentaire du C++ (si y a du printf, c'est que ton code se destine à du C). Pour pinailler on pourrait dire que ce style de commentaire est valable en C si on ajoute l'option std=c89... Mais alors on ne s'adresse plus à des débutants. En espérant que tu ne compiles pas du C avec un compilo C++...

Enfin, pour montrer comment retourner une chaîne de caractère, ce n'est pas aussi simple que ce que tu fais dans ton exemple. Il est incomplet sans explication (c'est bien pour ça que la section "tutorial" est là). Ici ce sont des chaînes constantes qui ne peuvent être modifiées, et c'est difficile d'expliquer à un débutant pourquoi, sans faire un cours sur les pointeurs et la mémoire...
lynxtyle Messages postés 79 Date d'inscription samedi 25 septembre 2004 Statut Membre Dernière intervention 31 octobre 2011 2
27 mai 2011 à 18:10
oui c'est très léger, oui ça ne sert à rien... mais comme précisé c'est pour répondre à 3 sources qui sont arrivé il n'y a pas longtemps sur dans les sources...

pourquoi pas un booléen ? histoire de rendre la source un peu plus utile : on ne trouve pas sur les sites débutants comment faire une fonction qui retourne une chaine de caractère... et comme t'as pu le constater c'est un bout de code pour débutant...

le else étant aussi là pour la forme... c'est comme les {} qui ne serve pas à grand chose parce qu'il n'y a qu'une instruction...

donc oui c'est un code qui ne sert à rien... mais ça à le mérite d'être plus joli (et rapide) qu'un test modulo et d'être posé en fonction...

et oui travailler sur la base d'un char pour faire du calcul ça ne sert à rien... mais là encore c'était pour donner un minimum de sens à ce petit code : je me pose toujours la question "mais je ne comprends toujours pas pourquoi il y en a qui font des vecteurs de nombres pair???"

maintenant si ça te fait plaisir de lire tout les 4 matins des for(i=0;i<X;i++)if(i%2==0)VecteurPair[i]=1...
oui je sais for(i=2;i<(X/2);i=i+2)VecteurPair[i]=1 serait déjà un peu mieux mais ce à qui se destine ce code ne le pense pas...
donc j'ai tenté de trouver quelque chose de potable à leur donner...

Enfin bon... ça me fait vraiment pitier de voir le niveau de cette source... un bébé ferai bien mieux... ne serait-ce un bébé n'est pas aussi idiot pour faire un code qui ne sert à rien... mais j'espère que certain s'en inspiront dans le future... (pas pour l'utilité que ça a mais dans l'utilisation des masques binaire et des fonctions poiteur plutot que de faire des printf pour retourner une valeur)
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 mai 2011 à 17:44
Un peu léger pour une source...
Est-ce que ça n'aurait pas plutôt sa place dans un snippets ?

D'ailleurs, ça y est déjà:
http://www.codyx.org/snippet_parite-nombre-entier-int-signed-unsigned_351.aspx

>> ça permettra de voir moins d'horreurs dans le future
En parlant d'horreur: Pourquoi mettre un else, alors que le return est débranchant ?
Pourquoi ne pas retourner directement un booléen ?

bool parite(char *tmp)
{
return (tmp[strlen(tmp)-1] & 1) == 1;
}

voir:
bool parite(char *tmp)
{
return tmp[strlen(tmp)-1] & 1;
}
Rejoignez-nous