Errore programma in C (conflicting types for "function")

di il
9 risposte

Errore programma in C (conflicting types for "function")

Ho un problema su questo programma, non capisco a cosa è dovuto questo errore... se avete qualche dritta da darmi in merito al programma...
/*
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,int,int,int,float,int,int,int);

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(dim,i,j,scacchiera[dim][dim],dist,xC,yC,cont);

       for(i=0;i<dim;i++)
          {
        for(j=0;j<dim;j++)
            {
                printf("\nOggetto n%d di posizione %d,%d distanza : %.2f",cont,i,j,dist);
             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[][dim],float dist,int cont)
{
    //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 ++;
                return dist;
            }
        }
    }
}

9 Risposte

  • Re: Errore programma in C (conflicting types for "function")

    Semplice ... il compilatore evidenzia che hai dichiarato prima

    float distanze(int,int,int,int,float,int,int,int);

    e poi hai scritto

    float distanze(int i,int j,int dim,int scacchiera[][dim],float dist,int cont)

    e i tipi dei parametri sono diversi (oltre al numero di parametro ...)
  • Re: Errore programma in C (conflicting types for "function")

    oregon ha scritto:


    Semplice ... il compilatore evidenzia che hai dichiarato prima

    float distanze(int,int,int,int,float,int,int,int);

    e poi hai scritto

    float distanze(int i,int j,int dim,int scacchiera[][dim],float dist,int cont)

    e i tipi dei parametri sono diversi (oltre al numero di parametro ...)

    Quindi ? Il numero di parametri è lo stesso e sono dichiarati in ordine ho appena ricontrollato.. Forse sbaglio la dichiarazione del prototipo oppure la chiamata al SP...
  • Re: Errore programma in C (conflicting types for "function")

    
    float distanze(int,  int,  int,    int,                  float,     int,         int,int);
    float distanze(int i,int j,int dim,int scacchiera[][dim],float dist,int cont)
    {
     ...
     }
    

    Ricontrolla MEGLIO!
  • Re: Errore programma in C (conflicting types for "function")

    Giorgio13 ha scritto:


    oregon ha scritto:


    Semplice ... il compilatore evidenzia che hai dichiarato prima

    float distanze(int,int,int,int,float,int,int,int);

    e poi hai scritto

    float distanze(int i,int j,int dim,int scacchiera[][dim],float dist,int cont)

    e i tipi dei parametri sono diversi (oltre al numero di parametro ...)

    Quindi ? Il numero di parametri è lo stesso e sono dichiarati in ordine ho appena ricontrollato.. Forse sbaglio la dichiarazione del prototipo oppure la chiamata al SP...
    Incredibile ... ti dico che sono evidentemente diversi e insisti nell'errore !
  • Re: Errore programma in C (conflicting types for "function")

    oregon ha scritto:


    Giorgio13 ha scritto:


    oregon ha scritto:


    Semplice ... il compilatore evidenzia che hai dichiarato prima

    float distanze(int,int,int,int,float,int,int,int);

    e poi hai scritto

    float distanze(int i,int j,int dim,int scacchiera[][dim],float dist,int cont)

    e i tipi dei parametri sono diversi (oltre al numero di parametro ...)

    Quindi ? Il numero di parametri è lo stesso e sono dichiarati in ordine ho appena ricontrollato.. Forse sbaglio la dichiarazione del prototipo oppure la chiamata al SP...
    Incredibile ... ti dico che sono evidentemente diversi e insisti nell'errore !
    Ok, ho trovato l'errore, grazie, ora però non riesco a far funzionare la function come dovrebbe, in pratica dovrebbe stamparmi la distanza ( un numero reale) la posizione e infine la distanza massima e minima tra tutti gli oggetti ( 50)... Sono un pò negato con le function...
    /*
    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[][dim],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[dim][dim],dist,cont,xC,yC);
    
           for(i=0;i<dim;i++)
              {
            for(j=0;j<dim;j++)
                {
                    printf("\nOggetto n%d di posizione %d,%d distanza : %.2f",cont,i,j,dist);
                 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[dim][dim],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 ++;
                    return (dist);
                }
            }
        }
    }
    
  • Re: Errore programma in C (conflicting types for "function")

    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 ...
  • Re: Errore programma in C (conflicting types for "function")

    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);
                }
            }
        }
    }
    
  • Re: Errore programma in C (conflicting types for "function")

    Ok ... puoi anche dire qual è la riga 154 ?
  • Re: Errore programma in C (conflicting types for "function")

    oregon ha scritto:


    Ok ... puoi anche dire qual è la riga 154 ?
    Oregon ho risolto funziona tutto però quando deve calcolare la distanza massima e minima io stampo anche la posizione ( c'è scritto tutto nell'intestazione quindi credo sia chiaro ) , problema sta nel fatto che non mi stampa la posizione giusta ( data da i due indici i,j dell'array in cui va calcolata la distanza massima e minima)
    /*
    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++)
        {
           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 : %.2f, posizione %d,%d\nDistanza minima : %.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));//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 : %lf",cont,i,j,dist[cont]);
                    printf("Oggetto N%c %d di posizione %d,%d distanza = %.5lf\n",248,cont,i,j,dist[cont-1]);
                }
            }
        }
        return;
    }
    


    Per aiutarti nella visualizzazione devi guardare dalla riga col messaggio \\VISUALIZZA DISTANZE .
Devi accedere o registrarti per scrivere nel forum
9 risposte