Salve ho questo problema:
Il centro di massa consiste in una locazione 3-D e in una massa
associata , ad esempio Locazione6,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