GRY-Online.pl --> Archiwum Forum

Bardzo proszę o pomoc

16.04.2003
00:14
smile
[1]

ZZar [ Konsul ]

Bardzo proszę o pomoc

Mam problemy z napisaniem procedury która wyklucza liste pF2 z listy pF jeśli któs wie jak rozwiązać ten problem w Tubo Pascalu to bardzo proszę o napisanie tej procedurki będę bardzo wdzięczny.

przykładowa deklaracja listy:
type
pl1=el1^;
el1=record
w:integer;
next:pl1;
end;
Może być na stosach.
procedure excl(pF,pF2:pl1) ja napisaBem tak
program exludehmmm;
uses
crt;
type
pl1=^el1;
el1=record
w:integer;
next:pl1;
end;
var
pF2,pF:pl1;
k:integer;pR:pl1;
procedure add(var pF:pl1;px:integer);
var curr:pl1;
Begin
new(curr);
curr^.w:=px;
curr^.next:=pF;
pF:=curr;
End;
procedure write(pF:pl1);
var curr:pl1;
Begin
curr:=pF;
while curr<>nil do
begin
writeln(curr^.w);
curr:=curr^.next;
end;
End;

procedure wyklucz;
var
pom1,pom2,p1,p2,post:pl1;
begin
pom1:=pF;
pom2:=pF2;
post:=nil;
repeat
while (pom1^.w<>pom2^.w) and (pom1<>nil) do
begin
post:=pom1;
pom1:=pom1^.next;
end;
while (pom1^.w=pom2^.w) and (pom2<>nil) and (pom1<>nil) do
begin
pom1:=pom1^.next;
pom2:=pom2^.next;
end;
if (pom1=nil) and (pom2=nil) and (post=nil) then
begin
p1:=pF;
repeat
p2:=p1^.next;
dispose(p1);
p1:=p2;
until p1=nil;
pF:=nil;
end;
if (pom1=nil) and (pom2=nil) and (post<>nil) then
begin
p1:=post^.next;
repeat
p2:=p1^.next;
dispose(p1);
p1:=p2;
until p2=nil;
post^.next:=nil;
end;
if (pom1<>nil) and (pom2=nil) then
begin
if (post=nil) then p1:=pF else p1:=post^.next;
repeat
p2:=p1^.next;
dispose(p1);
p1:=p2;
until p1=pom1;
if (post=nil) then pF:=pom1 else post^.next:=pom1;
end;

pom2:=pF2;
until pom1=nil;
end;


begin
clrscr;
pF:=nil;
readln(k);
while k<>0 do begin
add(pF,k);
readln(k);
end;
writeln('Wpisz druga liste');
readln(k);
while k<>0 do begin
add(pF2,k);
readln(k);
end;
writeln('Lista pierwsza :');
write(pF);
writeln('Lista druga :');
write(pF2);
writeln;
writeln('usuwanie listy procedure EXCL ');
wyklucz;
write(pF);

readkey;
end.
ale nie chce
działać

16.04.2003
01:00
smile
[2]

VinEze [ Hasta la victoria siempre! ]

Bo to jest skopane na maxa.
1. Po pierwsze sprawdź debuggerm (mi się optycznie nie chce a nie mam TP na kompie), czy tworzą Ci się listy.
2. Styl pisania jest do d**y, komentarze, nazewnictwo zmiennych etc.
3. Procedura wyklucz powinna mieć jakieś parametry, żeby to wyglądało na uniwersalną procedurę (przez var 2 wskażniki) - nawet jak by to chodziło to i tak taki kod jest na pałę, a Ty się zamęczysz.
4. pierwsza pętla jest zła, ; lepiej robić while na jedną z list (bo dalej po c sprawdzać czy nie zaczynasz od pustej listy)
5. lepiej zrobić procedurkę usun_elemnent z parametrem początek listy (pf) i wartością.

Algorytm z grubsza jest taki załóżmy że zaczynamy od pf(nie gra roli,możne i pf2)
wskaźniki stoją na pierwszych
while (pom1 <>nil) ‹dopóki nie koniec listy pf›
pom2:=pf2; ‹staję na początku drugiej›
while pom2<> nil) ‹dopóki nie koniec drugiej›
if pom2.w=pom1.w
then
usun (pom1.w, pf) ‹takie same to wypier...›
‹ot i wszystko!!!›
procedukę usuwania elementu z listy jak masz początek i wartość do usniecia już prawie miałeś: zapamietać poprzedni, jak jest wartość pod wskażnikiem taka sama, to przekierować ten. poprzedni.next na aktualny next i walnąć dispose.

© 2000-2024 GRY-OnLine S.A.