Pagina 3 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 33
  1. #21
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Sì, direi che va bene. Attenzione che dentro all'if il confronto si fa con il doppio uguale.

    Ti posto il codice che avevo scritto io, che stampa tutte le portate possibili e un asterisco di fianco a quelle da mangiare:

    codice:
        std::cout << "Portate da mangiare: " << std::endl;
        for(int i=0; i<size; ++i) {
            std::cout << portate[i];
            if(binario_migliore[i] == 1) {
                std::cout << "   *";
            }
            std::cout << std::endl;
        }

    Vedi tu cosa preferisci...

  2. #22
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    21
    si grazie infinitamente mi hai aiutato molto.. ora in questi giorni mi metto a scrivere anche la codifica intera.. se è necessario ti posso contattare tramite messaggio privato?

  3. #23
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Sì come vuoi. Forse è meglio sul forum, in modo che anche altri possano leggere e/o dare il loro contributo. Magari (molto probabilmente) ci sono modi migliori per fare le cose rispetto a quelli che propongo io...

  4. #24
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    21
    ho fatto l'intera codifica ma ho alcuni problemi :

    1) non so in quale parte devo ricopiare gli elementi del vettore binario associato alla migliore combinazione delle portate in un altro vettore(binario_migliore)
    2) la parte iniziale della procedura prossimacombinazione serve per partire da destra e vedere gli elementi a 0 e portarli a 1 giusto?
    3) puoi verificare se tutte le procedure sono scritte bene (per le operazioni parlo) per favore?


    codice:
    #include<iostream>
    # include<cmath>
    using namespace std;
    int n,k,i;
    int portate[5];
    int binario[5]= {0, 0, 0, 0, 0};   
         void carica ()
        {
            for (i=0;i<n;i++)
            {
            
            cout<<"Inserire elemento vettore reale "<<i+1<<endl;
            cin>>portate[i];
        }
        }
        void prossima_combinazione ()
        {
            int pos=0;
        for(pos=0;pos<n;pos--) 
            portate[pos] = 0;
            
        if(pos >= 0) {
            portate[pos] = 1;
        }
    }
    
    
         void somma() {
        int somma = 0;
        int min;
        for(int i=0; i<n; ++i) {
            if(binario[i] == 1){
            
                somma += portate[i];
                if (somma>=k)
                {
                    min=somma;
                    if(somma<min)
                    somma=min;
                }
                     
        }
       
        
        }
    }
    
    
     
    
    
      stampa_finale()
      {
          int binario_migliore[5];
      
    std::cout << "Portate da mangiare: " << std::endl;
        for(int i=0; i<n; ++i) {
            std::cout << portate[i];
            if(binario_migliore[i] == 1) {
                std::cout << "   *";
            }
            std::cout << std::endl;
        }
    }
    
    
    
    
    
    
    
    
    
    
    
    
        int main()
    {
    
    
        cout<<"Inserire numero di portate P"<<endl; cin>>n;
        cout<<"Inserire K minimo"<<endl; cin>>k;
        carica();
    prossima_combinazione();
    somma();
    stampa_finale();
        system("pause");
    return (0);
    }

  5. #25
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    In questo periodo sono pieno di lavoro, quindi non ho molto tempo da dedicare al forum. Quello che posso dirti è che la funzione prossima_combinazione è sicuramente sbagliata: devi partire da destra (quindi dalla posizione "size-1") e tornare indietro finché non trovi un elemento pari a 0. Quando lo trovi, lo poni a 1 e hai finito. Tutti gli elementi pari a 1 che incontri nel tornare indietro, li setti a 0. Pensa a come faresti per contare in binario:
    00000
    00001
    00010
    00011
    00100
    00101
    00110
    ...
    Vedi che è esattamente la stessa cosa?

    P.S. Se proprio non ci riesci, posso anche postarti una possibile soluzione, ma mi dispiacerebbe perché non impareresti molto. Invece penso che tu ci possa arrivare da solo... Forza!

  6. #26
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    21
    In realtà il codice della prossima combinazione me lo avevi già scritto.. io l'ho riscritto alla mia maniera con un ciclo for vedi se va bene:

    codice:
    la tua codifica
         int pos = size - 1;
        while(pos >= 0 && vettore[pos] == 1) {
            vettore[pos] = 0;
            pos--;
        }
        if(pos >= 0) {
            vettore[pos] = 1;
        }
    }
    codice:
    la mia :       void prossima_combinazione ()
        {
            int pos;
            for (pos=-1;pos>=0;pos--)
            portate[pos] = 0;
            
        if(pos >= 0) {
            portate[pos] = 1;
        }
    }
    Non vorrei creare troppo disturbo, scusami solo un'altra cosa: dove la potrei mettere la parte di codifica riguardante il vettore binario_migliore?

  7. #27
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Il for non va bene: è necessario un while perché a priori non sai quanti elementi sono pari a 1 partendo da destra. Potrebbero essere da 0 a size, quindi ti serve per forza un while.
    Per quanto riguarda il binario_migliore, ogni volta che provi una combinazione devi guardare se è la migliore: se lo è allora la salvi copiando i valori di 'binario' in 'binario_migliore'.

  8. #28
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    21
    mi stampa tutti gli elementi caricati senza * . Ho forse sbagliato qualche operazione?
    codice:
    #include<iostream>
    # include<cmath>
    using namespace std;
    int n,k,i,i2;
    int portate[5];
    int binario[5]= {0, 0, 0, 0, 0}; 
    int binario_migliore[5];  
         void carica ()
        {
            for (i=0;i<n;i++)
            {
            
            cout<<"Inserire elemento vettore reale "<<i+1<<endl;
            cin>>portate[i];
        }
        }
        void prossima_combinazione ()
        {
        int pos = - 1;
        while(pos >= 0 && portate[pos] == 1) {
            portate[pos] = 0;
            pos--;
        }
        if(pos >= 0) 
            portate[pos] = 1;
        
    }
    
    
         void somma() {
        int somma = 0;
        int min;
        for(int i=0; i<n; ++i) {
            if(binario[i] == 1){
            
                somma += portate[i];
                if (somma>=k)
                {
                    min=somma;
                    if(somma<min)
                    somma=min;
                    binario[i]=binario_migliore[i2];
                }
                     
        }
       
        
        }
    }
    
    
    
    
      stampa_finale()
      {
      
    std::cout << "Portate da mangiare: " << std::endl;
        for(int i=0; i<n; ++i) {
            std::cout << portate[i];
            if(binario_migliore[i2] == 1) {
                std::cout << "   *";
            }
            std::cout << std::endl;
        }
    }
        int main()
    {
    
    
        cout<<"Inserire numero di portate P"<<endl; cin>>n;
        cout<<"Inserire K minimo"<<endl; cin>>k;
        carica();
    prossima_combinazione();
    somma();
    stampa_finale();
        system("pause");
    return (0);
    }
    Ultima modifica di Aleb65; 24-11-2015 a 20:04

  9. #29
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    E chi sarebbe 'i2'? Dove lo hai inizializzato? Lo dichiari in alto come variabile globale, ma poi quand'è che lo usi?

  10. #30
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    21
    no vabbè pensavo che per il binario migliore dovevi mettere un nuovo indice. Ma ho sbagliato.. ho aggiustato proprio ora ma non penso che sia quello l'errore perchè fa la stessa cosa di prima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.