probleme de programmation en C

probleme de programmation en C - C - Programmation

Marsh Posté le 30-10-2008 à 18:44:43    

Bonsoir,

 

je suis en train de créer un programme permettant le calcul d'un tétraèdre et je suis bloqué...
Voici le programme:

 

fichier .h

 
Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. typedef double real;
  5. typedef struct { real x,y,z; } Point;
  6.  
  7. void LecturePoints(Point T[],int n);
  8. void AffichePoints(Point T[],int n);
  9. real SurfaceTetraedre(Point A[]);
  10. real SurfaceParallelepipede(Point B[]);
  11. real VolumeTetraedre(Point A[]);
  12. real VolumeParallelepipede(Point B[]);
  13. real NormeProdVect(Point A1,Point A2,Point A3);
  14. real ProdMixte(Point A1,Point A2,Point A3,Point A4);
 

fichier .c

Code :
  1. #include "volume.h"
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5.  
  6. /* lecture des coordonnees de n points */
  7. void LecturePoints(Point P[], int n)
  8. {
  9. int i;
  10. for (i=0; i<n;i++) {
  11.  printf("coordonnees du point %d =",i+1);
  12.  scanf("%lf %lf %lf",&P[i].x,&P[i].y,&P[i].z);
  13. }
  14. return;
  15. }
  16. /* affichage de n points */
  17. void AffichePoints(Point T[],int n)
  18. {
  19.  int i;
  20.  for (i=0; i<n; i++){
  21.    printf("Point %d  x=%lf y=%lf z=%lf\n",i+1,
  22.           T[i].x,T[i].y,T[i].z);
  23.     }
  24. }
  25. /* calcul du produit vectoriel AB.AC*/
  26. real NormeProdVect(Point A1,Point A2,Point A3){
  27.   real x1=A2.x-A1.x;
  28.   real y1=A2.y-A1.y;
  29.   real z1=A2.z-A1.z;
  30.   real x2=A3.x-A1.x;
  31.   real y2=A3.y-A1.y;
  32.   real z2=A3.z-A1.z;
  33.   real X,Y,Z;
  34.  
  35.   X=y1*z2-y2*z1;
  36.   Y=z1*x2-z2*x1;
  37.   Z=x1*y2-x2*y1;
  38.   return sqrt(X*X+Y*Y+Z*Z);
  39. }
  40.  
  41. /*calcul du produit mixte*/
  42. double ProduitMixte(Point A1,Point A2,Point A3)
  43. {
  44. /*definition des vecteurs*/
  45.     
  46.     Point T[4];
  47.     A1.x=T[1].x-T[0].x;
  48.     A1.y=T[1].y-T[0].y;
  49.     A1.z=T[1].z-T[0].z;
  50.     A2.x=T[2].x-T[0].x;
  51.     A2.y=T[2].y-T[0].y;
  52.     A2.z=T[2].z-T[0].z;
  53.     A3.x=T[3].x-T[0].x;
  54.     A3.y=T[3].y-T[0].y;
  55.     A3.z=T[3].z-T[0].z;
  56.    
  57.     double x,y,z;
  58.     /*produit A1 v A2*/
  59.     x=A1.y*A2.z-A2.y*A1.z;
  60.     y=A1.z*A2.x-A2.z*A1.x;
  61.     z=A1.x*A2.y-A2.x*A1.y;
  62.  
  63. return x*A3.x+y*A3.y+z*A3.z;
  64. }
  65.  
  66. /*volume tétraèdre*/
  67. real VolumeTetraedre(Point A[])
  68. {
  69. return 0.15*ProduitMixte(A[0],A[1],A[2]);
  70. }
 

main

 
Code :
  1. #include "surface.h"
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. int main()
  6. {
  7.     
  8.     Point T[3];Point A1 ;Point A2 ;Point A3 ;Point A;
  9.     
  10.         A1.x=0;    
  11.         A1.y=0;
  12.         A1.z=0;
  13.         A2.x=0;    
  14.         A2.y=0;
  15.         A2.z=0;
  16.         A3.x=0;    
  17.         A3.y=0;
  18.         A3.z=0;
  19.  
  20.  
  21.     printf("%ld %ld %ld %ld %ld %ld %ld %ld %ld",A1,A2,A3);
  22.  
  23.     /* Saisie et controle des données*/
  24.     printf("Saisie des points" );
  25.     LecturePoints(T,4);
  26.     AffichePoints(T,4);
  27.  
  28.     float prodm;
  29.        prodm=ProduitMixte(A1, A2, A3);
  30.     printf("%ld %ld %ld %ld %ld %ld %ld %ld %ld",A1,A2,A3);    
  31.     printf("produit mixte=%lf",prodm);
  32.        
  33.     /* calcul du Volume du Tetraedre
  34.      float volT=VolumeTetraedre(A);
  35.     
  36.     printf("volumeT= %lf\n",volT); */
  37.     
  38. }
 

pas de problème de compilation mais le produit mixte ne s'effectu pas...déja 3h decu et je ne trouve pas la solution...
quelqu'un aurait une idee svp?
je suis a bout la lol!
Merci d'avance.

 


Édité par Elmoricq : ajout des balises de formatage de code, pour plus de lisibilité.


Message édité par Elmoricq le 30-10-2008 à 19:04:29
Reply

Marsh Posté le 30-10-2008 à 18:44:43   

Reply

Marsh Posté le 30-10-2008 à 19:34:15    

Compile avec des warnings. Tes Point ne sont pas des double, donc tes printf("%f", A1) ne peuvent pas fonctionner.
 
Et vérifie bien que :
- scanf de double -> "%lf"
- printf de double -> "%f"

Reply

Marsh Posté le 30-10-2008 à 20:34:47    

je comprend pas trop pourquoi ca ne marche pas a cause des scanf et printf...
en faite le programme bloque après le produit mixte et avec les printf j'ai pu voir que le produit mixte était nul.Tu peux me dire comment on compile avec des warnings stp?
Merci d'avance

Reply

Marsh Posté le 31-10-2008 à 09:18:27    

Avec gcc c'est -Wall.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed