codice:
#include <stdio.h>
#include <stdlib.h>
#define DIM_LOC 3
#define N_MAX 10
int fget_point_mass (int n, int mat[][DIM_LOC], int vet[]);
void center_grav (int n, int mat[][DIM_LOC], int vet[], float &cx, float &cy, float &cz);
void fwrite_point_mass (int n, int mat[][DIM_LOC], int vett_masse[], float cx, float cy, float cz);
int main (void)
{
int vett_masse[N_MAX];
int mat[N_MAX][DIM_LOC];
int f,n;
float cx = 0, cy = 0, cz = 0;
n = fget_point_mass (n, mat, vett_masse);
if (!n)
{
system ("pause");
return 0;
}
center_grav (n, mat, vett_masse, cx, cy, cz);
fwrite_point_mass(n, mat, vett_masse, cx, cy, cz);
system("pause");
return(0);
}
//Definizione funzioni
int fget_point_mass(int n, int mat[][DIM_LOC], int vet[])
{
int f;
FILE *fp;
char s [30];
fp = fopen ("points.dat","r");
if (fp == NULL)
{
printf ("File di database non trovato, nessun dato caricabile.\n");
return 0;
}
/* Leggi la prima riga (n = numero di elementi) */
fgets (s,30,fp);
sscanf (s,"%d",&n);
if ((n < DIM_LOC)||(n > N_MAX))
{
printf (" E' presente un errore. Controllare il file di input.\n");
return 0;
}
/*Leggi la matrice della locazione + la massa*/
for (f=0;f<n;f++)
{
fgets (s,30,fp);
sscanf (s,"%d %d %d %d\r\n", &mat[f][0],&mat[f][1],&mat[f][2],&vet[f]);
}
return n;
}
void center_grav (int n, int mat[][DIM_LOC], int vet[], float &cx, float &cy, float &cz)
{
int f;
float totmasse = 0;
float c1 = 0, c2 = 0, c3= 0;
for (f = 0; f < n; f++) {
totmasse = totmasse + vet[f];
c1 = c1 + (vet[f] * mat[f][0]);
c2 = c2 + (vet[f] * mat[f][1]);
c3 = c3 + (vet[f] * mat[f][2]);
}
cx = (1/totmasse)*(c1);
cy = (1/totmasse)*(c2);
cz = (1/totmasse)*(c3);
}
void fwrite_point_mass (int n, int mat[][DIM_LOC], int vett_masse[], float cx, float cy, float cz)
{
int f;
/*Stampa la locazione*/
printf (" Locazione:\n");
for (f=0;f<n;f++) printf (" %d %d %d \n\n", mat[f][0],mat[f][1],mat[f][2]);
/*Stampa la massa*/
printf (" Masse:\n\n");
for (f=0;f<n;f++) printf (" %d\n\n", vett_masse[f]);
/* Stampare il numero n */
printf (" n:\n %d\n\n", n);
/*Stampa in centro di gravità*/
printf ("Il centro di gravita' C e' ( %.3f, %.3f, %.3f )\n\n" , cx, cy, cz );
}