Ordinare in ordine decrescente output codice?

di il
88 risposte

Ordinare in ordine decrescente output codice?

Salve a tutti,

sto creando un programma per la tesi e siccome non sono molto pratico di programmazione mi sono bloccato.

Vi spiego il problema in sintesi.

Il numero di clienti è un valore casuale e anche la domanda di tot pezzi che essi richiedono.
Sono riuscito a far tutto fin qui ma una volta che attraverso il ciclo for per i che va da 1 al numero di clienti il programma mi stampa a schermo tutte le domande dei clienti, come faccio a sommare tutte le domande che vengono fuori per controllare che la loro somma sia inferiore ad un certo valore?

vi posto anche il programma scritto fin ora.

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int rack;
int slot;
int domanda_tot;
int domanda_cliente;
int i;
int clienti;//ho definito clienti come intero almeno c++ mi prende direttamente la parte intera inferiore
srand((unsigned)time(NULL));//per inizializzare la funzione rand()
rack = rand() % (11) + 5;
cout<<"Numero di rack = "<<rack<<endl;
cout<<endl;
slot = rand ()%(11)+20;
cout<<"Numero di slot per rack = "<<slot<<endl;
cout<<endl;
domanda_tot=slot*rack;
cout<<"Domanda totale che il sistema sopporta = "<<domanda_tot<<endl;
cout<<endl;
clienti= rand()%((2*(domanda_tot/slot)-(domanda_tot/slot))+1)+(domanda_tot/slot);
cout<<"Numero di clienti = "<<clienti<<endl;
cout<<endl;

for (i=1;i<=clienti;i++)
{
domanda_cliente=rand()%(slot-(slot/2)+1)+(slot/2);
cout<<"Domanda cliente "<<i<<" = "<<domanda_cliente<<endl;

}

cout<<endl;
system("PAUSE");
return 0;

}



Spero in una vostra risposta.

Saluti e buona serata

88 Risposte

  • Re: Ordinare in ordine decrescente output codice?

    Cioè vuoi sommare le variabili domanda_cliente?
    Se è così ti dichiari una variabile
    int somma_domande = 0;
    prima del ciclo for e poi dentro la incrementi in questo modo
    
    ...
    domanda_cliente=rand()%(slot-(slot/2)+1)+(slot/2);
    somma_domande += domanda_cliente;
    
    Al termine del ciclo for, la variabile contiene la somma che volevi.
  • Re: Ordinare in ordine decrescente output codice?

    Perfetto grazie mille .
  • Re: Ordinare in ordine decrescente output codice?

    Scusatemi ancora ma perchè il programma mi si è impazzito??non si ferma più...dove ho sbagliato??


    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main()
    {
    int istanti_di_tempo;
    int numero_di_prove;
    int rack;
    int slot;
    int domanda_tot_sistema;
    int domanda_cliente;
    int i;
    int t;
    int totale;
    int clienti;//ho definito clienti come intero almeno c++ mi prende direttamente la parte intera inferiore
    cout<<"Quanti istanti di tempo vuoi considerare? ";
    cin>>istanti_di_tempo;
    cout<<endl;
    cout<<"Quante prove vuoi fare? ";
    cin>>numero_di_prove;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    for(t=1;t<=istanti_di_tempo;t++)
    {
    cout<<"Prova "<<t<<endl;
    cout<<endl;
    cout<<endl;
    srand((unsigned)time(NULL));//per inizializzare la funzione rand()
    rack = rand() % (11) + 5;
    cout<<"Numero di rack = "<<rack<<endl;
    cout<<endl;
    slot = rand ()%(11)+20;
    cout<<"Numero di slot per rack = "<<slot<<endl;
    cout<<endl;
    domanda_tot_sistema=slot*rack;
    cout<<"Domanda totale che il sistema sopporta = "<<domanda_tot_sistema<<endl;
    cout<<endl;
    clienti= rand()%((2*(domanda_tot_sistema/slot)-(domanda_tot_sistema/slot))+1)+(domanda_tot_sistema/slot);
    cout<<"Numero di clienti = "<<clienti<<endl;
    cout<<endl;
    totale=0;
    etichetta:
    for (i=1;i<=clienti;i++)
    {
    domanda_cliente=rand()%(slot-(slot/2)+1)+(slot/2);
    cout<<"Domanda cliente "<<i<<" = "<<domanda_cliente<<endl;
    totale+=domanda_cliente;
    if(totale>=domanda_tot_sistema)
    goto etichetta;
    }

    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;
    system("PAUSE");
    return 0;

    }
  • Re: Ordinare in ordine decrescente output codice?

    La colpa è di quel goto (che tra l'altro non dovresti utilizzare perché è veramente old style).
    Se la domanda del primo cliente è superiore alla capacità il programma torna indietro e riparte con il ciclo, ma se la domanda è ancora superiore alla capacità il programma torna indietro, eccetera. Ecco il tuo ciclo infinito.

    Dovresti rivedere un po' la logica del codice...
  • Re: Ordinare in ordine decrescente output codice?

    Cosa mi suggerisci di utilizzare al posto del goto??
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    cosa mi suggerisci di utilizzare al posto del goto??
    Ad esempio un do-while
    
    do {
        qualcosa;
    } while (devo_ripetere);
    
    Ma il problema secondo me è un altro. Nel senso che anche con il while "torni indietro" (cioè esegui nuovamente una parte di codice): devi però stare attento a non finire in un ciclo infinito. L'osservazione sul goto era più che altro di tipo stilistico, ma qui secondo me c'è qualcosa che non va a livello di logica.
  • Re: Ordinare in ordine decrescente output codice?

    Forse ho capito il problema.
    Probabile che totale non si resettava e quindi il suo valore non partiva da zero quando tornava all etichetta??
  • Re: Ordinare in ordine decrescente output codice?

    Sì, quello è sicuramente vero! Adesso almeno il programma sembra terminare normalmente. Poi sarai tu a valutare se i risultati sono corretti oppure no...
  • Re: Ordinare in ordine decrescente output codice?

    Grazie mille per la disponibilità
  • Re: Ordinare in ordine decrescente output codice?

    Figurati! Se hai ancora bisogno siamo qui.
  • Re: Ordinare in ordine decrescente output codice?

    Scusami se ti disturbo.
    Non capisco perchè ogni volta che mi esegue una nuova prova, i valori random sono sempre gli stessi e non cambiano, come mai?? invece in ogni istante di tempo variano e va bene così.
    Ti inserisco il codice, un po modificato


    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main()
    {
    int istanti_di_tempo;
    int numero_di_prove;
    int rack;
    int slot;
    int domanda_tot_sistema;
    int domanda_cliente;
    int i;
    int p;
    int t;
    int totale;
    int clienti;//ho definito clienti come intero almeno c++ mi prende direttamente la parte intera inferiore
    cout<<"Quanti istanti di tempo vuoi considerare? ";
    cin>>istanti_di_tempo;
    cout<<endl;
    cout<<"Quante prove vuoi fare? ";
    cin>>numero_di_prove;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    for(p=1;p<=numero_di_prove;p++)
    {
    cout<<"PROVA "<<p<<endl;
    cout<<endl;
    cout<<endl;
    srand((unsigned)time(NULL));//per inizializzare la funzione rand()
    rack = rand() % (11) + 5;
    cout<<"Numero di rack = "<<rack<<endl;
    cout<<endl;
    slot = rand ()%(11)+20;
    cout<<"Numero di slot per rack = "<<slot<<endl;
    cout<<endl;
    domanda_tot_sistema=slot*rack;
    cout<<"Domanda totale che il sistema sopporta = "<<domanda_tot_sistema<<endl;
    cout<<endl;
    clienti= rand()%((2*(domanda_tot_sistema/slot)-(domanda_tot_sistema/slot))+1)+(domanda_tot_sistema/slot);
    cout<<"Numero di clienti = "<<clienti<<endl;
    cout<<endl;

    for (t=1;t<=istanti_di_tempo;t++)
    {
    cout<<"Istante di tempo "<<t<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    etichetta:
    totale=0;
    for (i=1;i<=clienti;i++)
    {

    domanda_cliente=rand()%(slot-(slot/2)+1)+(slot/2);
    totale+=domanda_cliente;
    if(totale>=domanda_tot_sistema)
    {
    goto etichetta;
    }
    cout<<"Domanda cliente "<<i<<" = "<<domanda_cliente<<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;
    system("PAUSE");
    return 0;


    }
  • Re: Ordinare in ordine decrescente output codice?

    La srand la devi fare una sola volta all'inizio del main.

    P.S. Per favore usa i tag CODE altrimenti il codice è difficile da leggere.
  • Re: Ordinare in ordine decrescente output codice?

    Non lo sapevo scusami.
    Comunque funziona grazie

    Unico problema??
    delle volte fa il ciclo infinito, dopo aver fatto piu tentativi funziona.

    Non saprei come risolvere
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int istanti_di_tempo;
        int numero_di_prove;
        int rack;
        int slot;
        int domanda_tot_sistema;
        int domanda_cliente;
        int i;
        int p;
        int t;
        int totale;
        int clienti;//ho definito clienti come intero almeno c++ mi prende direttamente la parte intera inferiore
        srand((unsigned)time(NULL));//per inizializzare la funzione rand()
        cout<<"Quanti istanti di tempo vuoi considerare? ";
        cin>>istanti_di_tempo;
        cout<<endl;
        cout<<"Quante prove vuoi fare? ";
        cin>>numero_di_prove;
        cout<<endl;
        cout<<endl;
        cout<<endl;
        cout<<endl;
             for(p=1;p<=numero_di_prove;p++)
             {
                    cout<<"PROVA "<<p<<endl;
                    cout<<endl;
                    cout<<endl;                               
                    rack = rand() % (11) + 5;
                    cout<<"Numero di rack = "<<rack<<endl;
                    cout<<endl;
                    slot = rand ()%(11)+20;
                    cout<<"Numero di slot per rack = "<<slot<<endl;
                    cout<<endl;
                    domanda_tot_sistema=slot*rack;
                    cout<<"Domanda totale che  il sistema sopporta = "<<domanda_tot_sistema<<endl;
                    cout<<endl;
                    clienti= rand()%((2*(domanda_tot_sistema/slot)-(domanda_tot_sistema/slot))+1)+(domanda_tot_sistema/slot);
                    cout<<"Numero di clienti = "<<clienti<<endl;
                    cout<<endl;
                    cout<<endl;
                    cout<<endl;
                    
                          for (t=1;t<=istanti_di_tempo;t++)
                          {
                               cout<<"Istante di tempo "<<t<<endl; 
                               cout<<endl;
                               cout<<endl;
                               cout<<endl;
                               etichetta:
                               totale=0;        
                                   for (i=1;i<=clienti;i++)
                                   {
                               
                                        domanda_cliente=rand()%(slot-(slot/2)+1)+(slot/2);
                                        totale+=domanda_cliente;
                                        if(totale>=domanda_tot_sistema)
                                        {
                                        goto etichetta;
                                        }
                                        cout<<"Domanda cliente "<<i<<" = "<<domanda_cliente<<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;
        system("PAUSE");
        return 0;
        
    
    }
    
  • Re: Ordinare in ordine decrescente output codice?

    Visto che il problema si presenta saltuariamente, direi che è colpa della randomizzazione. Sei sicuro che tutti i parametri che imposti siano corretti?
    Ad esempio
    clienti = rand() % ((2 * (domanda_tot_sistema / slot) - (domanda_tot_sistema / slot)) + 1)
    				+ (domanda_tot_sistema / slot);
    e
    domanda_cliente = rand() % (slot - (slot / 2) + 1) + (slot / 2);
    Queste cose le devi guardare tu perché non hanno a che fare con la sintassi del linguaggio, ma proprio con la logica di quello che vuoi fare.
Devi accedere o registrarti per scrivere nel forum
88 risposte