PDA

Visualizza la versione completa : [C++] Confronto tra elementi di un array e una variabile


revol3600
10-09-2014, 20:44
premesso che non sono molto esperto in c++ mentre programmavo ho avuto la necessita per semplificare il codice di confrontare un array con una variabile, cioè avendo un array indicizzato e una variabile dovrei confrontare il valore della variabile con gli elementi dell'array e se un elemento è uguale mi ritorna 'true' se no 'false' .

per testare la fattibilità ho scritto il codice che segue ma il problema è che mi ritorna sempre 'true'. :confused:
Come posso fare?


#include <iostream>
#include <conio.h>

using namespace std;

main()
{
int i;
int ar [2]= {'1', '2'};

cout << "premi un numero \n";
cin>> i;

if (i == ar[2])
{
cout<< "è presente";
}
else
{
cout<<"non è presente";

}
getch();
return 0;

}

minomic
11-09-2014, 08:15
Ciao,
l'errore è piuttosto evidente:


if(i == ar[2])


non ha senso. Di fatto stai confrontando "i" con il terzo (il conteggio parte da zero) elemento dell'array, che nemmeno esiste!

Per verificare se un valore è presente in un array devi scorrere tutto l'array (ad esempio con un ciclo for) e fare il confronto all'interno del ciclo, cioè elemento per elemento. Esempio:


for(int a=0; a<dimensione_vettore; a++)
{
if(i==ar[a])
/* e' presente */
}


Se invece arrivi alla fine del ciclo senza averlo trovato, allora significa che il valore non è presente all'interno dell'array.

:ciauz:

revol3600
11-09-2014, 23:51
Hai ragione funziona, infatti ho fatto proprio un errore stupido e essendo neofita non avevo pienamente chiaro la sintassi e in parte il funzionamento degli array.
E se invece volessi aggiungere un loop quando è false che mi richiede di nuovo l'inserimento della variabile "i"sarebbe plausibile con do-while? Perché provando non mi è andata un granché.
Non so perché non sono molto in forma questi giorni:confused:

minomic
12-09-2014, 10:59
Potresti fare una cosa del genere


bool trovato = false;
do
{
< chiedi numero >
for(...)
{
if(...)
{
trovato = true;
}
}
} while(trovato == false);



Continua a chiederti un numero e a controllarlo fino a quando non ne inserisci uno che è presente nell'array.

revol3600
12-09-2014, 17:37
Grazie, il ciclo do-while va bene ma mi sono accorto che nel primo messaggio non mi sono espresso bene in fatti il tuo ciclo con for andava bene ma a me serviva che la variabile venisse confrontata con tutti gli elementi insieme, cioè se ho 9 elementi, per esempio da 1 a 9, non posso dare in input 9 risultando false finché nel ciclo for 'a' diventa uguale a 8, dovrebbe essere alla prima immissione confronta con tutti gli elementi dell'array se lo trova dai true e chiudi do while se no false e ricominci il ciclo do-while con una seconda immissione e così via

#include <iostream>
#include <conio.h>
using namespace std;
main()
{
int i;
int ar [9]= {1, 2 ,3 , 4, 5, 6, 7, 8, 9};
cout << "premi un numero \n"<<endl;
bool term = false;
do {
for(int a=0;a<9;a++)
{ cin >> i;
if (i == ar[a])
{
cout<< "è presente \n"<<endl;
term = true;
break;
}
else
{
cout<<"non è presente \n"<<endl;
}
}
}while(term = false);
getch();
return 0;
}

minomic
12-09-2014, 19:02
Infatti non risultava false... Ti avevo detto che appena lo trovi puoi restituire true, ma per restituire false devi aspettare la fine del ciclo! Invece nel secondo messaggio che avevo scritto era una cosa diversa: diciamo che il risultato "false" non veniva accettato e il programma chiedeva un altro numero.

Loading