Cum funcționează
Aceasta e problema-tipar pentru toată categoria „construiește un vector nou din altul". Merită
înțeleasă bine, pentru că exact aceeași structură rezolvă și eliminarea elementelor nule, și
selectarea celor din afara unui interval.
Ideea centrală: doi indici care avansează independent.
i parcurge vectorul X, element cu element, fără să sară vreunul
m avansează doar când chiar scrii ceva în Y
Când elementul nu trece testul, i merge mai departe, dar m rămâne pe loc. La final, m conține
exact numărul de elemente din Y — deci e și indice, și lungime, și răspuns la întrebarea „există
vreunul?".
Scrierea y[m++] = x[i] face două lucruri deodată: pune valoarea pe poziția m, apoi îl crește pe
m. E forma prescurtată a lui:
y[m] = x[i];
m = m + 1;
Testul de paritate e x[i] % 2 == 0 — restul împărțirii la 2 este 0 pentru numere pare. Observă
că 0 este par și apare în rezultatul primului exemplu.
Afișarea lui Y se face într-o buclă separată, care merge până la m, nu până la n. Restul
vectorului Y conține valori nedefinite, care nu trebuie atinse.
Greșeli frecvente
- Afișarea lui
Y până la n în loc de m — apar valori aleatorii din memorie după
elementele reale.
- Folosirea lui
i ca indice și în Y (y[i] = x[i]) — lasă goluri în Y, pentru că i sare
peste pozițiile elementelor impare.
- Uitarea că
0 e par — se încearcă tratarea lui separat, deși aparține rezultatului.
m neinițializat cu 0 — prima scriere ajunge pe o poziție oarecare.
- Verificarea
m > 0 uitată — la un vector fără numere pare nu se afișează nimic în loc de
mesajul cerut.