sebaldar ha scritto:
Devi nuovamente iterare sulla orizzontale e verticale, un esempio potrebbe essere
//VISUALIZZAZIONE DISTANZE
for ( int i = 0; i < dim; ++i)
for ( int j = 0; j < dim; ++j ) {
int distanza = sqrt( pow( ( xC - i ), 2 ) + pow ( ( yC - j), 2) );
printf("%i", distanza);
printf("\n");
}
Buongiorno, grazie per l'aiuto, sono riuscito a completare l'esercizio però non funziona una cosa ( una banalità ); quando stampo la distanza massima/minima dei 50 oggetti, devo stampare anche la loro posizione, per farti capire : [esempio]
distanza massima = 30, di posizione 15 - distanza minima = 2, di posizione 24
guardando l'esercizio capirai meglio... In pratica stampa delle posizioni errate che non rispecchiano le reali poszioni, puoi accorgertene semplicemente controllando la distanza massima e minima a quale oggetto corrispondono quando li stampo prima di calcolare la massima e minima distanza. ECCO IL 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;
}