PDA

Visualizza la versione completa : aiuto per programma in c++


ciro_90
25-01-2010, 16:40
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



const int max_dim=50;
typedef int vettore[max_dim];

void leggi_vett(const vettore, int &);
bool ricerca_pari(const vettore, int);




#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;
}




#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;
}

c_junior
25-01-2010, 17:06
vettore v;
int riemp;

leggi_vett(v, riemp);


non hai inizializzato riemp forse per questo!

ciro_90
25-01-2010, 17:10
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...

c_junior
25-01-2010, 17:12
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
------

ciro_90
25-01-2010, 17:13
esatto questo mi combina

c_junior
25-01-2010, 17:16
:bhò: :bhò: :bhò: :bhò:

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

mi sembra impossibile visto che quella frase si trova in un if!

ciro_90
25-01-2010, 17:20
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

antotan
25-01-2010, 17:42
In ricerca_pari, questa condizione è sbagliata



while (trovato==false || i<riemp)


deve essere



while (trovato==false && i<riemp)


:ciauz:

ciro_90
25-01-2010, 17:47
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

antotan
25-01-2010, 18:27
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.

Loading