Ordinare in ordine decrescente output codice?

di il
88 risposte

88 Risposte - Pagina 5

  • Re: Ordinare in ordine decrescente output codice?

    Perfetto...e come potrei ovviare a questo problema??
  • Re: Ordinare in ordine decrescente output codice?

    Eh non devi permettere che quella quantità vada a 0. Ad esempio perché modifichi la variabile slot? E' giusto che cambi oppure dovrebbe essere un parametro fisso dall'inizio alla fine del problema?
  • Re: Ordinare in ordine decrescente output codice?

    Deve variare sempre perché la capacità residua diminuisce.
    Non saprei proprio come evitare che vada a zero
  • Re: Ordinare in ordine decrescente output codice?

    Allora... se è corretto quello che fai alle variabili (e io non lo discuto perché qui l'esperto del problema sei tu) allora non puoi impedire che quella quantità vada a zero. Quello che invece puoi fare è mettere un if prima della rand:
    
    if(slot-domanda_min+1 > 0)
        ...
    else
        // non si puo' fare altro, quindi... qui vedi tu cosa fare
    
    Così almeno eviti il crash ma non risolvi del tutto il problema...
  • Re: Ordinare in ordine decrescente output codice?

    Salve ragazzi purtroppo ancora ad oggi non riesco a correggere l'errore che come mi diceva minomin è dovuto alla funzione rand che se

    slot-domanda_min+1=0

    da errore nella divisione per zero.
    #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;
                               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;
        
    
    }
    
    Aiutatemi a risolverlo per favore
  • Re: Ordinare in ordine decrescente output codice?

    Perché non hai almeno messo l'if come ti avevo detto? Altra cosa che mi sembra sospetta: la variabile "totale" non viene mai azzerata? Secondo me avevamo già discusso anche di questo...
  • Re: Ordinare in ordine decrescente output codice?

    Sisi si azzera la variabile totale.
    ho provato a mettere l'if ma non giunge a termine il codice.
    #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++) 
                                   {
                                    if(slot-domanda_min+1 > 0)
                                    {
                                    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;
                                    }
                                    else
                                    {
                                    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;
        
    
    }
    Questo è l'ultimo codice che ho scritto con l'if ma a quanto pare non gira come dovrebbe.
    Bho non avrei alternativa al goto
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    Bho non avrei alternativa al goto
    Ancora con il goto? Ma ti ho detto che il goto non c'entra nulla con i tuoi problemi! Te lo ripeto nuovamente: il goto è solo un meccanismo brutto per far saltare l'esecuzione ad una certa riga. Se vuoi ripetere una parte di codice puoi utilizzare il goto (che è brutto) oppure un ciclo come un do-while (che è più bello ma fa esattamente la stessa cosa). Quindi è solo una questione di bellezza, non è quello il tuo problema! Puoi anche mettere il goto ma non risolverà nulla: non è la causa dei tuoi problemi e non ne sarà la soluzione.
  • Re: Ordinare in ordine decrescente output codice?

    Ho risolto il problema dell'errore solo che in questo ciclo for avrei un problema
                          for (t=1;t<=istanti_di_tempo;t++)
                            {
                               cout<<"Istante di tempo "<<t<<endl; 
                               cout<<endl;
                               cout<<endl;
                               cout<<endl;
                               slot=slot;
                               domanda_min=domanda_min;
                               etichetta:
                               totale=0;
                               for (i = 1; i<= clienti; i++) 
                                   {    
                                    cout<<"DOMANDA MINIMA = "<<domanda_min<<endl;
                                    cout<<"DOMANDA MASSIMA = "<<slot<<endl;
                                    cout<<"SLOT = "<<slot<<endl;
                                    domanda_cliente = rand() % (slot-domanda_min+1)+(domanda_min);
                                    domanda_tot_sistema=domanda_tot_sistema-domanda_cliente;
                                    totale=totale+domanda_cliente;
                                    slot=domanda_tot_sistema/rack;
                                    domanda_min=slot/3;
                                    if(totale>domanda_tot_sistema)
                                    goto etichetta;
                                    cout << "Domanda cliente " << i << " = " << domanda_cliente << endl;
                                    cout<<endl;
                                    cout<<endl;
                                    }
    
                               cout<<endl;
                               cout<<"La capacita' richiesta dal sistema e' = "<<totale<<endl;
                               cout<<endl;
                               cout<<endl;
                               cout<<endl;
                               cout<<endl;
                               cout<<endl;
                               cout<<endl;
                            }    
                           
    Quando fa il secondo ciclo for per ogni cliente le variabili slot e domanda_min si decrementano fino all ultimo cliente.
    Quando torna al primo ciclo for per eseguire lo stesso procedimento per il secondo istante di tempo vorrei che le variabili tornassero al valore prima del decremento.
    Stessa cosa una volta che faccio il goto vorrei tornassero tutti i valori prima del decremento.
    Io penso si potrebbe fare attraverso una copia della variabile come mi dicevi in un altra risposta.
    Ma come si fa??
    Grazie e buon natale
  • Re: Ordinare in ordine decrescente output codice?

    Ho risolto.
    Ho creato una nuova variabile con il valore che non voglio modificare e poi ho modificato solamente quella nuova

    new_variabile=variabile

    ed ho eseguito tutte le modifiche sulla new.
    #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;
                    int clienti_max;
                    int clienti_min;
                    domanda_min=slot/3;
                    clienti_max=(domanda_tot_sistema/(domanda_min));
                    clienti_min=domanda_tot_sistema/slot;
                    clienti= rand()%(clienti_max-clienti_min+1)+clienti_min;
                    cout<<"Clienti MIN = "<<clienti_min<<endl;
                    cout<<endl;
                    cout<<"Clienti MAX = "<<clienti_max<<endl;
                    cout<<endl;
                    cout<<"Numero di clienti = "<<clienti<<endl;
                    cout<<endl;
                    cout<<"Domanda MIN = "<<domanda_min<<endl;
                    cout<<endl;
                    cout<<"Domanda MAX = "<<slot<<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;
                               int new_slot;
                               int new_domanda_min;
                               int new_domanda_tot_sistema;
                               new_slot=slot;
                               new_domanda_min=domanda_min;
                               new_domanda_tot_sistema=domanda_tot_sistema;
                               for (i = 1; i<= clienti; i++) 
                                   {  
                                      
                                    cout<<"DOMANDA MINIMA = "<<new_domanda_min<<endl;
                                    cout<<"DOMANDA MASSIMA = "<<new_slot<<endl;
                                    cout<<"SLOT = "<<new_slot<<endl;
                                    domanda_cliente = rand() % (new_slot-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;
                                    new_domanda_min=new_slot/3;
                                    cout << "Domanda cliente " << i << " = " << domanda_cliente << endl;
                                    cout<<endl;
                                    cout<<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;
        
    
    }
    
    Ora il programma gira ma ho soltanto un problema.
    Quando va in esecuzione e stampa i risultati, quando sono molte prove non vedo i risultati dall inizio, come se non entrano e me li taglia quelli iniziali.
    Ci sta un modo per esportare i risultati su file??
    Grazie e Ancora AUGURI
  • Re: Ordinare in ordine decrescente output codice?

    Ovviamente sì, il C e il C++ dispongono delle funzionalità di lettura/scrittura dei files (ci mancherebbe).

    Basta aprire un file in scrittura, scriverci dentro il valore delle variabili che ti servono e chiudere il file.

    Tutte le funzioni da utilizzare sono in uno dei primi capitoli di un libro del linguaggio.
  • Re: Ordinare in ordine decrescente output codice?

    Potresti farmi un esempio di codice??
    Ho un manuale ma non ci capisco nulla.
    Grazie
  • Re: Ordinare in ordine decrescente output codice?

    Beh, che non ci capisci nulla non è un buon motivo per non leggere e studiare dai libri.

    In ogni caso trovi mille esempi su internet, basta cercarli e questo lo puoi fare.

    Puoi partire dalla documentazione della fopen (per aprire/creare un file)

    http://www.cplusplus.com/reference/cstdio/fopen
  • Re: Ordinare in ordine decrescente output codice?

    Ho scritto in questo modo
    ofstream f("C:\Domande programma tesi.txt",ios::out);
    if(!f)
    {
    cout<<"Errore nella scrittura del file";
    return 1;//termina il programma in anticipo
    }
    f<<domanda_cliente<<endl;
    f.close();
    cout<<"Scrittura avvenuta con successo!!!";
        cout<<endl;
        system("PAUSE");
        return 0;
    solo che mi stampa l ultimo valore che ha avuto la variabile domanda_cliente
    io invece vorrei che mi stampasse tutta l esecuzione del programma. E' possibile farlo??
  • Re: Ordinare in ordine decrescente output codice?

    Non fare la close ma scrivi su file quello che ti serve.
Devi accedere o registrarti per scrivere nel forum
88 risposte