Buongiorno qualcuno saprebbe suddividere il mio progetto in più file spiegandomi come andrebbe fatto ? Sono ore che cerco una guida ma non riesco a farlo funzionare.. Ho trovato 1000 suggerimenti diversi ma alla fine non funziona, forse sbaglio qualcosa...

codice:
/*Si vuole sviluppare un algoritmo di calcolo del centroide. L’algoritmo considera una scacchiera di 30x30 caselle e dispone
a caso (usando la function rand) 50 oggetti (la posizione è una coppia di numeri interi). L’algoritmo deve visualizzare la scacchiera,
mostrando un ‘ ’,per le caselle non occupate e mostrando una ‘X’ per le caselle occupate dagli oggetti.
L’algoritmo determina il centroide dell’insieme dei 50 oggetti: il centroide è un punto della scacchiera che ha per ascissa
l’intero più vicino alla media delle ascisse di tutti gli oggetti e per ordinata l’intero più vicino alla media
delle ordinate di tutti gli oggetti. L’algoritmo deve visualizzare di nuovo la scacchiera, indicando,
oltre alle caselle vuote e a quelle occupate, anche la posizione del centroide (indicandola con la lettera ‘C’).
Infine, l’algoritmo calcola e visualizza la distanza di ognuno degli oggetti dal centroide, e determina e visualizza sia la
minima distanza (indicando anche la posizione dell’oggetto a minima distanza) sia la massima distanza
(indicando anche la posizione dell’oggetto a massima distanza).
*/


/*
struct auto_S{int prova,float f, char c} automobile;


int funzioneprfjborit(automobile variabile[90]){


    scanf("%d",&variabile[0].prova);
    scanf("%c",&variabile[0].c);
}


*/




#include <math.h>   //LIBRERIA CONTENENTE LA FUNZIONE POW
#include <stdio.h>  //LIBRERIA CONTENETE LE FUNZIONI PRINTF/SCANF
#include <stdlib.h> //LIBRERIA CONTENETE LA FUNZIONE RAND
#include <time.h>   //CONTIENE LA FUNZIONE CLOCK
void distanze(int dim,int scacchiera[dim][dim],int xC,int yC,double dist[]);


int main () {


   //DICHIARAZIONE VARIABILI


   int dim=30;              //DIMENSIONE SCACCHIERA - PUO' ESSERE MODIFICATO
   int numOggetti=50;       //NUMERO MASSIMO DI OGGETTI - PUO' ESSERE MODIFICATO
   int scacchiera[dim][dim];//MATRICE CON UNA DIMENSIONE PRECEDENTEMENTE DEFINITA
   int i;                   //INDICE RIGA
   int j;                   //INDICE COLONNA
   double dist[numOggetti];  //VARIABILE PER LA DISTANZA DEGLI OGGETTI DAL CENTROIDE
   float maxdist=0;         //VARIABILE CONTENENTE LA DISTANZA MASSIMA
   int imax,jmax;           //INDICI PER LA POSIZIONE DELL'OGGETTO CON DISTANZA MASSIMA
   float mindist=dim;       //VARIBILE CONTENENTE LA DISTANZA MINIMA
   int imin,jmin;           //INDICI PER LA POSIZIONE DELL'OGGETTO CON DISTANZA MINIMA
   int cont=0;                //CONTA IL NUMERO DI OGGETTI
   int maxOggetti=numOggetti; //VARIABILE USATA PER IL RIEMPIMENTO DELLA MATRICE
   int xC=0;                //ORDINATA DEL CENTROIDE
   int yC=0;                //ASCISSA DEL CENTROIDE
   char onBox='X';          //CASELLA OCCUPATA - PUO' ESSERE MODIFICATO
   char offBox=' ';         //CASELLA LIBERA - PUO' ESSERE MODIFICATO
   char centroide='C';      //CENTROIDE - PUO' ESSERE MODIFICATO
   float call;
   srand(rand()+clock()+time(NULL)); //FUNZIONE PER LA GENERAZIONE DI OGGETTI CASUALI NELLA SCACCHIERA CON


   //RIEMPIMENTO SCACCHIERA


   for(i=0;i<dim;i++)
       for(j=0;j<dim;j++)
           scacchiera[i][j]=0;
   while(maxOggetti>0)
       {
       for(i=0;i<dim;i++)
           for(j=0;j<dim;j++)
               if((scacchiera[i][j]!=1) && (maxOggetti>0) && (rand()%1000==0))
               {
                       scacchiera[i][j]=1;
                       maxOggetti=maxOggetti-1;
               }
       }


   //CALCOLO IL CENTROIDE


   for(i=0;i<dim;i++)
       for(j=0;j<dim;j++)
           if(scacchiera[i][j])
               {
               xC+=j;
               yC+=i;
               }
   xC=xC/numOggetti;
   yC=yC/numOggetti;


   //VISUALIZZAZIONE DELLA SCACCHIERA SENZA IL CENTROIDE


   printf("  Scacchiera senza il centroide\n");


   printf("%c",201);         //-------------------------
   for(i=0;i<dim;i++)       //                        -
        printf("%c",205);     //DISEGNA BORDO SUPERIORE -
        printf("%c",187);         //                        -
        printf("\n");             //-------------------------
   for(i=0;i<dim;i++)
       {
       printf("%c",186);     //DISEGNA BORDO LATERALE SINISTRO
       for(j=0;j<dim;j++)
       {


               if(scacchiera[i][j])
                   printf("%c",onBox);
               else
                   printf("%c",offBox);
        }
       printf("%c",186);     //DISEGNA BORDO LATERALE DESTRO
       printf("\n");
    }
   printf("%c",200);         //-------------------------
   for (i=0;i<dim;i++)  //                        -
       printf("%c",205);     //DISEGNA BORDO INFERIORE -
       printf("%c",188);         //                        -
       printf("\n");             //-------------------------


   //VISUALIZZAZIONE DELLA SCACCHIERA CON IL CENTROIDE


   printf("\n  Scacchiera con il centroide\n");


   printf("%c",201);         //-------------------------
   for(i=0;i<dim;i++)       //                        -
        printf("%c",205);     //DISEGNA BORDO SUPERIORE -
        printf("%c",187);         //                        -
        printf("\n");             //-------------------------
   for(i=0;i<dim;i++)
       {
       printf("%c",186);     //DISEGNA BORDO LATERALE SINISTRO
       for(j=0;j<dim;j++)
       {
           if((j==xC) && (i==yC))
               printf("%c",centroide);
           else {
               if(scacchiera[i][j])
                   printf("%c",onBox);
               else
                   printf("%c",offBox);
                }
       }
       printf("%c",186);     //DISEGNA BORDO LATERALE DESTRO
       printf("\n");
   }
   printf("%c",200);         //-------------------------
   for (i=0;i<dim;i++)  //                        -
       printf("%c",205);     //DISEGNA BORDO INFERIORE -
       printf("%c",188);         //                        -
       printf("\n");             //-------------------------


   //VISUALIZZAZIONE DISTANZE


    distanze(dim,scacchiera,xC,yC,dist);


    for(i=0;i<numOggetti;i++)
    {


       for(j=0;j<numOggetti;j++)
       {


        if(dist[i]>maxdist)
            {
                    maxdist=dist[i];
                    imax=i; jmax=j;
            }
        else if(dist[i]<mindist)
            {
                    mindist=dist[i];
                    imin=i; jmin=j;
            }
        }
    }
            printf("\n\nDistanza massima/minima : %.2f[posizione %d,%d]/%.2f[posizione %d,%d]\n",maxdist,imax,jmax,mindist,imin,jmin);
}


 void distanze(int dim,int scacchiera[dim][dim],int xC,int yC,double dist[])
{
    int cont=0;
    int i,j;
    //VISUALIZZAZIONE DISTANZE
    for(i=0;i<dim;i++)
    {
        for(j=0;j<dim;j++)
        {
            if(scacchiera[i][j])
            {
                dist[cont]=sqrt(pow((xC-i),2)+pow((yC-j),2)); //FORMULA DISTANZA DAL CENTROIDE
                cont++;


                //printf("\nOggetto n%d di posizione %d,%d distanza : %lf",cont,i,j,dist[cont]);
                printf("Oggetto N%c %d di posizione %d,%d distanza = %.2lf\n",248,cont,i,j,dist[cont-1]);
            }
        }
    }
    return;
}

Grazie.