rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 23 nov. 2006 à 20:59
Je pensais qu'il parlait de puissance 2 dans le sens n^2 car sinon ca aurait peu d'interet (voire aucun ^^)
Louis
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 23 nov. 2006 à 20:34
Déja cote_angle_droit n'est pas un entier :D.
Elever au carré ne revient pas à multiplier par 2 ;)
En base 10, quand on décale les chiffres vers la gauche, on multiplie par 10.
Ex: 34 -> 340 (=34*10)
En base 2 c'est pareil, sauf qu'on multiplie par 2.
Pour ceux qui découvrent les maths, un ptit cours:
Tout entier N a une écriture écriture dans une base k:
N = a0*k^0 + a1*k^1 + ... + ap*k^p
Pour N=546 en base k=10, a0=6, a1=4, a2=5
546 = 6*1 + 4*10 + 5*100
Si je décale les chiffres de i positions vers la gauche:
a0*k^(0+i) + a1*k^(1+i) + ... + ap*k^(p+i)
= k^i*(a0*k^0 + a1*k^1 + ... + ap*k^p)
= k^i*N
On retrouve la multiplication par k puissance i !
Pour les décalages vers la droite, c'est pareil.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 nov. 2006 à 20:19
rrk275 > Si tu lis bien, il parle bien de puissances de 2...
dthuler> Oui c'est bien ca
dthuler
Messages postés121Date d'inscriptiondimanche 9 mars 2003StatutMembreDernière intervention29 avril 2009 23 nov. 2006 à 20:17
Donc , si je suis le raisonnement, le décalage de bit permet de multiplier/diviser par 2^n un entier non signé... juste? Bon désolé de "poluer" la source avec un commentaire qui s'éloigne un peu du sujet de base mais tant qu'à passer de VB à C, autant que ça serve... ^^
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 23 nov. 2006 à 19:46
Nan ca multiplie par 2 ..
prenons int a = 11
(en binaire soit 1 * 2^1 + 1 * 2^0 ou 3 en bon vieux decimal)
faisons a=<<1
on obtient
110
soit 1 * 2^2 + 1 * 2^1 + 0 * 2^0 ou 6
plus géneralement <<1 multiplie par 2 et <<n multiplie par 2^n
tandis que >>n divise par 2^n
sachant x * 1/2^n x* 2^-n on obtient a<<n a>>-n
(cependant l'utilisation des operateurs << et >> ne sont pas "definies" avec des negatifs les resultats seront donc .. imprevisible ^^ )
Louis
PS: pour les puissances ca ne marche donc qu'avec les puissances de 2 ..
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 nov. 2006 à 19:39
Qu'est ce qu'il y a de drole? Ca marche pour les entiers
rrk275
Messages postés540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 23 nov. 2006 à 19:34
pour faire la puissance de 2, si tu veux tu peux aussi faire cote_angle_droit << 1; (decalage de bits)
Lol ^^
( mieux vaut en rire qu'en pleurer ?? )
pipolasmimi38
Messages postés21Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention22 novembre 2006 22 nov. 2006 à 13:07
merci pour ton commentaire dthuler.
Tu verras, c'est un programme assez sympa à faire, et ce n'est pas très difficile.
Au cas ou tu ne connaitrais pas, voici un bon site pour apprendre le c/c++:
merci aussi à toi cyr62110, je vais regarder ca ce week-end.
dthuler
Messages postés121Date d'inscriptiondimanche 9 mars 2003StatutMembreDernière intervention29 avril 2009 21 nov. 2006 à 21:10
Ben, moi je dis merci... voilà le genre de prog' qui va m'aider à me mettre dans le bain de C++
Bon code, encore merci!
David
Cyr62110
Messages postés65Date d'inscriptionvendredi 10 février 2006StatutMembreDernière intervention21 octobre 2009 20 nov. 2006 à 19:01
J'ai regardé un peu ton menu, tu devrait plutot ecrire :
do {# printf ("bienvenue dans la calc-theorème de pythagore.\n voulez vous savoir \n \t 1:l'hypoténuse \n \t 2: un coté de l'angle droit \n \t 3: un coté de l'angle droit\n");
# scanf ("%ld", &choixmenu);} while (choixmenu < 1 ||choixmenu > 3);
Cela évitera les problèmes que j'ai eu à mes début en programmation.
Car sinon si un utilisateur repond 4,tu as une sortie prématurée de programme.
Bye et bonne continuation.
pipolasmimi38
Messages postés21Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention22 novembre 2006 20 nov. 2006 à 17:56
je me suis trompé, ce n'est pas :
pour certaine mauvaise note...
mais
pour certaine mauvaise langue
pipolasmimi38
Messages postés21Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention22 novembre 2006 20 nov. 2006 à 17:55
merci de vos commentaire.
J'ai que 14 ans, et c'est le premier programme que je programme sous linux, ce qui a entrainé quelque réaménagement du code (syteme pause...)
Je vais changer le pow... en multiplication.
et pour certaine mauvaise note, ce programme peut etre utile
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 20 nov. 2006 à 02:42
le compilateur ne fait pas l'optimisation?
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 19 nov. 2006 à 21:18
Pour faire pow(a,b), le CPU fait comme suit:
a^b exp(ln(a^b)) exp(b*ln(a))
Donc se tape un calcul de logarithme népérien et une exponentielle ! Fonctions qui elles-mêmes font appel à des quantités d'additions et de multiplications.
Evidemment, on s'en tape ici.
Mais généralement ceux qui ont choisi d'apprendre le C et pas un langage plus facile, l'on choisi pour pouvoir réaliser des codes rapides, donc ça nous fait assez peur :D de voir faire pow(a,2) plutôt que a*a !
Donc ne t'étonnes pas qu'on chipotte dessus ;).
Bonne continuation !
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 19 nov. 2006 à 21:00
Cette source ne restera pas longtemps :S
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 19 nov. 2006 à 20:23
vecchio>Pardon j'avais pas fait gaffe que c'etait des doubles.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 19 nov. 2006 à 20:11
laurent1024> Non, le décalage de bits ne marchera pas pour un double :)
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 19 nov. 2006 à 19:45
Salut:
Dans quel sens tu es imprissionné par cette source?
En regardant l'age de pipolasmimi38 on a qu'à l'encourager.
cs_laurent1024
Messages postés987Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention30 août 201225 19 nov. 2006 à 19:41
pour faire la puissance de 2, si tu veux tu peux aussi faire cote_angle_droit << 1; (decalage de bits)
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 19 nov. 2006 à 19:27
j'suis impressionné par cette source ;))
pipolasmimi38
Messages postés21Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention22 novembre 2006 19 nov. 2006 à 16:21
tu as certainement raison, mais je ne vois pas ce que ca apporterait de faire une multiplication.
Niveau rapidité, je ne pensse pas que l'on voit la différence...
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 19 nov. 2006 à 16:00
racine_un = pow(cote_angle_droit, 2);
racine_un = cote_angle_droit * cote_angle_droit;
En qui le pow est-il plus simple? En tous cas il est certainement plus lent
Pardon pour la terminaison, j'avais cru qu'il y avait un boucle infini
pipolasmimi38
Messages postés21Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention22 novembre 2006 19 nov. 2006 à 15:12
Bon, j'ai rajouté une fonction permettant de savoir si un tria,gle est rectangle d'après le théorème de pythagore.
Par contre l'éxécutable n'est pas à jour.
Pour la fonction pow, je trouce que c'est le plus simple.
Sinon le programme se termine tout seul, mais je vais le mettre à jour pour permettre à l'utilisateur de recommencer ou de quitter.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 19 nov. 2006 à 14:58
Pourquoi utiliser la fonction pow pour élever un nombre au carré? Il est préférable de faire une multiplication
Tu devrais aussi controler ce qui est entré par l'utilisateur, car actuellement, tu risques de calculer une racine carrée négative
Pense aussi à permettre à l'utilisateur de terminer ton programme autrement que par Ctrl+C
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 19 nov. 2006 à 13:45
pipolasmimi38
Messages postés21Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention22 novembre 2006 19 nov. 2006 à 13:13
oui, mais je ne connais pas encore cette formule...
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 19 nov. 2006 à 13:12
Salut:
Tu peux généraliser ton programme pour n'importe quel type de triangle en utilisant le théréoreme du mathématicien Arabe El Kashi.
23 nov. 2006 à 20:59
Louis
23 nov. 2006 à 20:34
Elever au carré ne revient pas à multiplier par 2 ;)
En base 10, quand on décale les chiffres vers la gauche, on multiplie par 10.
Ex: 34 -> 340 (=34*10)
En base 2 c'est pareil, sauf qu'on multiplie par 2.
Pour ceux qui découvrent les maths, un ptit cours:
Tout entier N a une écriture écriture dans une base k:
N = a0*k^0 + a1*k^1 + ... + ap*k^p
Pour N=546 en base k=10, a0=6, a1=4, a2=5
546 = 6*1 + 4*10 + 5*100
Si je décale les chiffres de i positions vers la gauche:
a0*k^(0+i) + a1*k^(1+i) + ... + ap*k^(p+i)
= k^i*(a0*k^0 + a1*k^1 + ... + ap*k^p)
= k^i*N
On retrouve la multiplication par k puissance i !
Pour les décalages vers la droite, c'est pareil.
23 nov. 2006 à 20:19
dthuler> Oui c'est bien ca
23 nov. 2006 à 20:17
23 nov. 2006 à 19:46
prenons int a = 11
(en binaire soit 1 * 2^1 + 1 * 2^0 ou 3 en bon vieux decimal)
faisons a=<<1
on obtient
110
soit 1 * 2^2 + 1 * 2^1 + 0 * 2^0 ou 6
plus géneralement <<1 multiplie par 2 et <<n multiplie par 2^n
tandis que >>n divise par 2^n
sachant x * 1/2^n x* 2^-n on obtient a<<n a>>-n
(cependant l'utilisation des operateurs << et >> ne sont pas "definies" avec des negatifs les resultats seront donc .. imprevisible ^^ )
Louis
PS: pour les puissances ca ne marche donc qu'avec les puissances de 2 ..
23 nov. 2006 à 19:39
23 nov. 2006 à 19:34
Lol ^^
( mieux vaut en rire qu'en pleurer ?? )
22 nov. 2006 à 13:07
Tu verras, c'est un programme assez sympa à faire, et ce n'est pas très difficile.
Au cas ou tu ne connaitrais pas, voici un bon site pour apprendre le c/c++:
http://www.siteduzero.com/index.php
merci aussi à toi cyr62110, je vais regarder ca ce week-end.
21 nov. 2006 à 21:10
Bon code, encore merci!
David
20 nov. 2006 à 19:01
do {# printf ("bienvenue dans la calc-theorème de pythagore.\n voulez vous savoir \n \t 1:l'hypoténuse \n \t 2: un coté de l'angle droit \n \t 3: un coté de l'angle droit\n");
# scanf ("%ld", &choixmenu);} while (choixmenu < 1 ||choixmenu > 3);
Cela évitera les problèmes que j'ai eu à mes début en programmation.
Car sinon si un utilisateur repond 4,tu as une sortie prématurée de programme.
Bye et bonne continuation.
20 nov. 2006 à 17:56
pour certaine mauvaise note...
mais
pour certaine mauvaise langue
20 nov. 2006 à 17:55
J'ai que 14 ans, et c'est le premier programme que je programme sous linux, ce qui a entrainé quelque réaménagement du code (syteme pause...)
Je vais changer le pow... en multiplication.
et pour certaine mauvaise note, ce programme peut etre utile
20 nov. 2006 à 02:42
19 nov. 2006 à 21:18
a^b exp(ln(a^b)) exp(b*ln(a))
Donc se tape un calcul de logarithme népérien et une exponentielle ! Fonctions qui elles-mêmes font appel à des quantités d'additions et de multiplications.
Evidemment, on s'en tape ici.
Mais généralement ceux qui ont choisi d'apprendre le C et pas un langage plus facile, l'on choisi pour pouvoir réaliser des codes rapides, donc ça nous fait assez peur :D de voir faire pow(a,2) plutôt que a*a !
Donc ne t'étonnes pas qu'on chipotte dessus ;).
Bonne continuation !
19 nov. 2006 à 21:00
19 nov. 2006 à 20:23
19 nov. 2006 à 20:11
19 nov. 2006 à 19:45
Dans quel sens tu es imprissionné par cette source?
En regardant l'age de pipolasmimi38 on a qu'à l'encourager.
19 nov. 2006 à 19:41
19 nov. 2006 à 19:27
19 nov. 2006 à 16:21
Niveau rapidité, je ne pensse pas que l'on voit la différence...
19 nov. 2006 à 16:00
racine_un = cote_angle_droit * cote_angle_droit;
En qui le pow est-il plus simple? En tous cas il est certainement plus lent
Pardon pour la terminaison, j'avais cru qu'il y avait un boucle infini
19 nov. 2006 à 15:12
Par contre l'éxécutable n'est pas à jour.
Pour la fonction pow, je trouce que c'est le plus simple.
Sinon le programme se termine tout seul, mais je vais le mettre à jour pour permettre à l'utilisateur de recommencer ou de quitter.
19 nov. 2006 à 14:58
Tu devrais aussi controler ce qui est entré par l'utilisateur, car actuellement, tu risques de calculer une racine carrée négative
Pense aussi à permettre à l'utilisateur de terminer ton programme autrement que par Ctrl+C
19 nov. 2006 à 13:45
http://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_d'Al-Kashi
19 nov. 2006 à 13:13
19 nov. 2006 à 13:12
Tu peux généraliser ton programme pour n'importe quel type de triangle en utilisant le théréoreme du mathématicien Arabe El Kashi.