Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

Catégorie :Maths & Algorithmes Classé sous : pythagore, triangle, rectangle Niveau : Débutant Date de création : 19/11/2006 Date de mise à jour : 20/11/2006 18:05:41 Vu / téléchargé: 8 519 / 91

Note :
Aucune note

Commentaire sur cette source (27)
Ajouter un commentaire et/ou une note

Description

Bonjour,
voila, mon code sert à trouver dans un triangle rectangle soit l'hypoténuse grace au 2 autre coté de l'angle droit, soit un coté de l'angle droit grace à l'hypoténuse et un coté de l'angle droit.
Il permet aussi de savoir si un triangle est rectangle
 

Source

  • #include <stdio.h>
  • #include <math.h>
  • int main (int argc, char *argv[])
  • {
  • long choixmenu = 0 ;
  • double cote_angle_droit_deux = 0;
  • double cote_angle_droit = 0;
  • double resultat = 0;
  • double hypotenuse = 0;
  • double racine_un = 0;
  • double racine_deux = 0;
  • double racine_trois = 0;
  • double calcul = 0;
  • int retour =1 ;
  • {
  • 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);
  • switch (choixmenu)
  • {
  • case 1 :
  • printf (" vous voulez savoir l'hypoténuse. \n merci de bien vouloir taper un des coté de l'angle droit \n");
  • scanf ("%lf", &cote_angle_droit);
  • printf ("\n merci de bien vouloir rentrer le 2ème coté de l'angle droit \n");
  • scanf ("%lf", &cote_angle_droit_deux);
  • racine_un = cote_angle_droit * cote_angle_droit;
  • racine_deux = cote_angle_droit_deux * cote_angle_droit_deux ;
  • calcul = racine_un + racine_deux ;
  • resultat = sqrt(calcul);
  • printf ("\n l'hypoténuse mesure %lf \n \n",resultat );
  • break;
  • case 2 :
  • printf (" vous voulez savoir un coté de l'angle droit. \n merci de bien vouloir taper l'hypoténuse \n");
  • scanf ("%lf", &hypotenuse);
  • printf ("\n merci de bien vouloir rentrer le coté de l'angle droit \n");
  • scanf ("%lf", &cote_angle_droit);
  • racine_un = cote_angle_droit * cote_angle_droit ;
  • racine_deux = hypotenuse * hypotenuse ;
  • calcul = racine_deux - racine_un ;
  • resultat = sqrt(calcul);
  • printf ("\n le coté de l'angle droit mesure %lf \n \n",resultat );
  • break;
  • case 3 :
  • printf ("vous voulez savoir si votre triangle est rectangle. \n merci de bien vouloir rentrer la longueur du plus grand coté. \n ");
  • scanf ("%lf", &hypotenuse);
  • racine_trois = hypotenuse * hypotenuse ;
  • printf ("rentrez un coté de l'angle droit \n ");
  • scanf ("%lf", &cote_angle_droit);
  • printf ("rentrez le deuxieme coté de l'angle droit \n ");
  • scanf ("%lf", &cote_angle_droit_deux);
  • racine_un = cote_angle_droit * cote_angle_droit ;
  • racine_deux = cote_angle_droit_deux * cote_angle_droit_deux ;
  • if (racine_deux + racine_un == racine_trois)
  • {printf ("le triangle est rectangle \n \n ");
  • }
  • if (racine_deux + racine_un != racine_trois)
  • {
  • printf ("le triangle n'est pas rectangle \n \n");
  • }
  • }
  • return 0 ;
  • }
  • }
#include <stdio.h>
#include <math.h> 

int main (int argc, char *argv[])
{
long choixmenu = 0 ;
double cote_angle_droit_deux = 0;
double cote_angle_droit = 0;
double resultat = 0;
double hypotenuse = 0;
double racine_un = 0;
double racine_deux = 0;
double racine_trois = 0;
double calcul = 0;
int retour =1 ;


{

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);

switch (choixmenu)
{
case 1 :
printf (" vous voulez savoir l'hypoténuse. \n merci de bien vouloir taper un des coté de l'angle droit \n");
scanf ("%lf", &cote_angle_droit);
printf ("\n merci de bien vouloir rentrer le 2ème coté de l'angle droit \n");
scanf ("%lf", &cote_angle_droit_deux);

racine_un = cote_angle_droit * cote_angle_droit;
racine_deux = cote_angle_droit_deux * cote_angle_droit_deux ;
calcul = racine_un + racine_deux ;
resultat = sqrt(calcul);

printf ("\n l'hypoténuse mesure %lf \n \n",resultat );

break;
case 2 :
printf (" vous voulez savoir un coté de l'angle droit. \n merci de bien vouloir taper l'hypoténuse \n");
scanf ("%lf", &hypotenuse);
printf ("\n merci de bien vouloir rentrer le  coté de l'angle droit \n");
scanf ("%lf", &cote_angle_droit);

racine_un = cote_angle_droit * cote_angle_droit ;
racine_deux = hypotenuse * hypotenuse ;
calcul = racine_deux - racine_un ;
resultat = sqrt(calcul);

printf ("\n le coté de l'angle droit mesure %lf \n \n",resultat );
break;
case 3 :
printf ("vous voulez savoir si votre triangle est rectangle. \n merci de bien vouloir rentrer la longueur du plus grand coté. \n ");
scanf ("%lf", &hypotenuse);
racine_trois = hypotenuse * hypotenuse ;
printf ("rentrez un coté de l'angle droit \n ");
scanf ("%lf", &cote_angle_droit);
printf ("rentrez le deuxieme coté de l'angle droit \n ");
scanf ("%lf", &cote_angle_droit_deux);
racine_un = cote_angle_droit * cote_angle_droit ;
racine_deux = cote_angle_droit_deux * cote_angle_droit_deux ;

if (racine_deux + racine_un == racine_trois)
{printf ("le triangle est rectangle \n \n ");
}
if (racine_deux + racine_un != racine_trois)
{
printf ("le triangle n'est pas rectangle \n \n");
}

}

return 0 ;
}
}

Conclusion

Le programme a été programmé sous linux.
Il y a donc un éxécutable linux, mais pas pour windows( mais code source fournis)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • pythagore.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 507 octets
  • theromedepythagoreTélécharger ce fichier [Réservé aux membres club]7 910 octets

Télécharger le zip

Historique

19 novembre 2006 15:09:54 :
ajout d'une fonction permettant de savoir si le triangle est rectangle
19 novembre 2006 15:14:47 :
ajout de description
20 novembre 2006 18:04:18 :
amélioration code source. ATTENTION, FICHIER ZIP NON À JOUR
20 novembre 2006 18:05:41 :
j'avais oublier un point virgule

Commentaires et avis

signaler à un administrateur
Commentaire de Ombitious_Developper le 19/11/2006 13:12:05

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.

signaler à un administrateur
Commentaire de pipolasmimi38 le 19/11/2006 13:13:40

oui, mais je ne connais pas encore cette formule...

signaler à un administrateur
Commentaire de Ombitious_Developper le 19/11/2006 13:45:13

Salut:

http://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_d'Al-Kashi

signaler à un administrateur
Commentaire de vecchio56 le 19/11/2006 14:58:20 administrateur CS

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

signaler à un administrateur
Commentaire de pipolasmimi38 le 19/11/2006 15:12:39

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.

signaler à un administrateur
Commentaire de vecchio56 le 19/11/2006 16:00:39 administrateur CS

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

signaler à un administrateur
Commentaire de pipolasmimi38 le 19/11/2006 16:21:57

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...

signaler à un administrateur
Commentaire de cosmobob le 19/11/2006 19:27:57

j'suis impressionné par cette source ;))

signaler à un administrateur
Commentaire de laurent1024 le 19/11/2006 19:41:16

pour faire la puissance de 2, si tu veux tu peux aussi faire cote_angle_droit << 1; (decalage de bits)

signaler à un administrateur
Commentaire de Ombitious_Developper le 19/11/2006 19:45:33

Salut:

Dans quel sens tu es imprissionné par cette source?
En regardant l'age de pipolasmimi38 on a qu'à l'encourager.

signaler à un administrateur
Commentaire de vecchio56 le 19/11/2006 20:11:43 administrateur CS

laurent1024> Non, le décalage de bits ne marchera pas pour un double :)

signaler à un administrateur
Commentaire de laurent1024 le 19/11/2006 20:23:35

vecchio>Pardon j'avais pas fait gaffe que c'etait des doubles.

signaler à un administrateur
Commentaire de max12 le 19/11/2006 21:00:43 administrateur CS

Cette source ne restera pas longtemps :S

signaler à un administrateur
Commentaire de Galmiza le 19/11/2006 21:18:34

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 !

signaler à un administrateur
Commentaire de badrbadr le 20/11/2006 02:42:00

le compilateur ne fait pas l'optimisation?

signaler à un administrateur
Commentaire de pipolasmimi38 le 20/11/2006 17:55:18

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

signaler à un administrateur
Commentaire de pipolasmimi38 le 20/11/2006 17:56:35

je me suis trompé, ce n'est pas :
pour certaine mauvaise note...
mais
pour certaine mauvaise langue

signaler à un administrateur
Commentaire de Cyr62110 le 20/11/2006 19:01:44

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.

signaler à un administrateur
Commentaire de dthuler le 21/11/2006 21:10:20

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

signaler à un administrateur
Commentaire de pipolasmimi38 le 22/11/2006 13:07:15

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.

signaler à un administrateur
Commentaire de rrk275 le 23/11/2006 19:34:44

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 ?? )

signaler à un administrateur
Commentaire de vecchio56 le 23/11/2006 19:39:02 administrateur CS

Qu'est ce qu'il y a de drole? Ca marche pour les entiers

signaler à un administrateur
Commentaire de rrk275 le 23/11/2006 19:46:17

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 ..

signaler à un administrateur
Commentaire de dthuler le 23/11/2006 20:17:57

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... ^^

signaler à un administrateur
Commentaire de vecchio56 le 23/11/2006 20:19:55 administrateur CS

rrk275 > Si tu lis bien, il parle bien de puissances de 2...
dthuler> Oui c'est bien ca

signaler à un administrateur
Commentaire de Galmiza le 23/11/2006 20:34:48

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.

signaler à un administrateur
Commentaire de rrk275 le 23/11/2006 20:59:11

Je pensais qu'il parlait de puissance 2 dans le sens n^2 car sinon ca aurait peu d'interet (voire aucun ^^)

Louis

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

programme triangle rectangle ou non [ par Phil974m ] j'ai un petit soucis avec mon programme qui ne gère pas correctement les données saisiej'ai fait un petit programme demandé dans mon bts iris qui cher Afficher unTriangle de Pascal en language C [ par shaqe80 ] shaqe80,s'il vous y aurait il quelqu'un de bienveillant pour m'aider à rabibocher ce programme?#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#defin comment je peut svp conner ou organizer ces cordonnés d'un rectangle en c++ [ par YuseFdev ] salut  ----svp--    en c++je construie une classe rectangle  quia 4 variable represente les cordonnéscomment je peut conner ou organizer ces cordonnés Dessiner un rectangle (mais aussi un carré) en mode console langage C [ par DeathRavage ] Problème : J'ai un soucis à propos de la prise en compte de la taille de ma verticale, elle n'est pas prise en compte. J'ai essayé d'arranger les chos directX [ par pip ] Bonjour,Lorsque j'effectue une rotation d'un rectangle avec directX (en C++) j'obtient la chose suivante:Une triangles et OPENGL [ par kapotman ] Bonjour a tousje cherche un source en c ou C++ pour visualiser un triangle dans une fenetre avec translation , rotation et changement d'echelle sans u InvalidateRect() [ par GreatNeo ] Voila je dessine un rectangle comme ceci:SetRect(&rect,25,25,625,250);Et après je veux rafraichir ce rectangle avec :InvalidateRect(hwnd,&rect,TRUE);M Rectangle(), float? [ par Xentor609 ] Salut, j'utilise la fonction Rectangle, pour dessiner un rectangle, le prob, ce't qu'il faut entrerdes int, et moi je voudrais y mettre des floats ou GDI windows [ par moi1392 ] Bonjour, j'ai un léger soucis avec l'API win32.Alors voila, je voudrais tracer un rectangle vide au milieu mais avec une certaine epaisseur de bord.La pb temps avec gtk [ par sparetime ] bonjour je veux faire une petite animation avec gtk+ 2.0 mais bien sur j'ai un pb .voila je dessine un rectangle par exemple en bleu ensuite j'utilis


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.