Quella che stai usando è una lista semplicemente concatenata, considerato quello che devi fare e considerato che sei alle prime armi, non sarebbe meglio utilizzare un array di struct?
In ogni caso:
- la struct la chiamerei punto dal momento che il centro di massa lo stai calcolando rispetto ad un sistema di punti materiali;
- la funzione riempi_centro() la chiamerei aggiungi_centro() (o meglio aggiungi_punto() considerando quanto detto prima) e gli affiderei il compito di aggiungere un nuovo nodo in testa alla lista. In base ai suddetti consigli il codice diventerebbe qualcosa del genere:
#include <stdio.h>
#include <stdlib.h>
typedef struct punto_
{
double x;
double y;
double m;
struct punto_ *next;
} punto;
void aggiungi_punto(punto **testa, double X, double Y, double M)
{
punto* nuovo;
nuovo = malloc(sizeof(punto));
nuovo->x = X;
nuovo->y = Y;
nuovo->m = M;
nuovo->next = *testa;
*testa = nuovo;
}
int main()
{
punto* testa = NULL;
double X;
double Y;
double M;
unsigned int i;
unsigned int n = 50;
printf("INSERIRE %d DATI:\n", n);
for(i = 0; i < n; ++i)
{
printf("x -->");
scanf("%lf", &X);
printf("y -->");
scanf("%lf", &Y);
printf("m -->");
scanf("%lf", &M);
aggiungi_punto(&testa, X, Y, M);
}
punto origine = {0, 0, 0, NULL};
for(i = 0; i < n; ++i)
{
origine.x += punto.x * punto.m;
origine.y += punto.y * punto.m;
origine.m += punto.m;
}
origine.x /= origine.m;
origine.y /= origine.m;
printf("x(CDM) = %lf\n", origine.x);
printf("y(CDM) = %lf\n", origine.y);
return 0;
}
- per quanto riguarda il problema all'interno del for, cosa rappresenta "centro"? Prova a compilare il seguente codice e leggi l'errore che ti riporta:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
n = int + int;
return 0;
}
Altra domanda... dove sono andati a finire i K centri che hai inserito da tastiera? Come fai se vuoi conoscere la massa relativa al ventesimo centro?