Informatică, întrebare adresată de ekasmeringsrl, 9 ani în urmă


Cerinţa
Se dă un şir cu n elemente, numere naturale. Să se verifice dacă în şir există elemente impare.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului, separate prin spaţii.

Date de ieşire
Programul afișează pe ecran mesajul DA, dacă şirul conţine elemente impare, respectiv NU în caz contrar.

Restricţii şi precizări
1 ≤ n ≤ 100
elementele şirului vor fi mai mici decât 10000
Exemplu:
Date de intrare

5
2 8 6 10 8
Date de ieșire

#include

using namespace std;

int main()
{
int a[101], n, p, b=0;
cin >> n;
for (p=0;p<=n;p++)
cin >>a[p];

if (a[p]%2==0)
b=0;
else b=1;
if (b=0)
cout << "DA";
else cout <<"NU";


return 0;

}
ce am gresit?

Răspunsuri la întrebare

Răspuns de DemonBolt
0
In primul rand, ai o greseala fatala. Nu ai acolade de nicio culoare. for-ul executa doar prima expresie data, in cazul in care nu are acolade.

Apoi, daca, sa spunem, n = 5, tu vrei sa citeste 5 numere. Pe de alta parte, tu pleci cu for-ul de la 0 la 5, adica 6 numere citite.
Ai 2 variante sa repari:
for(p=0;p<=n; ......
sau
for(p=1;p<=n; .....


In al doilea rand, ai niste greseli de nuanta, nu neaparat de cod, dar e bine sa iti intre in obicei.
1. La Restrictii si precizari, observi ca vectorul tau este de maxim 100 de valori. Foarte bine, tu l-ai luat de 101, dar as propune sa il iei de 105, si in general:
int a[SIZE + 5];

2. Este extraordinar de important sa dai variabilelor un nume adecvat. variabila b este mult prea generala, si te poti incurca, incearca sa denumesti cu ceva ce are sens in codul tau: ex: existaImpar sau exImp sau esteImpar si tot asa...

3. Pentru variabile de tip flag, foloseste tipul de date bool, pt ca este mai usor de inteles.
bool b = false;
...
b = true;

4. Daca gasesti un numar impar, nu mai are rost sa verifici mai incolo, e clar ca exista cel putin unul (tocmI l-ai gasit), asa ca folosesti instructiunea "break", care sparge for-ul si continua


Codul este atasat. Succes!
Anexe:

ekasmeringsrl: iti multumesc frumos sunt incepator si chiar aveam nevoie de putin ajutor
Alte întrebări interesante