Паскаль. Динамические списки.
Помогите пожалуйста найти ошибку, у меня если нуля нет, то упорядочивание, которое работает, если есть ноль, то нужно найти МАХ элемент до этого нуля, вот что-то этот кусок не работает(.
Код:
program SPZD;
uses crt;
Type
Ptr=^Elem;
Elem=Record
Inf:real;
Next:Ptr;
end;
var N,i:byte;
Fl,FL1:boolean;
Q,max:real;
k,w,z,FirstPtr,ZadPtr:Ptr;
Procedure Add_beg (var firstptr:ptr; val:real);
Var k:ptr;
begin
new(k);
k^.inf:=val;
k^.next:=firstptr;
firstptr:=k;
end;
Procedure Add_End (FirstPtr:Ptr; Val:Real; var LastPtr:ptr);
Var k:ptr;
begin
k:=firstPtr;
While k^.next<>nil do
k:=k^.next;
LastPtr:=k;
New(k);
LastPtr^.next:=k;
k^.inf:=Val;
LastPtr:=k;
end;
procedure creat_beg (var n:byte; var firstptr:ptr);
var i:byte;
r:real;
begin
firstptr:=nil;
for i:=1 to n do
begin
writeln ('vvedite chislo: ');
readln (r);
add_beg(firstptr,r);
end;
end;
procedure print_list (firstptr:ptr);
var k:ptr;
begin
k:=firstptr;
while (k<>nil) do
begin
writeln (k^.inf:5:2);
k:=k^.next;
end;
end;
procedure val_inf (firstptr:ptr; var zadptr:ptr; Var Fl:Boolean);
Var k:ptr;
begin
k:=firstptr;
Fl:=true;
While (k<>nil) and Fl do
begin
If (k^.inf=0) then
begin
ZadPtr:=k;
Fl:=false;
end;
k:=k^.next;
end;
end;
BEGIN
clrscr;
WriteLn ('Vvedite N');
ReadLn (N);
Creat_Beg (N, FirstPtr);
Print_List (FirstPtr);
Val_Inf (FirstPtr,ZadPtr,Fl);
if (Fl) then begin
WriteLn ('Net 0 elementa. Sortirovka:');
Fl:=true;
While Fl do
begin
Fl:=false;
k:=firstptr;
{While k^.next<>nil do}
For i:=1 to n-1 do begin
If k^.inf>k^.next^.inf then begin
Q:=k^.inf;
k^.inf:=k^.next^.inf;
k^.next^.inf:=Q;
Fl:=true;
end;
k:=k^.next;
end;
Print_List (FirstPtr);
end;
end
else begin WriteLn ('Est 0 element. Poisk MAX');
max:=k^.inf;
w:=k;
While w<>zadptr do
begin
if w^.inf>max then
begin
max:=w^.inf;
z:=w;
end;
w:=w^.next;
end;
WriteLn ('MAX: ', z^.inf:5:2);
end;
ReadLn;
end.
|