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;
}