Index · Правила · Поиск· Группы · Регистрация · Личные сообщения· Вход

Список разделов Компьютерный раздел
 
 
 

Раздел: Компьютерный раздел Подскажите с Delphi 

Создана: 27 Мая 2010 Чтв 23:25:57.
Раздел: "Компьютерный раздел"
Сообщений в теме: 2, просмотров: 662

  1. mellany2007


    Начинающий


    Более 10 лет на форуме
    27 Мая 2010 Чтв 23:25:57
    Привет, сразу извините если написал не в том разделе!
    Есть задание по делфи Динамические структуры данных: Организация связных списков, есть пример и нужно объяснить одну процедуру, помогите пожалуйста.
    Сама программка [внешняя ссылка]
    Код:
    procedure TForm1.Button3Click(Sender: TObject);
    begin
     label2.Caption:='';
     q:=L;
     while q<>nil do
     begin
      label2.Caption:=label2.Caption+IntToStr(q^.val)+' ';
      q:=q^.next;
     end;
    end;


    Код:
    unit Unit1;

    interface

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

    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Label1: TLabel;
        Button2: TButton;
        Button3: TButton;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }

      public
        { Public declarations }


      end;
     type
       link = ^elem;
        elem = record
            val : integer;
            next : link
        end;

    var
      Form1: TForm1;
      L, p, q : link;
      f:TextFile;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;

    begin
     assignfile(f,  'file1.txt');
     reset(f);
     new(L);  {Указатель на первый элемент очереди}
     Readln(f,s);
     L^.val:=StrToInt(s);
     p:=L;
     while not eof(f) do
     begin
      new(q);
      readln(f,s);
      q^.val:=StrToInt(s);
      p^.next:=q;
      p:=q;
     end;
     p^.next:=nil;     {Обозначение последнего элемента очереди}
     closefile(f);
     showmessage('Очередь  создана');
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
     label2.Caption:='';
     q:=L;
     while q<>nil do
     begin
      label2.Caption:=label2.Caption+IntToStr(q^.val)+'  ';
      q:=q^.next;
     end;
    end;

    end.
  2. KAndrey


    Завсегдатай


    Более 10 лет на форумеМуж.
    27 Мая 2010 Чтв 23:40:17
    А чего тут собственно объяснять?
    Функция выводит в текст кнопки все элементы списка через пробел...
    L - список (указатель на его первый элемент)
    q:=L; - взяли первый элемент.
    q:=q^.next; - переход к следующему элементу списка.
    q^.val - значение текущего элемента.
    while q<>nil do - контроль конца списка, у последнего елемента не будет ссылки на следующий, те у него q^.next==nil...