Calculer l'aire d'un triangle ABC en C
Résolu/Fermé
973HLM
-
Modifié par Chris 94 le 31/05/2013 à 01:23
nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 - 12 juin 2013 à 18:34
nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 - 12 juin 2013 à 18:34
A voir également:
- Calculer l'aire d'un triangle ABC en C
- Calculer une moyenne sur excel - Guide
- Calculer alimentation pc - Guide
- Virginie organise un rallye avec 30 équipes. elle veut créer un code pour désigner chaque équipe. elle a commencé à la main, mais elle voudrait le faire calculer à l'aide d'une formule. proposez une formule comportant une seule fonction et à recopier vers le bas dans la colonne a du fichier à télécharger. quelle formule sera en a9 ? ✓ - Forum Programmation
- Triangle attention word ✓ - Forum Word
- Montre garmin bloqué triangle ✓ - Forum Accessoires & objets connectés
3 réponses
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
199
31 mai 2013 à 15:15
31 mai 2013 à 15:15
je ne connais pas le C mais ça doit être la dernière ligne qui pose problème car tu luit dit de retourner aire avant même lui avoir assigné le résultat. essaie ça plutôt :
float surface(point A, point B, point C) {
return 0.5 *((B.x)-(A.x))((C.y)-(A.y)) - ((C.x)-(A.x))((B.y)-(A.y));
}
ça te fait économiser une variable
float surface(point A, point B, point C) {
return 0.5 *((B.x)-(A.x))((C.y)-(A.y)) - ((C.x)-(A.x))((B.y)-(A.y));
}
ça te fait économiser une variable
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
Modifié par [Dal] le 31/05/2013 à 17:06
Modifié par [Dal] le 31/05/2013 à 17:06
Salut 973HLM,
Je pense que ceci marche mieux :
- en C, l'opérateur de multiplication est *, il faut le mentionner explicitement, la juxtaposition de parenthèses n'étant pas comprise comme un produit
- mettre des parenthèses autour de (B.x) est inutile
- en revanche, en mettre pour distinguer ce qui doit être multiplié de ce qui doit être soustrait est mieux
- ta formule omet le calcul de la valeur absolue, qui d'après https://fr.wikipedia.org/wiki/Aire_d%27un_triangle#.C3.80_partir_des_coordonn.C3.A9es_des_sommets doit être faite avant multiplication par 1/2
Sous toutes réserves, car mes souvenirs de géométrie remontent un peu :-)
Dal
Edit : fabs est à utiliser, présent dans math.h (et non abs, qui fonctionne avec des entiers : http://www.cplusplus.com/reference/cmath/fabs/)
Je pense que ceci marche mieux :
float surface(point A, point B, point C) { return 0.5 * fabs( ((B.x - A.x) * (C.y - A.y)) - ((C.x - A.x) * (B.y - A.y)) ); }
- en C, l'opérateur de multiplication est *, il faut le mentionner explicitement, la juxtaposition de parenthèses n'étant pas comprise comme un produit
- mettre des parenthèses autour de (B.x) est inutile
- en revanche, en mettre pour distinguer ce qui doit être multiplié de ce qui doit être soustrait est mieux
- ta formule omet le calcul de la valeur absolue, qui d'après https://fr.wikipedia.org/wiki/Aire_d%27un_triangle#.C3.80_partir_des_coordonn.C3.A9es_des_sommets doit être faite avant multiplication par 1/2
Sous toutes réserves, car mes souvenirs de géométrie remontent un peu :-)
Dal
Edit : fabs est à utiliser, présent dans math.h (et non abs, qui fonctionne avec des entiers : http://www.cplusplus.com/reference/cmath/fabs/)
nar6du14
Messages postés
459
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
7 décembre 2013
64
12 juin 2013 à 18:34
12 juin 2013 à 18:34
hum fais le calcul mathématiquement avant puis transcrit le en code et ça va fonctionner et regarde bien comment tu agences les parenthèses dans ton code.
le 0.5 multiplie t'il tout le reste ou bien uniquement ((B.x)-(A.x))((C.y)-(A.y));
s'il multiplie tout, mets une parenthèse ouvrante juste avant le "*" qui est après "0.5" et fermante juste avant le ";" qui marque la fin de l'instruction
le 0.5 multiplie t'il tout le reste ou bien uniquement ((B.x)-(A.x))((C.y)-(A.y));
s'il multiplie tout, mets une parenthèse ouvrante juste avant le "*" qui est après "0.5" et fermante juste avant le ";" qui marque la fin de l'instruction