oregon ha scritto:
A parte che questo è un altro problema e servirebbe un altro thread, comunque non hai dato tante indicazioni tranne un generico "sono negato" ...
Non basta per capire che problema specifico hai e dove cercare nel codice per tentare di risolverlo ...
Si hai ragione.. Cercherò di essere il più preciso possibile, altrimenti puoi anche chiudere..
Allora la function deve calcolare la distanza di 50 oggetti ( che hanno una componente X/Y) da un punto centrale ( indicato con una 'C' sulla scacchiera). Il programma funzionava, fino a quando non ho riscritto quest'ultima come function, in pratica ho richiamato questa function ( distanze() ) nel main, che dovrà ritornare le 50 distanze dei 50 oggetti. Subito dopo la chiamata vengono fatti due semplici controlli per calcolare la massima distanza, e la minima distanza.. Per calcolare la distanza dei 50 oggetti ovviamente ho messo un controllo nella function per verificare che l'oggetto di cui stiamo andando a calcolare la distanza non sia uno spazio ( poichè sulla scacchiera 30x30 ci sono spazi e oggetti indicati da una 'X').
l'errore è questo : RIGA 154 error: subscripted value is neither array nor pointer nor vector.
Se devo aprire un altro thread non c'è problema..
Infine rimetto il codice aggiornato :
/*
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).
*/
#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
float distanze(int i,int j,int dim,int scacchiera,float dist,int cont,int xC,int yC);
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
float dist; //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
call=distanze(i,j,dim,scacchiera,dist,cont,xC,yC);
if(dist>maxdist)
{
maxdist=dist;imax=i;jmax=j;
}
else if(dist<mindist)
{
mindist=dist;imin=i;jmin=j;
}
printf("\n\nDistanza massima : %.2f, posizione %d,%d\nDistanza minima : %.2f, posizione %d,%d\n",maxdist,imax,jmax,mindist,imin,jmin);
}
float distanze(int i,int j,int dim,int scacchiera,float dist,int cont,int xC,int yC)
{
//VISUALIZZAZIONE DISTANZE
for(i=0;i<dim;i++)
{
for(j=0;j<dim;j++)
{
if(scacchiera[i][j])
{
dist=sqrt(pow((xC-i),2)+pow((yC-j),2)); //FORMULA DISTANZA=SQRT(POW((xC-i),2)+POW((yC-j),2))
cont ++;
printf("\nOggetto n%d di posizione %d,%d distanza : %.2f",cont,i,j,dist);
return (dist,i,j);
}
}
}
}