Ordinare in ordine decrescente output codice?

di il
88 risposte

88 Risposte - Pagina 4

  • Re: Ordinare in ordine decrescente output codice?

    Perfetto...appena posso provo a sostituire il go to con questo
  • Re: Ordinare in ordine decrescente output codice?

    Ma il goto non lo avevamo sostituito con il do-while? Non è quello che causa i cicli infiniti...
    Questa tecnica di memorizzare i risultati prima di stamparli la puoi utilizzare per evitare di stampare qualcosa che poi non si rivela corretto. Comunque non eviterà la presenza di cicli infiniti; semplicemente verrà soppresso l'output, ma il programma non terminerà ugualmente.
  • Re: Ordinare in ordine decrescente output codice?

    Ci provo
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    Ci provo
    Ok, facci sapere se succede il miracolo, perché proprio di un miracolo si tratterebbe...

    P.S. Non sono ottimista...
  • Re: Ordinare in ordine decrescente output codice?

    Ragazzi come mai se faccio girare il programma cap_residua non si decrementa???
     for (i = 1; i <= clienti; i++) 
                                   {
                                    domanda_cliente = rand() % (slot-domanda_min+1)+(slot/3);
                                    cap_residua=domanda_tot_sistema-domanda_cliente;
                                    totale += domanda_cliente;
                                    slot=cap_residua/rack;
                                    cout << "Domanda cliente " << i << " = " << domanda_cliente << endl;
                                    cout<<slot<<endl;
                                    cout<<cap_residua<<endl;
                                    }
  • Re: Ordinare in ordine decrescente output codice?

    Scusate ragazzi ho risolto, avevo scritto una cavolata.
    Però ora quando gira il programma, fa i calcoli e poi mi dice il "nome progetto" ha smesso di funzionare.
    Come mai??
    un altra domanda
    #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;
                    int domanda_min=slot/3;
                    int clienti_max=(domanda_tot_sistema/(domanda_min));
                    int clienti_min=domanda_tot_sistema/slot;
                    clienti= rand()%(clienti_max-clienti_min+1)+clienti_min;
                    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-domanda_min+1)+(slot/3);
                                    domanda_tot_sistema=domanda_tot_sistema-domanda_cliente;
                                    totale += domanda_cliente;
                                    slot=domanda_tot_sistema/rack;
                                    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;
        
    nell ultimo ciclo for ho fatto cambiare valore ad una variabile che ho utilizzato al di fuori del ciclo cioè la variabile SLOT...la variazione all interno del ciclo non influenza il valore calcolato all inizio del programma vero??
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    nell ultimo ciclo for ho fatto cambiare valore ad una variabile che ho utilizzato al di fuori del ciclo cioè la variabile SLOT...la variazione all interno del ciclo non influenza il valore calcolato all inizio del programma vero??
    Come no? Certo che il valore cambia! Sia domanda_tot_sistema sia slot cambiano il loro valore in modo definitivo. Se invece vuoi che le modifiche siano "locali" allora devi agire su una copia della variabile originale.
  • Re: Ordinare in ordine decrescente output codice?

    Ok, ho finalmente trovato qualche minuto per guardare bene il codice e ho identificato l'errore: cambiando il valore delle variabili, a volte (dato che è random) arrivi a una situazione per cui
    slot-domanda_min+1 = 0
    Quindi quando vai a fare
    domanda_cliente = rand() % (slot-domanda_min+1)+(slot/3);
    ottieni ovviamente un errore, dato che vai a richiedere il resto di una divisione per 0.
  • Re: Ordinare in ordine decrescente output codice?

    minomic ha scritto:


    Daniloo ha scritto:


    nell ultimo ciclo for ho fatto cambiare valore ad una variabile che ho utilizzato al di fuori del ciclo cioè la variabile SLOT...la variazione all interno del ciclo non influenza il valore calcolato all inizio del programma vero??
    Come no? Certo che il valore cambia! Sia domanda_tot_sistema sia slot cambiano il loro valore in modo definitivo. Se invece vuoi che le modifiche siano "locali" allora devi agire su una copia della variabile originale.
    Ma se il valore lo ha già stampato con il cout a me interessa soltanto che il valore che ha stampato prima del ciclo for resti lo stesso . Quindi penso che potrei lasciarlo così tanto la variabile iniziale mi serve solo per la stampa a schermo. che ne dici?
  • Re: Ordinare in ordine decrescente output codice?

    Forse non ci siamo capiti: tu dentro al ciclo for vai a modificare delle variabili che poi utilizzi alla successiva iterazione dello stesso ciclo. E' questo quello che vuoi? Perché è perfettamente "corretto" se è quello che vuoi fare. Se invece pensi che le modifiche siano solo momentanee, allora no! Quello che è stato stampato è indifferente: la stampa rappresenta solo la "fotografia" di una certa variabile in un certo istante di tempo. La volta successiva che vai ad utilizzare una variabile per un calcolo, il suo valore verrà letto nuovamente. Se nel frattempo lo avevi cambiato... verrà ovviamente considerato il nuovo valore.
  • Re: Ordinare in ordine decrescente output codice?

    minomic ha scritto:


    Ok, ho finalmente trovato qualche minuto per guardare bene il codice e ho identificato l'errore: cambiando il valore delle variabili, a volte (dato che è random) arrivi a una situazione per cui
    slot-domanda_min+1 = 0
    Quindi quando vai a fare
    domanda_cliente = rand() % (slot-domanda_min+1)+(slot/3);
    ottieni ovviamente un errore, dato che vai a richiedere il resto di una divisione per 0.
    Ho risolto in questo modo.
     etichetta:
                               totale = 0;
                               for (i = 1; i <= clienti; i++) 
                                   {
                                    domanda_cliente = rand() % (slot-domanda_min+1)+(slot/3);
                                    domanda_tot_sistema=domanda_tot_sistema-domanda_cliente;
                                    totale += domanda_cliente;
                                    slot=domanda_tot_sistema/rack;
                                    cout << "Domanda cliente " << i << " = " << domanda_cliente << endl;
                                    if (domanda_tot_sistema=0)
                                    goto etichetta;
                                    }
    So che il goto è un po brutto come comando ma cosi funziona

    Grazie mille
  • Re: Ordinare in ordine decrescente output codice?

    No così non va bene: ti manca un uguale in
    if (domanda_tot_sistema=0)
    E il significato è completamente diverso. Correggendo l'errore, il programma torna ovviamente a crashare. Come ti ho già detto (e scritto in privato) il goto non cambia assolutamente nulla!
  • Re: Ordinare in ordine decrescente output codice?

    minomic ha scritto:


    Forse non ci siamo capiti: tu dentro al ciclo for vai a modificare delle variabili che poi utilizzi alla successiva iterazione dello stesso ciclo. E' questo quello che vuoi? Perché è perfettamente "corretto" se è quello che vuoi fare. Se invece pensi che le modifiche siano solo momentanee, allora no! Quello che è stato stampato è indifferente: la stampa rappresenta solo la "fotografia" di una certa variabile in un certo istante di tempo. La volta successiva che vai ad utilizzare una variabile per un calcolo, il suo valore verrà letto nuovamente. Se nel frattempo lo avevi cambiato... verrà ovviamente considerato il nuovo valore.
    Sisi è questo che voglio perfetto
  • Re: Ordinare in ordine decrescente output codice?

    minomic ha scritto:


    No così non va bene: ti manca un uguale in
    if (domanda_tot_sistema=0)
    E il significato è completamente diverso. Correggendo l'errore, il programma torna ovviamente a crashare. Come ti ho già detto (e scritto in privato) il goto non cambia assolutamente nulla!
    Aggiungendo un altro == mi da di nuovo errore quando gira .
    Come posso risolvere??
    Perchè dici che
    domanda_cliente = rand() % (slot-domanda_min+1)+(domanda_min);
    se slot - domanda_min=0 
    sto facendo una divisione per 0??
    quel valore lo usa solamente per il calcolo della random.
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    Perchè dici che
    domanda_cliente = rand() % (slot-domanda_min+1)+(domanda_min);
    se slot - domanda_min=0 
    sto facendo una divisione per 0??
    quel valore lo usa solamente per il calcolo della random.
    A questo punto la domanda sorge spontanea: sai come funziona la rand? Dalla documentazione:
    Returns a pseudo-random integral number in the range between 0 and RAND_MAX.
    Quindi ti restituisce un numero anche molto grande. Come fai per imporre che invece stia all'interno di un certo range? Metti il % e poi il limite che vuoi, giusto? Ma che cos'è quel %? Queste sono tutte domande da farsi... Il % è l'operatore "resto della divisione", quindi se io faccio
    a%b
    significa che calcolo il resto della divisione tra (a) e (b). Ma questo significa che, per prima cosa, devo fare la divisione tra (a) e (b)! A questo punto se (b) è 0... crash!
Devi accedere o registrarti per scrivere nel forum
88 risposte