BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
27 août 2008 à 20:29
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 2012
-
28 août 2008 à 11:45
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 20121 28 août 2008 à 11:45
JFRANCOIS: tout-à-fait exact ! Beaucoup l'ignorent !
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 28 août 2008 à 09:36
"0 et 1 sont premier... (bon pour zero c'est un cas particulier mais pour 1 il respect bien la régle des nombres premiers : un nombre est premier si et seulement si il est divisible par 1 et par lui même... 1 est divisible seulement par 1 et par lui même CQFD)"
NON ! 1 n'est pas premier. Il ne respecte pas la règle qui dit qu'un nombre naturel est premier si il admet exactement deux diviseurs DISTINCTS : 1 et lui-même. Or avec 1 les deux diviseurs sont identiques. Le premier nombre premier est 2.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 28 août 2008 à 08:06
mais euh... tu connais l'instruction break ?
ce code contient plus de printf que de lignes interessantes...
lynxtyle
Messages postés79Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention31 octobre 20112 28 août 2008 à 02:22
sans oublier : c'est du C pas sur C++
sur ces 3 lignes de code ça change pas grand chose mais c'est important de le souligner quand même :P
lynxtyle
Messages postés79Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention31 octobre 20112 28 août 2008 à 01:57
"ce logiciel vous permet de vérifier si un nombre est entier ou pas /
C'est simple et très facile ..."
nombre premier, nombre entier... on voit que tu maitrise le sujet pour toi les deux c'est du kifkif
donc oui à supprimer car en plus d'être bourrin et mal présenté, ton raisonnement mathématique est complétement faux... comme ton anglais d'ailleur ("DEVELLOPPED BY C++", "logiciel realise par WOODPECKER3", "Tante_KANZA_by_SIMO" et "WOODPECKER3 COMPANY"... faudrait savoir comment tu t'appel et... oh mon dieu je ferai jamais appel à ta multinational même si elle a le copyright des nombres premiers ou entier^^)
ensuite niveau grosses erreurs :
"int n" et "if ((n != 1)&&(n!= 0))"... sans rentrer dans le point de vu mathématique de la recherche de nombre premier ici il y a une grosse faille... et oui si on rentre -1 pour n??? et encore pire pour la suite... car si on rentre un nombre négatif encore plus petit ton "for (i = 2; i < n; i++, compteur++)" ne marche plus... bon suffit de le remplacer par un unsigned int et ça régle déjà ce premier souci...
ensuite pour n égal 0 ou 1 pourquoi tu écris 2 fois le même code? tu aurai plus vite fait de le marquer qu'une fois et faire la vérif par "if (n <= 1 )" (bien sur seulement si tu as remplacé ton "int n" par "unsigned int n")
et grand mathématicien que tu es : 0 et 1 sont premier... (bon pour zero c'est un cas particulier mais pour 1 il respect bien la régle des nombres premiers : un nombre est premier si et seulement si il est divisible par 1 et par lui même... 1 est divisible seulement par 1 et par lui même CQFD)
ceci est aussi valable pour 2... hors ton programme le considère aussi comme non premier :(
bon pour petifa "dés que test passe a 1 (pourquoi pas true)" simplement que notre programmeur est fénéant et qu'il a défini test comme un int et pas comme un bool sinon 1 et true serait revenu au même (donc 1 c'est plus rapide même si c'est moins lisible... mais vu le nombre de commentaire de la source, la lisibilité ne devait pas être sa priorité... surtout sur une source avec copyright^^)
et pour "A quoi sert compteur???" la réponse est simple : à rien du tout ! (même pour le débogage il y a aucune utilité)
par contre même si sa boucle fait tout les nombres paires elle n'est pas pour autant fausse... et n'est juste pas optimisé... oui, pour optimiser on pourrait diviser par 2 puis après seulement par les nombres impaires jusqu'à n/2 (et oui après n/2 de toute façon le résultat appartiendra toujours à ]1;2[ )... et on économise ainsi 3/4 des calculs (merci petifa)
et oui aussi pour "dés que test passe a 1 [...] la boucle devrait s'arrêter en même temps"
donc voilà un le même en plus potable et corrigé :
int main()
{
unsigned int i, n;
_Bool Premier;
Premier = true;
printf("saisissez un nombre\n\n");
scanf ("%d", &n);
if ( n <= 2 )
printf("\n%d est premier",n);
else
{
if (n % 2 == 0)
Premier = false;
else
{
for (i 3; i < (n/2); i i+2)
if (n % i == 0)
{
Premier = false;
break;
}
}
if ( Premier == false )
printf("\n%d n'est pas premier",n);
else
printf("\n%d est premier",n);
}
system("PAUSE"); //beurk c'est par portable
return 0;
}
voilà désolé mais j'ai pas mis de copyright...
PS : je l'ai pas testé (j'ai pas d'ordi) mais il doit mathématiquement être correct... si des erreurs hésitez pas à les corriger ;)
cs_petifa
Messages postés215Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention10 mars 2014 27 août 2008 à 21:50
plusieurs choses.
Le nom des te fichiers peuvent être mieux choisis, inutile de mettre ton pseudo dans le nom des fichiers
ton code dans le .CPP est "bourrin", ça sert a quoi de marquer que c toi qui l'ai fait? autant mettre des commentaires au début de ton code, et non au résultat de l'exécution de ton programme
ta boucle (qui recherche si c'est un nombre premier) est complètement fausse, tu compares avec des nombre paires alors que si 2 ne passe pas tous les nombres paires ensuite ne passeront donc ta boucle sera trop longue
de plus dés que test passe a 1 (pourquoi pas true) la boucle devrait s'arrêter en même temps
# test = false;
# for (i = 3; i < n && !test; i++, compteur++)
A quoi sert compteur???
D'accord avec BruNews,
Bon source pas très utile
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 27 août 2008 à 20:41
le copyright sur une crible d'eratosthene, on aura tout vu !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 août 2008 à 20:29
Il y a de bons exemples déjà mis sur cppfrance, il faut t'en inspirer car ta méthode est dans le pur style bourrin, à exclure.
28 août 2008 à 11:45
28 août 2008 à 09:36
NON ! 1 n'est pas premier. Il ne respecte pas la règle qui dit qu'un nombre naturel est premier si il admet exactement deux diviseurs DISTINCTS : 1 et lui-même. Or avec 1 les deux diviseurs sont identiques. Le premier nombre premier est 2.
28 août 2008 à 08:06
ce code contient plus de printf que de lignes interessantes...
28 août 2008 à 02:22
sur ces 3 lignes de code ça change pas grand chose mais c'est important de le souligner quand même :P
28 août 2008 à 01:57
C'est simple et très facile ..."
nombre premier, nombre entier... on voit que tu maitrise le sujet pour toi les deux c'est du kifkif
donc oui à supprimer car en plus d'être bourrin et mal présenté, ton raisonnement mathématique est complétement faux... comme ton anglais d'ailleur ("DEVELLOPPED BY C++", "logiciel realise par WOODPECKER3", "Tante_KANZA_by_SIMO" et "WOODPECKER3 COMPANY"... faudrait savoir comment tu t'appel et... oh mon dieu je ferai jamais appel à ta multinational même si elle a le copyright des nombres premiers ou entier^^)
ensuite niveau grosses erreurs :
"int n" et "if ((n != 1)&&(n!= 0))"... sans rentrer dans le point de vu mathématique de la recherche de nombre premier ici il y a une grosse faille... et oui si on rentre -1 pour n??? et encore pire pour la suite... car si on rentre un nombre négatif encore plus petit ton "for (i = 2; i < n; i++, compteur++)" ne marche plus... bon suffit de le remplacer par un unsigned int et ça régle déjà ce premier souci...
ensuite pour n égal 0 ou 1 pourquoi tu écris 2 fois le même code? tu aurai plus vite fait de le marquer qu'une fois et faire la vérif par "if (n <= 1 )" (bien sur seulement si tu as remplacé ton "int n" par "unsigned int n")
et grand mathématicien que tu es : 0 et 1 sont premier... (bon pour zero c'est un cas particulier mais pour 1 il respect bien la régle des nombres premiers : un nombre est premier si et seulement si il est divisible par 1 et par lui même... 1 est divisible seulement par 1 et par lui même CQFD)
ceci est aussi valable pour 2... hors ton programme le considère aussi comme non premier :(
bon pour petifa "dés que test passe a 1 (pourquoi pas true)" simplement que notre programmeur est fénéant et qu'il a défini test comme un int et pas comme un bool sinon 1 et true serait revenu au même (donc 1 c'est plus rapide même si c'est moins lisible... mais vu le nombre de commentaire de la source, la lisibilité ne devait pas être sa priorité... surtout sur une source avec copyright^^)
et pour "A quoi sert compteur???" la réponse est simple : à rien du tout ! (même pour le débogage il y a aucune utilité)
par contre même si sa boucle fait tout les nombres paires elle n'est pas pour autant fausse... et n'est juste pas optimisé... oui, pour optimiser on pourrait diviser par 2 puis après seulement par les nombres impaires jusqu'à n/2 (et oui après n/2 de toute façon le résultat appartiendra toujours à ]1;2[ )... et on économise ainsi 3/4 des calculs (merci petifa)
et oui aussi pour "dés que test passe a 1 [...] la boucle devrait s'arrêter en même temps"
donc voilà un le même en plus potable et corrigé :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
unsigned int i, n;
_Bool Premier;
Premier = true;
printf("saisissez un nombre\n\n");
scanf ("%d", &n);
if ( n <= 2 )
printf("\n%d est premier",n);
else
{
if (n % 2 == 0)
Premier = false;
else
{
for (i 3; i < (n/2); i i+2)
if (n % i == 0)
{
Premier = false;
break;
}
}
if ( Premier == false )
printf("\n%d n'est pas premier",n);
else
printf("\n%d est premier",n);
}
system("PAUSE"); //beurk c'est par portable
return 0;
}
voilà désolé mais j'ai pas mis de copyright...
PS : je l'ai pas testé (j'ai pas d'ordi) mais il doit mathématiquement être correct... si des erreurs hésitez pas à les corriger ;)
27 août 2008 à 21:50
Le nom des te fichiers peuvent être mieux choisis, inutile de mettre ton pseudo dans le nom des fichiers
ton code dans le .CPP est "bourrin", ça sert a quoi de marquer que c toi qui l'ai fait? autant mettre des commentaires au début de ton code, et non au résultat de l'exécution de ton programme
ta boucle (qui recherche si c'est un nombre premier) est complètement fausse, tu compares avec des nombre paires alors que si 2 ne passe pas tous les nombres paires ensuite ne passeront donc ta boucle sera trop longue
de plus dés que test passe a 1 (pourquoi pas true) la boucle devrait s'arrêter en même temps
# test = false;
# for (i = 3; i < n && !test; i++, compteur++)
A quoi sert compteur???
D'accord avec BruNews,
Bon source pas très utile
27 août 2008 à 20:41
27 août 2008 à 20:29
NE SERA PAS CONSERVE.