Ordinare in ordine decrescente output codice?

di il
88 risposte

88 Risposte - Pagina 3

  • Re: Ordinare in ordine decrescente output codice?

    Aspetta... riguardiamo un attimo la variabile clienti. Da quale valore a quale valore deve andare?
  • Re: Ordinare in ordine decrescente output codice?

    Clienti va da un minimo di

    domanda_tot_sistema/slot cioè uno per ogni mobile nel caso in cui ho la domanda maggiore;

    fino ad un massimo nel caso di domanda minima di (slot/2)+1 quindi il numero di clienti massimo è

    domanda_tot_sistema/((slot/2)+1)

    Ho ricontrollato ma non penso ci siano errori qui.
  • Re: Ordinare in ordine decrescente output codice?

    No invece secondo me qui c'è un errore: tu avevi scritto
    clienti = rand() % ((domanda_tot_sistema / slot) + 1) + (domanda_tot_sistema / slot);
    ma questa va da (domanda_tot_sistema / slot) fino a 2*(domanda_tot_sistema / slot).

    Se invece deve andare fino a domanda_tot_sistema/((slot/2)+1) allora secondo me deve essere
    clienti = rand() % ((domanda_tot_sistema * slot - 2 * domanda_tot_sistema) / (slot * (slot + 2)) + 1) + (domanda_tot_sistema / slot);
    e ti dico anche il perché, così vedi se ho sbagliato qualche calcolo...

    L'istruzione
    rand() % (a+1) + b;
    restituisce valori da (b) fino ad (a+b). Quindi nel nostro caso sarà
    b = (domanda_tot_sistema / slot)
    a+b = domanda_tot_sistema/((slot/2)+1)
    Facendo la differenza trovi (a), alla quale poi sommi 1. Prova a vedere se ho sbagliato qualcosa.

    Comunque ho provato anche così e credo che resti un ciclo infinito.
  • Re: Ordinare in ordine decrescente output codice?

          int a=slot/2;
                    int b=(domanda_tot_sistema/(a+1));
                    int c=domanda_tot_sistema/slot;
                    clienti= rand()%(b-c+1)+c;
    

    comunque forse volevi dire
    rand() % (a-b+1) + b;
    restituisce valori da (b) fino ad (a+b). Quindi nel nostro caso sarà
    b = (domanda_tot_sistema / slot)
    a= domanda_tot_sistema/((slot/2)+1)
  • Re: Ordinare in ordine decrescente output codice?

    Eh no... ecco il tuo errore!

    rand() % (a+1) restituisce valori da 0 ad (a). Se tu sommi (b) ottieni valori che vanno da (b) ad (a+b).
  • Re: Ordinare in ordine decrescente output codice?

    rand() % (a-b+1) + b;
    questo mi restituisce valori da b ad a dove


    b = (domanda_tot_sistema / slot)
    a= domanda_tot_sistema/((slot/2)+1)

    ed è quello che voglio.
    O non ho capito nulla di questo comandO?
  • Re: Ordinare in ordine decrescente output codice?

    Prova a eseguire questo
    
    	srand(time(NULL));
    
    	for(int i=0; i<100; i++) {
    		cout << rand()%11+5 << endl;
    	}
    
    e vedrai che i numeri vanno da 5 a 15, esattamente come dicevo prima.
    Infatti avremmo
    b = 5
    a+1 = 11 --> a = 10
    E il massimo valore è proprio a+b = 15.
  • Re: Ordinare in ordine decrescente output codice?

    minomic ha scritto:


    Prova a eseguire questo
    
    	srand(time(NULL));
    
    	for(int i=0; i<100; i++) {
    		cout << rand()%11+5 << endl;
    	}
    
    e vedrai che i numeri vanno da 5 a 15, esattamente come dicevo prima.
    Infatti avremmo
    b = 5
    a+1 = 11 --> a = 10
    E il massimo valore è proprio a+b = 15.
    ma non è la stessa cosa se dico questo??

    a=5
    b=15
    
    rand()%(b-a+1)+a
    
    in numeri è

    rand()%(11)+5

    stessa identica cosa che ho scritto nel programma e che hai scritto te o mi sbaglio?
  • Re: Ordinare in ordine decrescente output codice?

    Ah sì... mi stavo un po' perdendo! Comunque purtroppo non è questo che causa i cicli infiniti, quindi siamo ancora senza una soluzione.
  • Re: Ordinare in ordine decrescente output codice?

    Quindi non era il goto il problema
    ne troveremo un altro
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    quindi non era il goto il problema
    No ma quello te lo avevo detto... Il goto è un modo brutto per far "tornare indietro" l'esecuzione. Ora abbiamo un modo più bello, ma le operazioni eseguite sono esattamente le stesse di prima.
  • Re: Ordinare in ordine decrescente output codice?

    In c++ esiste un comando che se una condizione è falsa cancella quello fatto e lo ricalcola di nuovo??

    Per esempio:

    stampa a schermo 10 numeri
    se la somma è minore di 100 stampane altri 10 altrimenti calcola nuovamente i 10 numeri iniziali senza pero che poi li stampi a schermo poichè sono sbagliati.

    Cioè vorrei fare un ciclo senza che ogni volta mi stampa a schermo anche i valori errati ma soltanto la combinazione esatta.

    Grazie
  • Re: Ordinare in ordine decrescente output codice?

    Puoi fare i tuoi calcoli e memorizzare i risultati da qualche parte (ad esempio un vector). Quando sei sicuro che vanno bene, cioè sei arrivato in fondo ai calcoli senza trovare errori, allora li stampi. Penso che intendessi questo.
  • Re: Ordinare in ordine decrescente output codice?

    Come lo scrivo in codice? Scusami
  • Re: Ordinare in ordine decrescente output codice?

    Diciamo che i risultati che vuoi stampare siano interi. Ti dichiari un
    vector<int> mio_vettore;
    (ricordando di includere vector), poi anziché fare il cout << dei risultati fai un
    mio_vettore.push_back(risultato);
    cioè memorizzi il risultato nel vettore. Se trovi un errore allora fai
    mio_vettore.clear();
    per vuotare il vettore, torni indietro e ricominci. Se invece arrivi in fondo senza errori, allora puoi stampare i risultati che hai memorizzato. Ad esempio
    
    for(unsigned int i=0; i<mio_vettore.size(); i++) {
        cout << mio_vettore[i] << endl;
    }
    
    Oppure, se attivi la compilazione secondo lo standard C++11 puoi semplicemente scrivere
    
    for(auto val : mio_vettore) {
    cout << val << endl;
    }
    
Devi accedere o registrarti per scrivere nel forum
88 risposte