PDA

Visualizza la versione completa : Dividere un progetto in più file


giorgio13
02-05-2017, 10:36
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...


/*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.

oregon
02-05-2017, 14:24
Cosa fai? Cosa succede?

Metti il main in un file .c tutte le funzioni in un altro file .c e le dichiarazioni delle funzioni in un .h che includerai nel file dove c'� il main

giorgio13
02-05-2017, 17:07
L'ho fatto ma non va ! Ho messo il main in un file main.c poi ho aggiunto un file che ho chiamato header.h dove ci ho messo la dichiarazione dei prototipi, e la funzione distanza in un altro file chiamato distanza.c... Help me... x(
L'ho suddiviso così : questo è il main.c

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);
}


Questo invece la function:

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 0;
}


e infine l'header :


#ifndef HEADER_H_INCLUDED#define HEADER_H_INCLUDED
#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[]);




#endif // HEADER_H_INCLUDED


Mi da errore sulla srand nel main ...

oregon
02-05-2017, 20:20
Puoi indicare esattamente quale errore hai e come hai compilato i 3 file?

Loading