Cum funcționează
Aceeași tehnică de filtrare cu doi indici ca la
vectorul cu elemente pare, cu două diferențe care
merită atenție.
Prima: nu mai e nevoie de un al doilea vector. Poți rescrie chiar în X, pentru că m rămâne
mereu în urma lui i — scrii pe o poziție pe care ai citit-o deja. Nu suprascrii niciodată un
element pe care încă nu l-ai verificat. Tehnica se numește filtrare pe loc și e ceea ce fac și
funcțiile din bibliotecile standard.
A doua: cum afli dacă s-a eliminat ceva. Enunțul cere NU EXISTA când nu există elemente nule,
iar asta se citește direct din comparația m < n:
m = câte elemente au rămas
n = câte erau la început
- dacă sunt egale, n-a fost eliminat nimic
Nu ai nevoie de un flag separat — diferența dintre cele două lungimi conține deja informația.
Atenție la tipul de date: enunțul spune numere reale, deci double, nu int. Cu int, o
valoare precum 27.5 s-ar citi trunchiat.
Pentru X = [0, 0, 27, 14, 0, 8, 0], după buclă X începe cu 27 14 8, iar m = 3. Restul
vectorului conține valorile vechi, pe care nu le mai afișăm.
Greșeli frecvente
- Ștergerea „efectivă" prin mutarea tuturor elementelor la fiecare zero găsit — funcționează,
dar e mult mai lung, mai lent și e ușor să greșești indicii. Filtrarea într-o singură trecere e
varianta corectă.
- Afișarea până la
n în loc de m — reapar elementele vechi de la coada vectorului.
int în loc de double — enunțul cere numere reale.
- Compararea cu
== 0 uitată pentru numere reale — la valori calculate, comparația directă cu
zero poate fi înșelătoare; aici însă valorile sunt citite direct, deci e corectă.
- Confuzia cu mesajul —
NU EXISTA se referă la absența elementelor nule, nu la un vector
rezultat gol.