begin process at 2008 08 08 21:39:33
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

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é: 5 720 / 81

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

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

directX par pip

triangles et OPENGL par kapotman

InvalidateRect() par GreatNeo

Rectangle(), float? par Xentor609

GDI windows par moi1392

pb temps avec gtk par sparetime

vérifier ca position -CPoint CRect par michelmt

Affichage du buffer à l'écran par CyberP

chaos game 2 en c++ par clira82

tableau dynamique par azkab

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS