Ciclo for che non termina?aiuto!!

di il
4 risposte

Ciclo for che non termina?aiuto!!

Salve a tutti,

qualcuno potrebbe spiegarmi perchè il ciclo for del seguente codice prosegue all infinito?

Saluti
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
 ofstream f("C:\Domande programma tesi.txt",ios::out);
 int clienti;
 int istanti_di_tempo;
 int rack;
 int slot;
 int domanda_tot_sistema;
 int domanda_cliente;
 int i;
 int p;
 int t;
 int totale;
 int tipo_di_rack;
 int tipo_di_slot;
 int tipo_di_clienti;
 int tipo_di_domanda;
 int domanda_min;
 int domanda_max;
 int clienti_max;
 int clienti_min;
 int new_domanda_max;
 int new_domanda_min;
 int new_domanda_tot_sistema;
 int new_slot;
 int numero_di_prove;
 srand((unsigned)time(NULL));
 cout<<"Quanti istanti di tempo vuoi considerare? ";
 cin>>istanti_di_tempo;
 cout<<endl;
 cout<<endl;
 cout<<"Quanti prove vuoi simulare? ";
 cin>>numero_di_prove;
 cout<<endl;
 cout<<endl;
 cout<<"SCELTA DEL TIPO DI ISTANZA";
 cout<<endl;
 cout<<endl;
 cout<<"IL TIPO DI RACK E' BASSO (1) O ALTO (2)?  ";
 cin>>tipo_di_rack;
 cout<<endl;
 cout<<endl;
 cout<<"IL TIPO DI SLOT E' BASSO (1) O ALTO (2)?  ";
 cin>>tipo_di_slot;
 cout<<endl;
 cout<<endl;
 cout<<"IL TIPO DI CLIENTI E' BASSO (1) O ALTO (2)?  ";
 cin>>tipo_di_clienti;
 cout<<endl;
 cout<<endl;
 cout<<"IL TIPO DI DOMANDA E' UNIFORME (1) O HA ALTA VARIANZA (2)?  ";
 cin>>tipo_di_domanda;
 cout<<endl;
 cout<<endl;
 for(p=1;p<=numero_di_prove;p++)
   {
   cout<<"PROVA "<<p<<endl;
   cout<<endl;
   f<<"PROVA "<<p<<endl;
   f<<endl;
   if (tipo_di_rack==1)
    {
    rack = rand() % (6) + 5;
    }
   else 
    {
    rack = rand() % (11) + 5;
    }
    cout<<"Numero di rack = "<<rack<<endl;
    cout<<endl;
    f<<"Numero di rack = "<<rack<<endl;
    f<<endl;
    
   if (tipo_di_slot==1)
    {
    slot = rand ()%(6)+5;  
    }
   else 
    {
    slot = rand ()%(11)+20;
    }
    cout<<"Numero di slot per rack = "<<slot<<endl;
    cout<<endl;
    f<<"Numero di slot per rack = "<<slot<<endl;
    f<<endl;
   
  if (tipo_di_clienti==1)
   {
   domanda_min=1; 
   domanda_max=slot;
   clienti_max=domanda_tot_sistema/domanda_min;
   clienti_min=domanda_tot_sistema/domanda_max;
   clienti= rand()%((clienti_max-clienti_min)/3+1)+clienti_min;
         
   }
  else 
   {
   domanda_min=1; 
   domanda_max=slot;
   clienti_max=domanda_tot_sistema/domanda_min;
   clienti_min=domanda_tot_sistema/domanda_max;
   clienti= rand()%((clienti_max-clienti_min)/3+1)+clienti_max-(clienti_max-clienti_min)/3;  
   }
   cout<<"Numero di clienti = "<<clienti<<endl;
   cout<<endl;
   f<<"Numero di clienti = "<<clienti<<endl;
   f<<endl;
   int array_domanda[clienti];
   int array_rack[clienti];
   int array_cliente[clienti];
   domanda_tot_sistema=slot*rack;
   cout<<"CAPACITA' SISTEMA = "<<domanda_tot_sistema<<endl;
   cout<<endl;
   cout<<endl;
   cout<<endl;
   cout<<endl;
   f<<"CAPACITA' SISTEMA = "<<domanda_tot_sistema<<endl;
   f<<endl;
   f<<endl;
   f<<endl;
   f<<endl;
   int matrice_domanda[clienti][istanti_di_tempo];
   int matrice_rack[clienti][istanti_di_tempo];
   for (t=1;t<=istanti_di_tempo;t++)
     {
     cout<<"Istante di tempo "<<t<<endl; 
     cout<<endl;
     cout<<endl;
     cout<<endl;
     f<<"Istante di tempo "<<t<<endl; 
     f<<endl;
     f<<endl;
     f<<endl;
     totale=0;
     new_domanda_max=domanda_max;
     new_slot=slot;
     new_domanda_min=domanda_min;
     new_domanda_tot_sistema=domanda_tot_sistema;
     for (i = 0; i<=clienti-1; i++) 
      {  
      if (tipo_di_domanda==1)
       {
       new_domanda_min=new_slot/3; 
       new_domanda_max=new_slot/3+2;
       domanda_cliente = rand() % (new_domanda_max-new_domanda_min+1)+(new_domanda_min);
       new_domanda_tot_sistema=new_domanda_tot_sistema-domanda_cliente;
       totale=totale+domanda_cliente;
       new_slot=new_domanda_tot_sistema/rack;
       }
      else 
       {
       new_domanda_min=new_slot/8; 
       new_domanda_max=new_slot/3;
       domanda_cliente = rand() % (new_domanda_max-new_domanda_min+1)+(new_domanda_min);
       new_domanda_tot_sistema=new_domanda_tot_sistema-domanda_cliente;
       totale=totale+domanda_cliente;
       new_slot=new_domanda_tot_sistema/rack;
       }
      array_cliente[i]=i+1;
      array_domanda[i]=domanda_cliente;
      cout <<"Domanda cliente " <<array_cliente[i]<< " = " << array_domanda[i] << endl;
      cout<<endl;
      cout<<endl;
      f<<"Domanda cliente " <<array_cliente[i]<< " = " << array_domanda[i] << endl;
      f<<endl;
      f<<endl;                                                    
           
      }
     int k;
     int temp;
     for (i=0;i<=clienti-2;i++)
      {
      for(k=i+1;k<=clienti-1;k++)
       {
       if(array_domanda[i]<array_domanda[k])
        {
        temp=array_domanda[i];
        array_domanda[i]=array_domanda[k];
        array_domanda[k]=temp;  
        temp=array_cliente[i];
        array_cliente[i]=array_cliente[k];
        array_cliente[k]=temp;                            
        }                       
       }    
      }  
        
     for(i=0;i<=clienti-1;i++)
      {
      matrice_domanda[array_cliente[i]-1][t-1]=array_domanda[i];
      }
     cout<<endl;
     cout<<"La capacita' richiesta dal sistema e' = "<<totale<<endl;
     cout<<endl;
     cout<<endl;
     cout<<endl;
     cout<<endl;
     cout<<endl;
     cout<<endl;
     cout<<endl;
     f<<endl;
     f<<"La capacita' richiesta dal sistema e' = "<<totale<<endl;
     f<<endl;
     f<<endl;
     f<<endl;
     f<<endl;
     f<<endl;
     f<<endl;
     int r;
     int new_rack=rack;
     int spazio_rack[new_rack];
     for(i=0;i<new_rack;i++)
       {
        spazio_rack[i]=slot;                    
       }
     for(i=0;i<=clienti-1;i++)
      {
      r=1;
      if(t=1)
      {
       etichetta:      
       if(array_domanda[i]<=spazio_rack[r-1])
       {
       spazio_rack[r-1]=spazio_rack[r-1]-array_domanda[i];
       array_rack[i]=r;
       matrice_rack[array_cliente[i]-1][t-1]=array_rack[i];
       cout<<"CLIENTE "<<array_cliente[i]<<" sta nel RACK "<<array_rack[i]<<endl;
       f<<"CLIENTE "<<array_cliente[i]<<" sta nel RACK "<<array_rack[i]<<endl;
       }
        else
        {
        if(r==new_rack)
        {
        new_rack=new_rack+1;
        r=r+1;
        spazio_rack[r]=slot;
        goto etichetta;  
        }      
       else
        {
        r=r+1;
        goto etichetta;
        }  
       } 
                 
      }
      else
      {
       if (array_domanda[i]<=spazio_rack[matrice_rack[array_cliente[i]-1][t-2]])
       {
         spazio_rack[matrice_rack[array_cliente[i]-1][t-2]]=spazio_rack[matrice_rack[array_cliente[i]-1][t-2]]-array_domanda[i];
         array_rack[i]=matrice_rack[array_cliente[i]-1][t-2];
         matrice_rack[array_cliente[i]-1][t-1]=array_rack[i]; 
         cout<<"CLIENTE "<<array_cliente[i]<<" sta nel RACK "<<array_rack[i]<<endl;
         f<<"CLIENTE "<<array_cliente[i]<<" sta nel RACK "<<array_rack[i]<<endl;
       } 
       else
       {
       etichetta_2:
        if(array_domanda[i]<=spazio_rack[r-1])
        {
         spazio_rack[r-1]=spazio_rack[r-1]-array_domanda[i];
         array_rack[i]=r;
         matrice_rack[array_cliente[i]-1][t-1]=array_rack[i];  
         cout<<"CLIENTE "<<array_cliente[i]<<" sta nel RACK "<<array_rack[i]<<endl;
         f<<"CLIENTE "<<array_cliente[i]<<" sta nel RACK "<<array_rack[i]<<endl;          
        } 
        else
        {
        if(r==new_rack)
        {
        new_rack=new_rack+1;
        r=r+1;
        spazio_rack[r]=slot;
        goto etichetta_2;  
        }      
       else
        {
        r=r+1;
        goto etichetta_2;
        }  
       } 
         
      }
      }
      }
     cout<<endl;  
     cout<<endl;
     cout<<"AGGIUNTI "<<new_rack-rack<<" NUOVI RACK"<<endl;
     cout<<endl;  
     cout<<endl;
     f<<endl;  
     f<<endl;
     f<<"SONO STATI AGGIUNTI "<<new_rack-rack<<" RACK"<<endl;   
     f<<endl;  
     f<<endl;  
     } 
   int migrazioni=0;  
   etichetta_1: 
   for (i=0;i<=clienti-1;i++)
    {
    for (t=1;t<=istanti_di_tempo-1;t++)
     {
            
     if (matrice_rack[i][t-1]!=matrice_rack[i][t] )
      {
      migrazioni=migrazioni+matrice_domanda[i][t-1];                                             
      }   
     }
    }

         
         
         
   cout<<"MATRICE RACK"<<endl;
   cout<<endl;
   f<<"MATRICE RACK"<<endl;
   f<<endl;
   for(i = 0; i <=clienti-1; i++)
    {
    for(t = 1; t <=istanti_di_tempo; t++)
     {
     cout << matrice_rack[i][t-1] <<"-";
     f << matrice_rack[i][t-1] <<"-";
     }
     cout << '\n';
     f << '\n';
                
    }
        
   cout<<endl;
   cout<<endl;
   f<<endl;
   f<<endl;
   cout<<"MATRICE DOMANDA"<<endl;
   cout<<endl;
   f<<"MATRICE DOMANDA"<<endl;
   f<<endl;
        
   for(i = 0; i <=clienti-1; i++)
    {
    for(t = 1; t <=istanti_di_tempo; t++)
     {
     cout << matrice_domanda[i][t-1] <<"-";
     f << matrice_domanda[i][t-1] <<"-";               
     }
   cout << '\n';
   f << '\n';
    }

   cout<<endl;
   cout<<endl;
   cout<<"IL NUMERO DI MIGRAZIONI TOTALI SONO "<<migrazioni<<endl;
   cout<<endl;
   cout<<endl;
   f<<endl;
   f<<endl;
   f<<"IL NUMERO DI MIGRAZIONI TOTALI SONO "<<migrazioni<<endl;
   f<<endl;
   f<<endl;

}
        
 if(!f)
  {
  cout<<endl;
  cout<<endl;
  cout<<"Errore nella scrittura del file";
  return 1;
  }
 cout<<endl;
 cout<<endl;
 cout<<"Scrittura avvenuta con successo!!!";
 cout<<endl;
 system("PAUSE");
 return 0;
}

4 Risposte

  • Re: Ciclo for che non termina?aiuto!!

    Quale for?
  • Re: Ciclo for che non termina?aiuto!!

    Non saprei di preciso quale sia.
    Se faccio girare il codice e metto 1 prova ed 1 istante di tempo, tutto funziona perfettamente.
    Se metto una prova e 2 o piu istanti di tempo non esce mai dal ciclo e quello che noto è che ripete sempre l'istante di tempo 2, cioè si ferma in t=2 e lo ripete sempre.
    Non ne capisco proprio il motivo.

    Grazie per l aiuto
  • Re: Ciclo for che non termina?aiuto!!

    Ho risolto.
    il problema era che avevo scritto if t=1 volendo intendere fosse uguale ad uno invece di if t==1.
    Grazie a tutti
  • Re: Ciclo for che non termina?aiuto!!

    Se usavi un ambiente di sviluppo SERIO non avresti mai postato questo messaggio perche il compilatore avrebbe emesso un WARNING e tu lo avresti visto e risolto ancor prima di passare dal di qui.
    Perciò ce ti piace perder tempo prosegui cosi, è sicuramente la strada giusta.
Devi accedere o registrarti per scrivere nel forum
4 risposte