Построить Блок-схему Программы

Тема в разделе "Pascal and Delphi", создана пользователем THor, 19 дек 2013.

  1. THor

    THor New Member

    Регистрация:
    17 дек 2013
    Сообщения:
    4
    Симпатии:
    0
    Препод не принимает.. Программа рабочая, только блок-схему не получается нарисовать... Программа работы с очередью

    Код (Delphi):
    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    type
    TData = String;
    TPElem = ^TElem;
    TElem = record
    Data : TData;
    PNext : TPElem;
    end;
    TQueue = record
    PFirst, PLast : TPElem;
    end;

    procedure QueueInit(var aQueue : TQueue);
    begin
    aQueue.PFirst := nil;
    aQueue.PLast := nil;
    end;


    procedure QueuePush(var aQueue : TQueue; const aData : TData);
    var
    PElem : TPElem;
    begin
    New(PElem);
    PElem^.Data := aData;
    PElem^.PNext := nil;
    if aQueue.PFirst = nil then
    aQueue.PFirst := PElem
    else
    aQueue.PLast^.PNext := PElem
    ;
    aQueue.PLast := PElem;
    end;


    function QueuePop(var aQueue : TQueue; var aData : TData) : Boolean;
    var
    PElem : TPElem;
    begin
    Result := False;
    if aQueue.PFirst = nil then Exit;

    PElem := aQueue.PFirst;
    aData := PElem^.Data;
    aQueue.PFirst := PElem^.PNext;
    if aQueue.PFirst = nil then aQueue.PLast := nil;
    Dispose(PElem);
    Result := True;
    end;


    procedure QueueFree(var aQueue : TQueue);
    var
    Data : TData;
    begin
    while QueuePop(aQueue, Data) do;
    end;


    function QueueToStr(var aQueue : TQueue) : String;
    var
    QTmp : TQueue;
    Data : TData;
    begin
    if aQueue.PFirst = nil then begin
    Result := 'Очередь пуста.';
    Exit;
    end;
    Result := '';


    QueueInit(QTmp);

    while QueuePop(aQueue, Data) do begin
    QueuePush(QTmp, Data);
    if Result <> '' then Result := Result + ', ';
    Result := Result + Data;
    end;

    aQueue := QTmp;
    end;

    var

    Q : TQueue;


    procedure TForm1.FormCreate(Sender: TObject);
    begin

    QueueInit(Q);
    end;


    procedure TForm1.FormDestroy(Sender: TObject);
    begin

    QueueFree(Q);
    end;


    procedure TForm1.Button1Click(Sender: TObject);
    var
    S : String;
    begin
    S := Edit1.Text;
    if S = '' then begin
    ShowMessage('Пустая строка не будет добавлена в очередь. Действие отменено.');
    Exit;
    end;
    QueuePush(Q, S);
    Memo1.Lines.Add('В конец очереди добавлен элемент: ' + S);
    end;


    procedure TForm1.Button2Click(Sender: TObject);
    var
    S : String;
    begin
    if QueuePop(Q, S) then
    Memo1.Lines.Add('Из начала очереди взят элемент: ' + S)
    else
    ShowMessage('Очередь пуста. Действие отменено.');
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Memo1.Lines.Add('Очередь (начало - конец):');
    Memo1.Lines.Add(QueueToStr(Q));
    end;

    end.
     
Загрузка...

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