Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    32

    aiuto per programma in c++

    Ragazzi mi sapreste dire dove ho sbagliato eseguendo questo semplice programma che dato un vettore di interi visualizzare un opportuno messaggio di conferma se esista un numero pari nel vettore; è compilato ma all'atto dell'esecuzione non mi fa visualizzare nessun messaggio se esiste o meno un numero pari nel vettore

    codice:
    const int max_dim=50;
    typedef int vettore[max_dim];
    
    void leggi_vett(const vettore, int &);
    bool ricerca_pari(const vettore, int);
    codice:
    #include <iostream>
    #include "lib.h"
    
    using namespace std;
    
    int main()
    {
        vettore v;
        int riemp;
        
        leggi_vett(v, riemp);
        
        if (ricerca_pari(v, riemp)== true)
           cout<<"esiste almeno un numero pari"<<endl;
           
        else
            cout<<"non esiste alcun elemento pari"<<endl;
            
    system("PAUSE");
    return 0;
    }
    codice:
    #include <iostream>
    #include "lib.h"
    
    using namespace std;
    
    void leggi_vett(const vettore v, int &riemp)
    {
         int i;
         
         cout<<"inserire riempimento del vettore"<<endl;
         cin>>riemp;
         
         cout<<"inserire valori nel vettore"<<endl;
         for(i=0;i<riemp;i++)
                            scanf("%d", &v[i]);
          
         
         cout<<"gli elementi del vettore sono"<<endl;                    
         for(i=0;i<riemp;i++)
                             cout<<v[i]<<"\n";
    }
                             
    
    bool ricerca_pari(const vettore v, int riemp)
    {
         int i;
         int resto;
         bool trovato=false;
         
         i=0;
         while (trovato==false || i<riemp)
                    {
                               resto=v[i]%2;
                               if(resto==0)
                                           trovato=true;
                               else
                               i++;            
                               
                    }
                    
                    
    return trovato;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    codice:
        vettore v;
        int riemp;
        
        leggi_vett(v, riemp);
    non hai inizializzato riemp forse per questo!
    cogli l'attimo

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    32
    l'ho inizializzato come dicevi tu ma se nel vettore non ci sono elementi pari va tutto bene, se ce ne sono va in loop ripetendo all'infinito che esiste un elemento pari...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    ti scrive all'infinito:

    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    esiste almeno un numero pari
    ------
    cogli l'attimo

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    32
    esatto questo mi combina

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153


    ma vettore cos'è? dove l'hai definito?

    mi sembra impossibile visto che quella frase si trova in un if!
    cogli l'attimo

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    32
    se intendi la const vettore l'ho definita in un file header è il primo pezzo di codice che ho inserito è un alias nuovo di tipo che spesso mi creo quando ho a che fare con i vettori

  8. #8
    In ricerca_pari, questa condizione è sbagliata

    Codice PHP:
    while (trovato==false || i<riemp
    deve essere

    Codice PHP:
    while (trovato==false && i<riemp

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    32
    Capito però con la and si devono verificare tutte e 2 le condizioni io volevo fare con la or che appena si verificasse una sola delle 2 condizioni si uscisse dal ciclo

  10. #10
    Non hai ben capito come funziona il while:

    supponiamo che hai due predicati p e q (nel tuo caso trovato==false e i < riemp):

    while(p or q)
    do()

    la tabella di verità dell'or è questa

    p=0, q=0 -> p or q = 0
    p=1, q=0 -> p or q = 1
    p=0, q=1 -> p or q = 1
    p=1, q=1 -> p or q = 1

    Vuol dire che do() verrà eseguito quando almeno uno tra p e q è vero.
    Nel tuo caso, supponiamo che trovi un numero pari all'indice i, i non viene più incrementato e trovato diventa true.
    Al successivo test del while, trovato sarà true ma i sarà ancora minore di riemp, cioè
    p=0, q=1, dunque si continua ancora.
    i non cambia, quindi ritesti la parità sullo stesso elemento di prima, trovato riceve di nuovo il valore true e così via all'infinito.

    In pratica il comportamento è l'esatto opposto di quello che hai scritto:

    Capito però con la and si devono verificare tutte e 2 le condizioni io volevo fare con la or che appena si verificasse una sola delle 2 condizioni si uscisse dal ciclo
    cioè con l'or, si rimane nel ciclo (e non si esce) se almeno una condizione si verifica.

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 © 2019 vBulletin Solutions, Inc. All rights reserved.