Errore 1.#INF00 in C [help]

di il
3 risposte

Errore 1.#INF00 in C [help]

Ho un problema con il mio programma, devo calcolare la distanza di 50 oggetti su di una scacchiera da un punto centrale indicato con una 'C' al centro di essa. Funzionava ma non riuscivo a stampare la posizione degli oggetti a distanza massima/minima, quindi l'ho modificato ma mi da questo errore:

** Distanza massima/minima : 1.#INF00[posizione 45,10]/-1.#J[posizione 46,32] **

Non solo non mi calcola pià la distanza minima/massima dandomi quell'errore, ma non mi stampa la loro posizione esatta..Va aggiustato da //Visualizza distanze in poi, giusto per essere preciso.. Questo è 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 conti,int contj,int dim,int scacchiera[dim][dim],int xC,int yC,double dist[conti][contj]);
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][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 conti=0,contj=0;     //CONTA IL NUMERO DI OGGETTI/INDICI DEL VETTORE CONTENTE LE DISTANZE DEGLI 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
   srand(rand()+clock()+time(NULL)); //FUNZIONE PER LA GENERAZIONE DI OGGETTI CASUALI NELLA SCACCHIERA

   //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(conti,contj,dim,scacchiera,xC,yC,dist);

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

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

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


void distanze(int conti,int contj,int dim,int scacchiera[dim][dim],int xC,int yC,double dist[conti][contj])
{
    int i,j;
    //VISUALIZZAZIONE DISTANZE
    for(i=0;i<dim;i++)
    {
        for(j=0;j<dim;j++)
        {
            if(scacchiera[i][j])
            {
                dist[conti][contj]=sqrt(pow((xC-i),2)+pow((yC-j),2)); //FORMULA DISTANZA DAL CENTROIDE
                conti++;
                contj++;
                printf("Oggetto N%c %d di posizione %d,%d distanza = %.2lf\n",248,conti,i,j,dist[conti-1][contj-1]);
            }
        }
    }
    return 0;
}

3 Risposte

  • Re: Errore 1.#INF00 in C [help]

    Perché aumento i due indici

    conti++;
    contj++;

    nel for interno del calcolo delle distanze? Non è chiaro ...
  • Re: Errore 1.#INF00 in C [help]

    oregon ha scritto:


    Perché aumento i due indici

    conti++;
    contj++;

    nel for interno del calcolo delle distanze? Non è chiaro ...
    Allora in realtà avrei dovuto incrementare solo conti.. La incremento perché la uso per ordinare le distanze degli oggetti visualizzate, non so se hai eseguito il programma,

    "Oggetto N°1 a distanza ... " Etc..

    Ma il problema non credo sia quello...
  • Re: Errore 1.#INF00 in C [help]

    Non credi o hai fatto delle prove? Pensi che te lo abbia segnalato senza motivo?
Devi accedere o registrarti per scrivere nel forum
3 risposte