Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Usuwanie wszystkich określonych elementów w liście jednokierunkowej.

#1
Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
Witam. Mam problem z usuwaniem wszystkich określonych elementów z listy jednokierunkowej. Mógłby mi ktoś sprawdzić dlaczego usuwa tylko jeden element zamiast wszystkich? Z góry dziękuję za odpowiedzi.
Dane w liście opierają się na liczbach całkowitych.



Spoiler
procedure usun_wyb (var pocz,kon:plista);

var
el:plista;
pop,del:plista;
i:integer;
begin
writeln ('jaki indeks chcesz usunac?');
readln (i);
el:=pocz;

while el<>nil do begin
 if (el^.indeks=i) and (el=pocz) then begin
 del:=el;
pocz:=pocz^.nast;
dispose (del);
 end else

if (el^.indeks=i) and (el=kon) then begin
del:=kon;
kon:=pop;
kon^.nast:=nil;
dispose (del);
end else

if (el^.indeks=i) and (el<>nil) then begin
del:=el;
pop^.nast:=el^.nast;
dispose (del);
end;
pop:=el;
el:=el^.nast;
end;

end;   


 System operacyjny: windows_seven Przeglądarka: chrome
#2
RE: Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
Dziwne, że nie dostajesz błędu, bo ten program nie ma prawa działać. Po usunięciu jakiegokolwiek elementu nie zmieniasz obiektu na, który wskazuje wskaźnik el, a następnie ustawiasz el:=el^.nast; Skoro el został usunięty, to odwołanie el^ jest błędne. Co w takim wypadku zwraca el^.nast? Uruchom program w trybie debug i zobacz co się dzieje.
 System operacyjny: windows_seven Przeglądarka: firefox
#3
RE: Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
To jak mogę poruszać się po usunięciu wskaźnika? Muszę stworzyć wskaźnik na samym początku procedury, który będzie wskazywał na następny element i potem mogę spokojnie usuwać co mi się żywnie podoba?
 System operacyjny: windows_ten Przeglądarka: chrome
#4
RE: Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
Tak, przed usunięciem obiektu na który wskazujesz wskaźnikiem pobierasz następny element.
 System operacyjny: windows_seven Przeglądarka: firefox
#5
RE: Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
Czyli wychodzi na to, że zrobiłem usuwanie jednego określonego elementu. Zabieram się do poprawki i podzielę się wynikami wieczorem Wesoły

Edit:

Pytanie z innej beczki. Jak mogę posortować stos lub listę jednokierunkową metodą przez selekcję? Same liczby potrafię posortować, lecz całe rekordy składające się z imiom, nazwisk itp. już nieKwaśny

Tutaj jest procedura sortująca:

Spoiler
procedure sortuj (var pocz:plista);

var
v,w,wmin,tmp,min,nowy:plista;


begin
clrscr;
v:=pocz;
while (v<>nil) do begin
  min:=v;
  w:=v^.nast;
  while (w<>nil) do begin

    if w^.indeks<min^.indeks then begin
    min^:=w^;
    wmin^:=w^;

  end;
  w:=w^.nast;
end;
  if min^.indeks < v^.indeks then begin
       tmp^ := v^;
       v^:= wmin^;
       wmin^:=tmp^;
     end;
     v := v^.nast;
   end;

 end;   
 System operacyjny: windows_ten Przeglądarka: chrome
#6
RE: Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
Dla ułatwienia powinieneś napisać sobie funkcję, która przyjmuje 2 rekordy, a w wyniku zwraca np. wartość -1, gdy pierwszy rekord jest mniejszy, 0 gdy oba są równe, a 1 gdy jest większy. A jak porównać 2 rekordy? Trzeba w jakiś rozsądny sposób porównać pola. Jeśli są nimi imię i nazwisko, to porównaj najpierw oba nazwiska. Jeśli przypadkiem nazwiska się zgadzają, to porównaj wtedy imiona i na tej podstawie zdecyduj, który rekord jest "mniejszy" (będzie bliżej głowy listy).
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#7
RE: Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
Aktualnie mam listę jednokierunkową z samymi liczbami, które bez problemu sortuję.

Dzięki za radę, postaram się coś napisać sensownego...

Jeżeli chodzi o listę jednokierunkową to jeszcze z nią walczę . Aktualnie Lazarus wysypuje mi program po zakończeniu procedury Kwaśny
 System operacyjny: windows_seven Przeglądarka: chrome
#8
RE: Usuwanie wszystkich określonych elementów w liście jednokierunkowej.
Prawdopodobnie dochodzi do błędu segmentacji (możliwe, że sięgasz do pamięci, którą wcześniej zwolniłeś lub sięgasz do obszaru, który nie należy do programu).
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Usuwanie wszystkich określonych elementów w liście jednokierunkowej.)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [C# WPF] Dodawanie elementów z listy do DataGrid Kamil 1 2 9051 25.05.2017, 20:03
Ostatni post: Kamil 1
  [Java] Implementacja listy jednokierunkowej (problem przy dodawaniu). Chudy2000 3 8611 28.08.2016, 12:33
Ostatni post: sh0cker
  [Java] sortowanie/usunięcie wpisu z samemu zrobionej listy jednokierunkowej off-line 3 2032 28.08.2016, 11:32
Ostatni post: sh0cker

Skocz do:


Wybrane wątki (Usuwanie wszystkich określonych elementów w liście jednokierunkowej.)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Wyświetlanie informacji z bazy danych na stronie www PitPlay 1 7118 16.09.2019 11:18
Ostatni post: Ajgor
  Błąd przy uruchamianiu programu w Java z wiersza poleceń Physicist 3 4361 30.08.2019 14:16
Ostatni post: Physicist
  Python z wiersza poleceń Physicist 15 19699 21.08.2019 20:14
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 6925 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 7041 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 8909 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 8426 08.06.2019 16:50
Ostatni post: wlisik
Ściana Prosta gra w Builder C++ Kiranek1 1 8346 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 10437 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 4334 28.04.2019 15:20
Ostatni post: sylwiaa1
  Środowisko do assemblera Physicist 4 9684 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 9864 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 9594 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 9264 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 8400 23.03.2019 16:49
Ostatni post: luciussulla