CONNAITRE UN COTÉ DE L'ANGLE DROIT (PYTHAGORE)

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 19 nov. 2006 à 13:12
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 - 23 nov. 2006 à 20:59
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/40378-connaitre-un-cote-de-l-angle-droit-pythagore

rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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és 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
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és 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
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és 121 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 29 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és 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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és 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 nov. 2006 à 19:39
Qu'est ce qu'il y a de drole? Ca marche pour les entiers
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
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és 21 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 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++:

http://www.siteduzero.com/index.php

merci aussi à toi cyr62110, je vais regarder ca ce week-end.
dthuler Messages postés 121 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 29 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és 65 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 21 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és 21 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 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és 21 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 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és 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
20 nov. 2006 à 02:42
le compilateur ne fait pas l'optimisation?
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
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és 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
19 nov. 2006 à 21:00
Cette source ne restera pas longtemps :S
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
19 nov. 2006 à 20:23
vecchio>Pardon j'avais pas fait gaffe que c'etait des doubles.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 nov. 2006 à 20:11
laurent1024> Non, le décalage de bits ne marchera pas pour un double :)
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
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és 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
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és 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
19 nov. 2006 à 19:27
j'suis impressionné par cette source ;))
pipolasmimi38 Messages postés 21 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 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és 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
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és 21 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 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és 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
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és 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
19 nov. 2006 à 13:45
pipolasmimi38 Messages postés 21 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 novembre 2006
19 nov. 2006 à 13:13
oui, mais je ne connais pas encore cette formule...
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
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.
Rejoignez-nous