Ordinare in ordine decrescente output codice?

di il
88 risposte

88 Risposte - Pagina 2

  • Re: Ordinare in ordine decrescente output codice?

    Ho visto l'altro thread, comunque se per te va bene direi di continuare qui, come suggeriva anche oregon.

    Ti ripeto quello che ti dicevo: secondo me c'è qualche problema con i limiti che imposti per la funzione rand(). In parole povere, con le formule che metti dopo il %. Può anche darsi che io mi sbagli, ma non vedo altri problemi.
    Ad esempio, il numero di clienti
    		clienti = rand() % ((2 * (domanda_tot_sistema / slot) - (domanda_tot_sistema / slot)) + 1)
    				+ (domanda_tot_sistema / slot);
    mi sembra un parametro critico perché poi influenza il ciclo for successivo. Sei sicuro che sia corretto? Stessa cosa per
    
    domanda_cliente = rand() % (slot - (slot / 2) + 1) + (slot / 2);
    Altrimenti forse vale la pena che tu provi a spiegarci (preferibilmente in maniera semplice) qual è il problema sul quale stai lavorando...
  • Re: Ordinare in ordine decrescente output codice?

    E dovresti evitare quel goto ...
  • Re: Ordinare in ordine decrescente output codice?

    Non saprei come evitarlo.
    Ora vi sto spiegando il problema in sintesi.
  • Re: Ordinare in ordine decrescente output codice?

    Le formule sono scritte bene .
    Allora vi spiego il problema.
    Il problema consiste nell'allocare la domanda in spazi(slot) all interno dei un rack(immaginatelo come un mobile con un tot di cassetti chiamati slot) dove al loro interno deve essere allocata la domanda dei clienti in ogni istante di tempo.

    Questo programma mi serve soltanto per generare le domande per un certo numero di istanti di tempo e per un certo numero di prove che vengono inseriti manualmente all inizio del programma.

    Una volta che ho il numero di slot e il numero di mobili ho la domanda totale che può essere allocata e cioè il prodotto slot e mobili(rack).

    NB: un cliente può stare solo su un mobile.

    siccome voglio avere domande grandi e pochi clienti, ho deciso che la domanda dei clienti varia dalla metà degli slot +1 a tutti gli slot su un mobile. Il codice è il seguente mi da la domanda
    domanda_cliente=rand()%(slot-(slot/2)+1)+(slot/2);
    mentre questo mi da il numero di clienti ottenuti dividendo la domanda totale diviso la domanda massima e minima
    clienti= rand()%((2*(domanda_tot_sistema/slot)-(domanda_tot_sistema/slot))+1)+(domanda_tot_sistema/slot
    successivamente ho messo questo if
    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;
    dove prima sommo tutte le domande generate e se questa è superiore alla capacità che il sistema può sopportare torna a etichetta e calcola nuovamente la domanda fino a che la domanda sia inferiore alla capacità sopportata dal sistema.
    una volta trovata la domanda la stampa a schermo.

    Spero di essere stato chiario
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    siccome voglio avere domande grandi e pochi clienti, ho deciso che la domanda dei clienti varia dalla metà degli slot +1 a tutti gli slot su un mobile.
    Ma allora non dovrebbe essere
    domanda_cliente = rand() % (slot) + (slot / 2) + 1;
    ?
  • Re: Ordinare in ordine decrescente output codice?

    Aggiungo un'altra osservazione. In questa formula
    clienti = rand() % ((2 * (domanda_tot_sistema / slot) - (domanda_tot_sistema / slot)) + 1)
                + (domanda_tot_sistema / slot);
    c'è come minimo qualcosa di strano. Infatti

    2 * (domanda_tot_sistema / slot) - (domanda_tot_sistema / slot) = (domanda_tot_sistema / slot)

    quindi perché scriverlo in quel modo? Secondo me c'è qualcosa che non va...
  • Re: Ordinare in ordine decrescente output codice?

    minomic ha scritto:


    Daniloo ha scritto:


    siccome voglio avere domande grandi e pochi clienti, ho deciso che la domanda dei clienti varia dalla metà degli slot +1 a tutti gli slot su un mobile.
    Ma allora non dovrebbe essere
    domanda_cliente = rand() % (slot) + (slot / 2) + 1;
    ?
    scusami un attimo scrivendola in questo modo il numero casuale parte da
    (slot / 2) + 1
    ma al massimo arriva a

    slot + slot/2

    invece deve arrivare a slot.

    oppure quello (slot/2)+1 è un offset che influisce solo sul numero iniziale??
  • Re: Ordinare in ordine decrescente output codice?

    Risoltooooooo grazie ragazzi.
    Ho levato quel maledetto goto
    sostituito con un do while
     for (i=1;i<=clienti;i++)
                                   {
                                        do 
                                        {
                                        domanda_cliente=rand()%(slot-((slot/2)+1)+1)+((slot/2)+1);
                                        totale+=domanda_cliente;
                                        }while(totale>=domanda_tot_sistema);
                                        cout<<"Domanda cliente "<<i<<" = "<<domanda_cliente<<endl;
                                    }
  • Re: Ordinare in ordine decrescente output codice?

    Era troppo bello...ora mi da valori sballati ma almeno non ci sta un ciclo for che va all infinito.
    Cerco di risolvere, se nel frattempo avete qualche suggerimento ve ne sono molto grato
    Il problema se lo fate girare e mettete valori non troppo alti anche 3 e 3 va bene...

    in alcune prove

    alla capacità richiesta dal sistema da un valore enorme...cioè sbaglia a sommare tutte le domande e a maggior ragione una volta sommate danno un valore maggiore della capacità che non dovrebbe accadere dato che ci sta il while.
    aiutoooo
  • Re: Ordinare in ordine decrescente output codice?

    Daniloo ha scritto:


    scrivendola in questo modo il numero casuale parte da
    (slot / 2) + 1
    ma al massimo arriva a

    slot + slot/2
    Sì hai ragione!
  • Re: Ordinare in ordine decrescente output codice?

    Il mio problema è rimasto mettere qualche altra cosa al posto di quel goto.
    Cioè se ho che il totale è maggiore della domanda sopportata devi ripetere nuovamente lo stesso passaggio finchè non è <=.
    come faccio???aiutami per favore non ci riesco
  • Re: Ordinare in ordine decrescente output codice?

    Un'idea può essere questa
    
    		for (t = 1; t <= istanti_di_tempo; t++) {
    			cout << "Istante di tempo " << t << endl;
    			cout << endl;
    			cout << endl;
    			cout << endl;
    			bool rifare = true;
    			do {
    				rifare = false;
    				totale = 0;
    				for (i = 1; i <= clienti; i++) {
    
    					domanda_cliente = rand() % (slot / 2) + (slot / 2) + 1;
    					totale += domanda_cliente;
    					if (totale >= domanda_tot_sistema) {
    						rifare = true;
    						break;
    					}
    					cout << "Domanda cliente " << i << " = " << domanda_cliente << endl;
    				}
    			} while (rifare);
    
    			cout << endl;
    
    			cout << "La capacita' richiesta dal sistema e' = " << totale << endl;
    			cout << endl;
    			cout << endl;
    			cout << endl;
    			cout << endl;
    			cout << endl;
    			cout << endl;
    		}
    ma secondo me ci sono ancora cicli infiniti, che infatti non erano causati dal goto...
  • Re: Ordinare in ordine decrescente output codice?

    Infatti continua con i cicli infiniti.
    Non ci sono speranze.
    Nel mentre cerco di risolvere mi è sorto una domanda.
    se dichiaro una variabile int ed è il rapporto tra due valori, nel caso questo fosse decimale ho sempre l approssimazione all intero inferiore esatto??
    ho fatto le prove e mi è sembrato sia così.
    Correggimi se sbaglio
  • Re: Ordinare in ordine decrescente output codice?

    Sì esatto: il valore viene troncato e quello che c'è dopo la virgola viene scartato.
  • Re: Ordinare in ordine decrescente output codice?

    Perfetto.
    Ho ricontrollato le formule.
    Tutto ok.
    Il problema è quel ciclo
Devi accedere o registrarti per scrivere nel forum
88 risposte