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

  • Автор темы THor
  • Дата начала
T

THor

#1
Препод не принимает.. Программа рабочая, только блок-схему не получается нарисовать... Программа работы с очередью

Код:
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.