Ciclo for in due variabli

di il
34 risposte

34 Risposte - Pagina 2

  • Re: Ciclo for in due variabli

    for( a=0;a<=somma;a++)
    {
       for( b=0;b<=(somma-a); b++)
       {
           // qui ho tutte le possibili coppie (a,b) con (a+b)<=somma
       }
    }
  • Re: Ciclo for in due variabli

    Se ab allora è definito dall'utente e quindi la somma deve essere obbligatoriamente quella ma non inferiore basterà un semplice ciclo:
    
        int A = 10;
        int B = 32;
        int ab = 100;
        
        int a,b;
    
        for ( a = 0; a < ab; a++ )
        {
            b = ab - a;
            if ( (a * A - a - b > ab) && (b * B - b - a > ab) )
                break;
        }
    
  • Re: Ciclo for in due variabli

    vbextreme ha scritto:


    Se ab allora è definito dall'utente e quindi la somma deve essere obbligatoriamente quella ma non inferiore basterà un semplice ciclo:
    
        int A = 10;
        int B = 32;
        int ab = 100;
        
        int a,b;
    
        for ( a = 0; a < ab; a++ )
        {
            b = ab - a;
            if ( (a * A - a - b > ab) && (b * B - b - a > ab) )
                break;
        }
    

    Era un esempio...io non so quanto è la somma! Nell'esempio io so solo che la somma è al massimo 100, ma può essere anche 50 o 10 o 38,27. L'importante è che non superi 100.
    Ma io non so quanto il cristiano decide di investire al massimo.
    IL cristiano dice alla macchina che vuole investire per esempio massimo 100.
    La macchina gli deve dire: guarda, per rispettare quelle condizioni tu devi investire 25 su a e 12 su b (per esempio). Ovvero: la somma è 25+12=37 ed è minore di 100 e contemporaneamente 25 e 12 sono quei numeri (una coppia sulla infinite) che rispettano quelle condizioni.
  • Re: Ciclo for in due variabli

    candaluar ha scritto:


    
    
    for( a=0;a<=somma;a++)
    {
       for( b=0;b<=(somma-a); b++)
       {
           // qui ho tutte le possibili coppie (a,b) con (a+b)<=somma
       }
    }
    Sinceramente non ho capito!! gli devo dire che somma è uguale ad a+b? o no?
    Se glielo dico...fissiamo per esempio somma = 100...
    a parte da 0 fino ad "a" minore di 100, okay.
    b parte da 0 fino a "b" minore di (100-a)....perchè?
  • Re: Ciclo for in due variabli

    Supponendo che somma sia 100 questo ciclo fa questo
    con a=0 -> b=0, b=1, b=2 ... b=100
    con a=1 -> b=0, b=1, b=2 ... b=99
    ...
    con a=98 -> b=0, b=1, b=2
    cona a=99 -> b=0, b=1
    con a=100 -> b=0
    in pratica ti trova tutte le combinazioni di (a,b) per cui a+b <= somma.
  • Re: Ciclo for in due variabli

    Uhm.... Geniale!! Giustamente...non ci avevo pensato... quindi dovrei scrivere una cosa del genere?
    
    for (a=0; a<=somma; a++){
                                 
                                 for (b=0; b<=(somma-a); b++){
                                     
                                                          c=(a*A)-(a+b);
                                                          d=(b*B)-(a+b);
                                                          if ((c>somma)&&(d>somma)){
                                                                                   
                                                               cout<<"a= "<<a;
                                                               cout<<"b= "<<b; 
                                                                                   
                                                                                   }
                                                                                    
                                                          
                                                              }
                                           
                                 }
    
  • Re: Ciclo for in due variabli

    Questo dipende dal calcolo che devi fare (e che sinceramente non ho capito ); all'interno dei due for ti troverai, una per una, tutte le coppie (a,b) che soddisfano a+b<=somma.
    Infine ti consiglio, per una maggiore leggibilità del tuo codice, di non dare alle variabili nomi che differiscono solo per il "case" (es. a e A, b e B,...).
  • Re: Ciclo for in due variabli

    candaluar ha scritto:


    Infine ti consiglio, per una maggiore leggibilità del tuo codice, di non dare alle variabili nomi che differiscono solo per il "case" (es. a e A, b e B,...).
    Ho impostato così apposta per renderlo più facile non potevo mette i nomi loro...si tratta di un problema di massimazione economica dei profitti...

    In poche parole... l'utente deve fare due investimenti. Deve quindi sborsare a€ e b€ per gli investimenti. Però sa solo che non vuole cacciare più di 1000€ (per esempio). Inoltre gli investimenti sono legati ad alcuni parametri: il parametro A per il primo investimento e il parametro B per il secondo. Ovvero, investendo a€ sulla prima azienda lui incassa a*A. Investendo b€ sulla seconda azienda incassa b*B. INCASSA!! Perchè il guadagno, dalla prima azienda, è a*A-a, e dalla seconda azienda è b*B-b. Quindi lui...solo mettendo nel programma la somma che vuole spendere e i parametri da cui dipendono i suoi investimenti vuole sapere dal programma quanto devono essere a e b, ovvero quanto deve cacciare per l'investimento sulla prima azienda (a) e quanto deve cacciare per investire nella seconda azienda (b).
    Gli piace vincere facile. Ovviamente a e b devono essere tali che il suo guadagno sia sempre positivo!! Sia se perde tutto con il primo investimento e guadagna col secondo, sia viceversa, se guadagna con il primo e perde con il secondo!!
    Quindi... dentro il for... deve verificare le condizioni stabilite e se sono verificate deve stamparle a video. "Tutto qui". Una volta trovati a e b come li deve stampare? così non lo fa:
    
    for (a=0; a<=somma; a++){
                                 
                                 for (b=0; b<=(somma-a); b++){
                                     
                                                          c=(a*parametro1)-(a+b);
                                                          d=(b*parametro2)-(a+b);
                                                          if ((c>somma)&&(d>somma)){
                                                                                   
                                                               cout<<"a= "<<a;
                                                               cout<<"b= "<<b; 
                                                                                   
                                                                                   }
                                                                                    
                                                          
                                                              }
                                           
                                 }
    
  • Re: Ciclo for in due variabli

    Non c'è bisogno di fare cicli, se sai già (con parametro1 e parametro2) qual è la resa dell'investimento allora punta tutto quello che hai sul maggiore dei due
  • Re: Ciclo for in due variabli

    No, non conosci la resa dell'investimento...conosci la potenziale resa dell'investimento!! data da a per il parametro. Se l'investimento fallisce...lui ha perso quello che ha investito!! cioè perde a!!
    Si tratta di una valutazione di rischi, se non ci sono rischi...allora massimizzare i guadagni (ovvero prendere fra tutte le coppie che rispettano le condizioni, quella che ti da guadagno più grande fra tutti)
  • Re: Ciclo for in due variabli

    E quindi si suppone che uno dei due investimenti potrebbe fallire; con l'altro investimento, che non fallisce, si deve ottenere un valore maggiore della somma investita.
    Pertanto invece di
    
    c=(a*parametro1)-(a+b);
    d=(b*parametro2)-(a+b);
    if ((c>somma)&&(d>somma)){
       cout<<"a= "<<a;
       cout<<"b= "<<b;
    }
    io scriverei
    
    c=(a*parametro1)-(a+b);
    d=(b*parametro2)-(a+b);
    if ((c>0)&&(d>0)){  // <--- modifica
       cout<<"a= "<<a;
       cout<<"b= "<<b;
    }
    perchè in c e d hai già il guadagno ((a+b) è l'investimento che fai)
  • Re: Ciclo for in due variabli

    Hai ragione... avevo scritto un tema per risponderti...ma poi mi sono reso conto che effettivamente hai ragione, ho già tolto l'investimento!! Non so perchè ma avevo già fatto questo ragionamento ed ero arrivato alla conclusione che dovesse essere > a+b...
  • Re: Ciclo for in due variabli

    Bene, ricordati di me quando inizierai a guadagnare
  • Re: Ciclo for in due variabli

    Ehh magari fosse così semplice... bisogna migliorare il programma: massimizzare i profitti, quantificarli, ed estenderlo a più variabili e casi e magari ne facessi uso io!!
  • Re: Ciclo for in due variabli

    Se invece facessi lo stesso ragionamento per tipo, 3 investimenti?
    
    for (a=0; a<=somma; a++){
                                 
          for (b=0; b<=(somma-a); b++){
    
     //-----> //  for (c=0; c<=(somma-???); c++){
                                                                     
                                                                     d=(a*parametro1)-(a+b+c);
                                                                     e=(b*parametro2)-(a+b+c);
                                                                     f=(c*parametro3)-(a+b+c);
                                                                     if ((d>somma)&&(e>somma)&&(f>somma)){
                                                                                   
                                                                                                                 cout<<"a= "<<a;
                                                                                                                 cout<<"b= "<<b;  
                                                                                                                 cout<<"b= "<<c;          
    
                                                                                                                  }
                                                   
                                                                                   }
                                                                                    
                                                          
                                                              }
                                           
                                 }
    
Devi accedere o registrarti per scrivere nel forum
34 risposte