Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Паскаль. Динамические списки. (http://www.tehnari.ru/f41/t42117/)

citrus 15.11.2010 21:39

Паскаль. Динамические списки.
 
Помогите пожалуйста найти ошибку, у меня если нуля нет, то упорядочивание, которое работает, если есть ноль, то нужно найти МАХ элемент до этого нуля, вот что-то этот кусок не работает(.


Код:

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.


citrus 16.11.2010 19:12

все, спасибо, вопрос снят. нашел ошибку.


Часовой пояс GMT +4, время: 23:38.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.