Bonsoir, je code un programme qui permet de calculer l'air d'un polygone a n coté, j'essaie de créer une fonction qui me permettrai d'alléger la fonction main en enlevant la boucle qui permet de generer les vecteurs ainsi que de calculer le produit vectoriel et d'efffectuer la somme.Mais sa ne marche pas et le programme se bloc lorsqu'il doit calculer l air .

Programme qui fonctionne avec la boucle while dans main
Code Programme qui fonctionne avec la boucle while dans main : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void prodvect(double v1[3] , double v2[3],double pvec[3]);
void vecteur(double pt1[3] , double pt2[3],double v[3]);
void somme( double pvec[3],double som[3]);
void sommateur (double pts[100][3] , int nbpts );
 
void prodvect(double v1[3] , double v2[3], double pvec[3])
{
	pvec[0] = v1[1]*v2[2] - v1[2]*v2[1];
        pvec[1] = -(v1[0]*v2[2] - v1[2]*v2[0]);
        pvec[2] = v1[0]*v2[1] - v1[1]*v2[0];
}
 
void vecteur(double pt1[3] , double pt2[3], double v[3])
{
	int k;
	k=0;
	 while( k < 3 )
         {
             v[k] = pt2[k] - pt1[k];
             k = k+1;
          }
}
void somme( double pvec[],double som[])
{
	som[0]=som[1]=som[2]=0.0;
	int k=0;
	while(k < 3)
        {
           som[k] = som[k] + pvec[k];
           k = k + 1 ;
        }
}
 
int main(void)
{
   double    pts[100][3],som[3],v1[3],v2[3],pvec[3];
   int       nbpts,i;
   double    aire;
 
   printf("\nNombre de points du polygone ?");
   scanf("%i",&nbpts);
   i=0;
   while(i<nbpts)
   {
      	printf("\n Point No %d >",i);
      	scanf("%lf%lf%lf", &pts[i][0], &pts[i][1], &pts[i][2]);
	i = i + 1 ;
   }
   i=1;
   while(i< nbpts-1)
     {
        vecteur(pts[i],pts[0],v1);
        vecteur(pts[i+1],pts[0],v2);
 
        prodvect(v1,v2,pvec);
 
        somme(pvec,som);
        i = i+1 ;
      }
   aire =sqrt(som[0] * som[0] + som[1] * som [1] + som[2] * som[2]) ;
   printf("\nL'aire de votre polygone est %g\n", aire);
   return 0;
}

Programme qui ne fonctionne plus avec la fonction sommateur
Code Programme qui ne fonctionne plus avec la fonction sommateur : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void prodvect(double v1[3] , double v2[3],double pvec[3]);
void vecteur(double pt1[3] , double pt2[3],double v[3]);
void somme( double pvec[3],double som[3]);
void sommateur (double pts[100][3] , int nbpts );
 
void prodvect(double v1[3] , double v2[3], double pvec[3])
{
	pvec[0] = v1[1]*v2[2] - v1[2]*v2[1];
        pvec[1] = -(v1[0]*v2[2] - v1[2]*v2[0]);
        pvec[2] = v1[0]*v2[1] - v1[1]*v2[0];
}
 
void vecteur(double pt1[3] , double pt2[3], double v[3])
{
	int k;
	k=0;
	 while( k < 3 )
         {
             v[k] = pt2[k] - pt1[k];
             k = k+1;
          }
}
void somme( double pvec[],double som[])
{
	som[0]=som[1]=som[2]=0.0;
	int k=0;
	while(k < 3)
        {
           som[k] = som[k] + pvec[k];
           k = k + 1 ;
        }
}
 
void sommateur ( double pts[100][3] ,double pvec[3] ,double v1[3] ,double v2[3] ,int nbpts, double som[3] )
{
    int i=1;
   while(i< nbpts-1)
     {
        vecteur(pts[i],pts[0],v1);
        vecteur(pts[i+1],pts[0],v2);
 
        prodvect(v1,v2,pvec);
 
        somme(pvec,som);
        i = i++;
      }
}
 
 
int main(void)
{
   double    pts[100][3],som[3],v1[3],v2[3],pvec[3];
   int       nbpts,i;
   double    aire;
 
   printf("\nNombre de points du polygone ?");
   scanf("%i",&nbpts);
   i=0;
   while(i<nbpts)
   {
      	printf("\n Point No %d >",i);
      	scanf("%lf%lf%lf", &pts[i][0], &pts[i][1], &pts[i][2]);
	i = i + 1 ;
   }
   sommateur(pts,pvec,v1,v2,nbpts,som);
   aire =sqrt(som[0] * som[0] + som[1] * som [1] + som[2] * som[2]) ;
   printf("\nL'aire de votre polygone est %g\n", aire);
   return 0;
}