линейный список

Тема в разделе "Свободное общение", создана пользователем mannequin, 21 мар 2009.

Статус темы:
Закрыта.
  1. mannequin

    mannequin Гость

    задание: найти в списке min элемент и вставить его после каждого четного элемента.

    проблема: если список заканчивается четным элементом, то не происходит ожидаемой обработки))) если же список кончается нечетным то все работает хорошо)) помогите пожалуйста решить эту проблему. заранее спасибо



    [codebox]unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);


    end;
    u = ^Uzl;
    Uzl = Record
    i :Integer;
    L :u;
    end;

    const n=10;

    var
    Form1: TForm1;
    j: integer;
    h: u;
    st: string;
    buf,min: integer;


    implementation

    {$R *.dfm}

    procedure createlist(var h:U);
    var t: u;
    begin new(h);
    h^.i:=50-random(100);
    t:=h;
    for j:=1 to n-1 do begin
    new(t^.l);
    t:=t^.l;
    t^.i:=50-random(100);
    end;
    t^.l:=nil;
    end;

    procedure printlist(h:u);
    begin
    st:='';
    while h<>nil do begin
    st:=st + IntToStr(h^.i)+' ';
    h:=h^.L;
    end;

    end;

    procedure minim(h:u);
    begin
    min:=h^.i;
    h:=h^.l;
    while h<>nil do begin
    if min>h^.i then begin min:=h^.i;
    h:=h^.l;
    end
    else h:=h^.l;
    end;
    end;

    procedure obr(var h:U);
    var p,t,s: u;
    begin
    t:=h;
    p:=t^.L;
    while t<>nil do begin
    if (t^.i mod 2=0) or (t^.i=0) then begin
    new (s);
    s^.i:=min;
    t^.L:=s;
    s^.L:=p;
    end;
    t:=p;
    p:=p^.L;
    if p=nil then begin
    if (t^.i mod 2=0) or (t^.i=0) then begin
    t^.L:=s;
    s^.L:=nil;
    exit;
    end
    else t^.L:=nil;
    exit;
    end;
    end;
    end;


    procedure tform1.Button1Click(Sender: TObject);
    begin
    createlist(h);
    printlist(h);
    Label1.Caption:=st;
    end;

    procedure tform1.Button2Click(Sender: TObject);
    begin
    minim(h);
    obr(h);
    printlist(h);
    Label2.Caption:=st;
    Label3.Caption:='минимальный элемент = '+inttostr(min);
    end;

    end.[/codebox]

    ошибка в процедуре obr. вроде бы в ней)
     
Загрузка...
Похожие Темы - линейный список
  1. ЮрийПрп
    Ответов:
    4
    Просмотров:
    1.444
  2. gx6060
    Ответов:
    2
    Просмотров:
    415
  3. gx6060
    Ответов:
    6
    Просмотров:
    550
  4. Shandrik
    Ответов:
    6
    Просмотров:
    805
  5. anna
    Ответов:
    8
    Просмотров:
    812
Статус темы:
Закрыта.

Поделиться этой страницей