PDA

Visualizza la versione completa : [C++] Centro di massa (3D Mass Point)


sonik1987
15-01-2007, 11:22
Salve ho questo problema:

Il centro di massa consiste in una locazione 3-D e in una massa
associata , ad esempio Locazione:(6,0,-2) Massa:3g
In un sistema di centri di massa, considerare p1, p2,...,pn i punti 3-D


e m1,m2,...,mn le loro masse associate. Se m Ŕ la somma delle masse,il


centro di gravitÓ C Ŕ calcolato come
C= 1/m(m1p1+m2p2+...+mnpn)
Scrivi un programmache ripetutamente inserisce un sistema di punti di
massa da un input file finchŔ input operation fails. Per ciascun
sistema di punti, mostra la matrice di locazione , il vettore di massa,


n, e il centro di gravitÓ.
Ciascun data set include una matrice di locazione (a matrix in which
row is a point), una one-dimensional array delle masse, e il numero dei


point masses, n.
stabilisci che n pu˛ variare da 3 a 10.


Sample Data File
4
5 -4 3 2
4 3 -2 5
-4 -3 -1 2
-9 8 6 1
This sample should be stored as:
location 5 -4 3
4 3 -2
-4 -3 -1
-9 8 6
mass 2
5
2
1
n 4


La tua main function deve funzionare processando i data sets da un
input file finchŔ non trova EOF.


Io ho creato questo programma:


#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main (void)
{
FILE *ingresso, *uscita;
int n,i,j, massa, vett_masse[10], mat[10][3];
float cx, c1, cy, c2, cz, c3;
float totmasse = 0;
printf("Inserire il numero dei punti ");
scanf("%d", &n);
uscita = fopen("punti.txt","w");
fprintf(uscita, "%d\n", n);


for (i=0; i<n; i++)
{
printf("\nInserire le 3 coordinate del punto %d--> ",i+1);
for (j = 0; j<3; j++)
{
scanf(" %d",&mat[i][j]);
fprintf(uscita, "%d ", mat[i][j]);
}
printf ("Inserire la massa del punto %d--> ",i+1);
scanf(" %d", &vett_masse[i]);
totmasse = totmasse + vett_masse[i]; /*calcolo della
massa totale*/
fprintf(uscita, "%d\n",vett_masse[i]);
}
fclose(uscita);


/*visualizzazione locazione punti */
fopen ("punti","r");
printf("\nLocazione punti:\n");
for (i=0; i<n; i++)
{
for (j = 0; j<3; j++)
{
printf("%d ", mat[i][j]);
}
printf("\n");
}


/* visualizzazione masse*/
printf("\nMasse punti:\n");
for (i = 0; i<n ;i++)
{
printf("%d\n", vett_masse[i]);
}


/*stampa del numero dei punti*/
printf("\nNumero punti = %d\n", n);


/*centro di gravita*/


/*int c1, c2, c3;
int vet [2];
c1 = (1/totmasse)*(vett_masse[ n - (n-1)]* mat[ 0][ 0]*/


for(i=0; i<n; ++i)
{
c1=c1 + (vett_masse[i]*mat[i][0]);
c2=c2 + (vett_masse[i]*mat[i][1]);
c3=c3 + (vett_masse[i]*mat[i][2]);
}


cx = (1/totmasse)*(c1);
cy = (1/totmasse)*(c2);
cz = (1/totmasse)*(c3);


printf("IL CENTRO DI GRAVITA E' C(%.3f, %.3f, %.3f)\n\n" , cx, cy,
cz );
fclose(uscita);
system ("pause");



}


L'utente Goodidea mi ha suggerito questo:

FILE *fp;
int f,n;
int a,b,c,d;
char s [30];


// Apri il file che contiene i dati
fp = fopen ("data.txt","r");
if (fp == NULL)
{
printf ("\nIl dati sono spariti!\n");
return 1;
}


// Leggi la prima riga (n = numero di elementi)
fgets (s,30,fp);
sscanf (s,"%d",&n);


// Leggi gli n elementi
for (f=0;f<n;f++)
{
fgets (s,30,fp);
sscanf (s,"%d %d %d %d\r\n",&a,&b,&c,&d);
}


Il mio dilemma Ŕ una volta letti i dati, come inserirli in una
matrice???
insomma dovrei fondere le due parti di codice...Grazie mille
anticipatamente a chiunque deciderÓ di aiutarmi

alka
15-01-2007, 11:38
Il linguaggio anche nel titolo la prossima volta. Questo l'ho corretto io. :)

miscialo
15-01-2007, 16:12
credo dovresti fare un vettore parallelo...uno per i 3 numeri chiamiamoli x,y,z e uno per la massa...se sbaglio correggetemi

Loading