Problema con l'ordinamento di un array

di il
6 risposte

Problema con l'ordinamento di un array

Salve a tutti, ho un problema con il seguente codice
#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;
    srand((unsigned)time(NULL));
    cout<<"Quanti istanti di tempo vuoi considerare? ";
    cin>>istanti_di_tempo;
    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;
        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_domanda==1)
        {
         domanda_min=slot/3; 
         domanda_max=slot/3+1;
        }
        else 
        {
         domanda_min=1; 
         domanda_max=slot;
        }
    clienti_max=domanda_tot_sistema/domanda_min;
    clienti_min=domanda_tot_sistema/domanda_max;
        if (tipo_di_clienti==1)
        {
         clienti= rand()%((clienti_max-clienti_min)/3+1)+clienti_min;  
        }
        else 
        {
        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];
    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;
     
     
     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; i++) 
          {  
           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;
       if (tipo_di_domanda==1)
        {
         new_domanda_min=new_slot/3; 
         new_domanda_max=new_slot/3+1;
        }
        else 
        {
         new_domanda_min=1; 
         new_domanda_max=new_slot;
        }
           cout <<"Domanda cliente " << i+1 << " = " << domanda_cliente << endl;
           cout<<endl;
           cout<<endl;
           f<<"Domanda cliente " << i+1 << " = " << domanda_cliente << endl;
           f<<endl;
           f<<endl;
           array_domanda[i]=domanda_cliente;
           
          }
        
        int k;
        int temp;
        for (i=0;i<clienti-1;i++)
        {
            for(k=i+1;k<clienti;k++)
            {
              if(array_domanda[i]<array_domanda[k])
              {
               temp=array_domanda[i];
               array_domanda[i]=array_domanda[k];
               array_domanda[k]=temp;                                     
              }                      
            }
            
        }
        
        for(i=0;i<clienti;i++)
        {
        cout<<array_domanda[i]<<endl;
        f<<array_domanda[i]<<endl;
        }
        
        
        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<<"La capacita' richiesta dal sistema e' = "<<totale<<endl;
        f<<endl;
        f<<endl;
        f<<endl;
        f<<endl;
        f<<endl;
        f<<endl;
}             
        
if(!f)
{
cout<<"Errore nella scrittura del file";
return 1;
}
cout<<"Scrittura avvenuta con successo!!!";
    cout<<endl;
    system("PAUSE");
    return 0;

}
In poche parole questo codice mi genera casualmente le domande di un certo numero di clienti; ho un output del genere:

Domanda cliente 1= 5
Domanda cliente 2=8
Domanda cliente 3= 9
...

Una volta generate queste domande, le inserisco in un array e le ordino in maniera decrescente.
Il problema incorre in questo momento.

Come faccio a tenere traccia di chi è la domanda?
cioè l'output una volta ordinate le domande è

9
8
5

ma in questo modo non sò più di quale cliente è la domanda.
Ci sta un modo per Capire che quella data domanda appartiene al cliente x?

Grazie e buona serata

6 Risposte

  • Re: Problema con l'ordinamento di un array

    Mostra tutto il codice completo ...
  • Re: Problema con l'ordinamento di un array

    Adesso sono con il cell e non ho il tempo di esaminare il codice(che, come ha richiesto Oregon, è meglio se posti per intero), ma posso proporti di:
    -creare una struct con cliente e domanda, che usi per tutte le operazioni (compreso l'ordinamento)
    -usare due array del tipo array[cliente]=domanda e array2[domanda]=cliente, effettuando le operazioni su entrambi
    -usare una struttura dati più complessa
  • Re: Problema con l'ordinamento di un array

    Ti ringrazio per la risposta.
    Il codice è completo ma non saprei proprio come implementare le struct. Non le ho mai utilizzate perchè sto cercando di rendere il codice il piu semplice possibile.
    Non sono a quei livelli di conoscenza del linguaggio c per implementare quello che dici.
    Se potresti farmi vedere come scriverle ti sarei molto grato.
    Buona domenica
  • Re: Problema con l'ordinamento di un array

    Se i clienti sono in ordine 1, 2, 3 ecc... potresti provare anche a creare un altro array memorizzando la posizione originale di ogni domanda in modo che poi puoi risalire al cliente.

    Per esempio:

    Domanda cliente 1= 5
    Domanda cliente 2=8
    Domanda cliente 3= 9

    L'output tuo ordinato è 9, 8, 5 e in un nuovo array puoi memorizzare 3, 2, 1 (numero del cliente) oppure 2, 1, 0 (gli indici)...a questo punto puoi memorizzare proprio la domanda del cliente...
  • Re: Problema con l'ordinamento di un array

    Nessuno può aiutarmi??
  • Re: Problema con l'ordinamento di un array

    Hai letto cos'ho scritto?
Devi accedere o registrarti per scrivere nel forum
6 risposte