Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Eliminarea unui element.  (Citit de 7662 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
GRazvan
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 32



Vezi Profilul
« : Iulie 08, 2011, 22:19:50 »

 Buna ziua. Am dat de o problema care suna cam asa. Se citesc n numere reale intr-un vector. Sa se elimine elementele nule din vector fara a folosi un alt vector. Ok, intrebarile mele sunt:

1) Cand mi se da o astfel de problema se cere ca vectorul sa apara pe ecran fara elementele nule?
2) Ce inseamna ELIMINARE? Inseamna afisarea vectorului fara elemente nule? Ori inseamna...sa na imaginam un vector 1,0,5,6 si care in urma unui algoritm devine 1,5,6? Se poate ELIMINA (delete) un element din vector?

Atat vreau sa stiu.

  Multumesc Smile
Memorat
caen1
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #1 : Iulie 08, 2011, 22:27:42 »

Există mai multe moduri de a rezolva cerința. Dacă ordinea nu este importantă, poți suprascrie ultimul element peste cel cu valoare nulă, apoi scurtezi șirul cu 1 (de ex: [1, 0, 5, 6] devine [1, 6, 5]). Dacă ordinea este importantă, muți fiecare element de după 0 cu o poziție spre stânga, până nu mai ai de făcut nici o mutare.

În cerință scrie că nu ai voie să folosești un al doilea vector, dar există alte două moduri prin care poți elimina un element dintr-un vector folosindu-te de alt vector. Prima metodă ar fi copierea elementelor nenule într-un alt vector. A doua ar fi crearea unui vector de tip boolean, în care, pe fiecare poziție asociată vectorului inițial, reții 0, sau 1, dacă vrei să elimini, sau nu, elementul din vectorul inițial (de ex: dacă ai vectorul [1, 0, 5, 6], cel boolean ar arăta așa: [1, 0, 1, 1]). Când ți se cere să afișezi elementele nenule din primul vector, pentru fiecare poziție, verifici și vectorul auxiliar și printezi doar valorile pentru care acesta indică 1.
« Ultima modificare: Iulie 08, 2011, 22:35:15 de către C.A.EN » Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #2 : Iulie 09, 2011, 06:44:56 »

Buna ziua. Am dat de o problema care suna cam asa. Se citesc n numere reale intr-un vector. Sa se elimine elementele nule din vector fara a folosi un alt vector. Ok, intrebarile mele sunt:

1) Cand mi se da o astfel de problema se cere ca vectorul sa apara pe ecran fara elementele nule?
2) Ce inseamna ELIMINARE? Inseamna afisarea vectorului fara elemente nule? Ori inseamna...sa na imaginam un vector 1,0,5,6 si care in urma unui algoritm devine 1,5,6? Se poate ELIMINA (delete) un element din vector?

Atat vreau sa stiu.

  Multumesc Smile


Deobicei ti se cere sa elimini din vector, nu doar sa afisezi elementele nenule.
Uite cum as face eu, considerand vectorul a[1...n]:

Cod:
int i = 0;
for (int j = 1; j <= n; ++j)
    if (a[j] != 0)
        a[++i] = a[j];
n = i;
Memorat
GRazvan
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 32



Vezi Profilul
« Răspunde #3 : Iulie 09, 2011, 09:59:54 »

A doua ar fi crearea unui vector de tip boolean, în care, pe fiecare poziție asociată vectorului inițial, reții 0, sau 1, dacă vrei să elimini, sau nu, elementul din vectorul inițial (de ex: dacă ai vectorul [1, 0, 5, 6], cel boolean ar arăta așa: [1, 0, 1, 1]). Când ți se cere să afișezi elementele nenule din primul vector, pentru fiecare poziție, verifici și vectorul auxiliar și printezi doar valorile pentru care acesta indică 1.

 Am inteles, multumesc. Dar metoda cu boolean mi se pare complicata. Folosesc Pascal, de ce sa nu fac asa?

 for i := 1 to n do
 if a <> 0 then write(a);
Memorat
caen1
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #4 : Iulie 09, 2011, 13:22:42 »

Dacă vrei să le printezi, o poți face pe loc cum ai scris tu. Dacă trebuie să construiești vectorul (ca să faci ceva cu el mai târziu), folosește metodele de mai sus.

Treaba cu vectorul boolean nu e chiar atât de complicată. Uite aici niște pseudocod:

Cod:
citire date

pentru i=1, n:
    dacă v[i] != 0
        b[i] = 1
    altfel
        b[i] = 0
    sfârșit dacă
sfârșit pentru

pentru i=1, n:
    dacă b[i] != 0
        scrie v[i] ' '
    sfârșit dacă
sfârșit pentru
Memorat
GRazvan
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 32



Vezi Profilul
« Răspunde #5 : Iulie 09, 2011, 22:02:36 »

Nu, stiu cum se face cu boolean dar eu spun ca este mult mai complicat decat un simplu <>. Va multumesc pentru raspunsuri:)
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines