ferrant.be
Messages postés1Date d'inscriptiondimanche 12 octobre 2003StatutMembreDernière intervention12 octobre 2003 12 oct. 2003 à 02:49
Deux ou trois remarques par rapport à 'Nombre Premier' :o)
//Nombres Premiers
bool NombrePremier(int valeur)
{
int diviseur = 2;
int test = 0;
while(diviseur < valeur-1)
/* pour vérifier si un nombre (valeur) est premier, il n'est pas nécessaire de tester tous les diviseurs jusqu'à (valeur-1). Il suffit d'aller jusqu'au dernier entier avant la racine carrée de n.
Par exemple, pour savoir si 17 est premier, il me suffit de vérifier s'il est divisible par 2, 3, et 4.
Pas nécessaire d'aller plus loin: si 18 est divisible par 9 (qui est > que racine carrée 18), il sera nécessairement divisible par 2 (qui lui est < que racine carrée 18).
Le plus simple, pour vérifier la borne supérieure de l'intervalle de test, ce n'est pas d'utiliser la racine carrée (compliquée à calculer et gourmande en temps de calcul), mais plutôt de vérifier si
(diviseur * diviseur) < ((valeur-1) * (valeur-1))
*/
{
if(valeur % diviseur == 0) test++;
diviseur++;
/*
A part 2, il n'est pas nécessaire du tout de tester les autres chiffres pairs: si un nombre n'est pas divisible par 2, il ne le sera à fortiori par aucun autre nombre pair...
Pourquoi ne pas faire diviseur+=2 plutôt que diviseur++, cela te fera gagner un facteur 2 dans ton temps de calcul, après avoir fait le test pour 2 et veillé à ce quediviseur soit = à 3 avant d'entrer dans la boucle!.
*/
}
if(test==0) return true;
else return false;
}
/*
Une dernière remarque: tu fais une boucle while dont tu ne sors pas si test 1... Alors que si tu cherches à vérifier si 245558242 est premier, tu le sais dès le premier test (division par 2 -> test 1). Et pourtant, tu continues de vérifier, ce qui est dommage, je trouve.
Je pense qu'un while ((test==0) && (diviseur*diviseur < ((valeur-1)*(valeur-1)) ) serait plus pertinent.
*/
Tout ceci dit, bien entendu, sans vouloir du tout te froisser ;o)
Bon travail!
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 5 oct. 2003 à 16:18
Bonjour,
pythagore :
le carré de l'hypothenus est égal à la somme des carrés des opposés.
Ta fonction te renvoi le carré de l'hypothenus et non l'hypothenus.
Autre remarque :
double IdentiteRemarquable3(double a, double b)
{
double IR = a*a - b*b;
return IR;
}
peut être remplace par
double IdentiteRemarquable3(double a, double b)
{
return ((a*a) - (b*b)); // J'aime bien les parentheses.
}
Matt...
Saian87
Messages postés2Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention 3 octobre 2003 3 oct. 2003 à 18:57
ok gabuzomeuh (reference aux shadoks ?) j'y penserai, pour le moment je suis plutot sur la trigo, j'ai implemente l'algorithme CORDIC mais il me faudrait la fonction arc tangente pour que ca marche...
gabuzomeuh
Messages postés53Date d'inscriptionjeudi 31 juillet 2003StatutMembreDernière intervention28 mars 2007 3 oct. 2003 à 01:26
pas mal mais je n'ai pas trouve ce que je cherchais c'est a dire une foncion pour calculer un exposant inverse c'est a dire par exemple:
y=x^(1/n) ou bien 16^(1/10) = 1.319507911
a+
Saian87
Messages postés2Date d'inscriptionlundi 29 septembre 2003StatutMembreDernière intervention 3 octobre 2003 1 oct. 2003 à 13:24
Merci tout le monde c'est normal qu'il y ait pas tout et surtout pas de trucs compliques (je suis qu'en premiere), sinon pour la trigo j'y travaille.
Et pour les puissances je savais pas comment faire.
Sinon si vous savez comment calculer une racine cubique ca serait sympa ...
Merci a tous pour l'aide que vous m'apportez
kimmelf2
Messages postés267Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention27 novembre 2005 1 oct. 2003 à 01:52
Dans puissance et puissancedix :
Tu met un <= dans le for, ce qui te rajoute une exec de la boucle et t'oblige a rajouter une division dans le return.
si tu met juste
for(...;i<exp;..)
...
return resultat
ca suffira et ca t'economise du temps processeur
-------------------------------------------------
y'a le meme type d'erreur dans puissancedix que dans puissance
une soluce tres simple :
return nombre * Puissance(10,exposant);
kimmelf2
Messages postés267Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention27 novembre 2005 1 oct. 2003 à 01:19
Ta fonction puissance n'est pas bonne :
for(int i = 0; i <= exposant; i++)
{
Resultat = nombre * nombre;
Resultat = Resultat * nombre;
}
>
A chaque fois tu calcule en fait Resultat = nombre * nombre *nombre;
En plus, tu ne calcule pas le cas ou exposant=0 (rend 1) ainsi que les cas ou exposant<0 qui sont en fait des racines
il aurai plutot fallu faire un truc du genre
Resultat = 1
for (int i=0;i<exposant;i++)
Resultat *=nombre;
return Resultat;
Comme ca, ca te prend au moin deja les cas ou exposant>=0
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 30 sept. 2003 à 21:03
Heu pour la note 10/10, il ne faut pas ABUSER, comme meme ...
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 30 sept. 2003 à 21:01
Heu la valeur ajoutee aux fonctions est tres bof !
Surtout Les IR ! Les fonction s ne portent pas leur noms.
Mais bon ... c'est bien pour debuter, et pour apprendre comment marche le passage d'arguments a une fonction, le prototype ...
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 30 sept. 2003 à 19:12
VolumePave :-P on dit un parallélépipède rectangle ;-) enfin, vu que c pr un nom de fonction, je suppose que c t pr pas faire long :-)
sinon, ben c bien d'avoir fait ça.
Ajoutes-y des fonctions un peu marrantes comme ! (x! = 1*2*3*...*x). Et puis sans la trigo, ça peut pas remplacer math.h
Mais je t'encourage à continuer, ça te fera tjs une liste d'outils pratiques :-)
D1m3x
Messages postés402Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention21 juillet 20051 29 sept. 2003 à 18:41
Pas mal, quelques fonctions interessantes mais pas vraiment compliquée, tu n'as pas utilisé les façon les plus compliquée c'est ce que je trouve bien dans ton code :)
12 oct. 2003 à 02:49
//Nombres Premiers
bool NombrePremier(int valeur)
{
int diviseur = 2;
int test = 0;
while(diviseur < valeur-1)
/* pour vérifier si un nombre (valeur) est premier, il n'est pas nécessaire de tester tous les diviseurs jusqu'à (valeur-1). Il suffit d'aller jusqu'au dernier entier avant la racine carrée de n.
Par exemple, pour savoir si 17 est premier, il me suffit de vérifier s'il est divisible par 2, 3, et 4.
Pas nécessaire d'aller plus loin: si 18 est divisible par 9 (qui est > que racine carrée 18), il sera nécessairement divisible par 2 (qui lui est < que racine carrée 18).
Le plus simple, pour vérifier la borne supérieure de l'intervalle de test, ce n'est pas d'utiliser la racine carrée (compliquée à calculer et gourmande en temps de calcul), mais plutôt de vérifier si
(diviseur * diviseur) < ((valeur-1) * (valeur-1))
*/
{
if(valeur % diviseur == 0) test++;
diviseur++;
/*
A part 2, il n'est pas nécessaire du tout de tester les autres chiffres pairs: si un nombre n'est pas divisible par 2, il ne le sera à fortiori par aucun autre nombre pair...
Pourquoi ne pas faire diviseur+=2 plutôt que diviseur++, cela te fera gagner un facteur 2 dans ton temps de calcul, après avoir fait le test pour 2 et veillé à ce quediviseur soit = à 3 avant d'entrer dans la boucle!.
*/
}
if(test==0) return true;
else return false;
}
/*
Une dernière remarque: tu fais une boucle while dont tu ne sors pas si test 1... Alors que si tu cherches à vérifier si 245558242 est premier, tu le sais dès le premier test (division par 2 -> test 1). Et pourtant, tu continues de vérifier, ce qui est dommage, je trouve.
Je pense qu'un while ((test==0) && (diviseur*diviseur < ((valeur-1)*(valeur-1)) ) serait plus pertinent.
*/
Tout ceci dit, bien entendu, sans vouloir du tout te froisser ;o)
Bon travail!
5 oct. 2003 à 16:18
pythagore :
le carré de l'hypothenus est égal à la somme des carrés des opposés.
Ta fonction te renvoi le carré de l'hypothenus et non l'hypothenus.
Autre remarque :
double IdentiteRemarquable3(double a, double b)
{
double IR = a*a - b*b;
return IR;
}
peut être remplace par
double IdentiteRemarquable3(double a, double b)
{
return ((a*a) - (b*b)); // J'aime bien les parentheses.
}
Matt...
3 oct. 2003 à 18:57
3 oct. 2003 à 01:26
y=x^(1/n) ou bien 16^(1/10) = 1.319507911
a+
1 oct. 2003 à 13:24
Et pour les puissances je savais pas comment faire.
Sinon si vous savez comment calculer une racine cubique ca serait sympa ...
Merci a tous pour l'aide que vous m'apportez
1 oct. 2003 à 01:52
Tu met un <= dans le for, ce qui te rajoute une exec de la boucle et t'oblige a rajouter une division dans le return.
si tu met juste
for(...;i<exp;..)
...
return resultat
ca suffira et ca t'economise du temps processeur
-------------------------------------------------
y'a le meme type d'erreur dans puissancedix que dans puissance
une soluce tres simple :
return nombre * Puissance(10,exposant);
mais ca c'est de la triche :-D
sinon :
Resultat=nombre;
for (int i=0;i<exposant;i++)
Resultat *= 10;
return Resultat;
1 oct. 2003 à 01:19
for(int i = 0; i <= exposant; i++)
{
Resultat = nombre * nombre;
Resultat = Resultat * nombre;
}
>
A chaque fois tu calcule en fait Resultat = nombre * nombre *nombre;
En plus, tu ne calcule pas le cas ou exposant=0 (rend 1) ainsi que les cas ou exposant<0 qui sont en fait des racines
il aurai plutot fallu faire un truc du genre
Resultat = 1
for (int i=0;i<exposant;i++)
Resultat *=nombre;
return Resultat;
Comme ca, ca te prend au moin deja les cas ou exposant>=0
30 sept. 2003 à 21:03
30 sept. 2003 à 21:01
Surtout Les IR ! Les fonction s ne portent pas leur noms.
Mais bon ... c'est bien pour debuter, et pour apprendre comment marche le passage d'arguments a une fonction, le prototype ...
30 sept. 2003 à 19:12
sinon, ben c bien d'avoir fait ça.
Ajoutes-y des fonctions un peu marrantes comme ! (x! = 1*2*3*...*x). Et puis sans la trigo, ça peut pas remplacer math.h
Mais je t'encourage à continuer, ça te fera tjs une liste d'outils pratiques :-)
29 sept. 2003 à 18:41