Memo1: TMemo;
Label7: TLabel;
Image6: TImage;
Bevel1: TBevel;
Panel7: TPanel;
Button23: TButton;
Button24: TButton;
Button25: TButton;
Button26: TButton;
Edit7: TEdit;
Image7: TImage;
Label8: TLabel;
Panel8: TPanel;
Image8: TImage;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Button27: TButton;
Button28: TButton;
Button30: TButton;
Button29: TButton;
Button31: TButton;
Button32: TButton;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N11: TMenuItem;
N21: TMenuItem;
N31: TMenuItem;
N41: TMenuItem;
N51: TMenuItem;
N61: TMenuItem;
N71: TMenuItem;
Button33: TButton;
N9: TMenuItem;
procedure Button12Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button22Click(Sender: TObject);
procedure Button21Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button15Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button20Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button19Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure Button18Click(Sender: TObject);
procedure Button26Click(Sender: TObject);
procedure Button25Click(Sender: TObject);
procedure Button23Click(Sender: TObject);
procedure Button24Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure Button27Click(Sender: TObject);
procedure Button30Click(Sender: TObject);
procedure Button29Click(Sender: TObject);
procedure Button31Click(Sender: TObject);
procedure Button32Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Button33Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N31Click(Sender: TObject);
procedure N41Click(Sender: TObject);
procedure N51Click(Sender: TObject);
procedure N61Click(Sender: TObject);
procedure N71Click(Sender: TObject);
procedure N9Click(Sender: TObject);
private
public
end;
procedure DoNewEditList;
procedure DoNewEditListTwo;
procedure DoNewEditRoundList;
var
Form1: TForm1;
ListBegin: List; //указатель на однонапр. список
ListPos: Integer; //позиция в однонапр. списке
ListTwoBegin: ListTwo; //указатель на двунапр. список
ListTwoPos: Integer; //позиция в двунапр. списке
QueueBegin: List; //указатель на очередь
QueuePos: Integer; //"позиция в очереди" (содержит кол-во символов в Edit до первого элемента)
Stack: List; //указатель на стек
StackPos: Integer; //"позиция в стеке" (содержит кол-во символов в Edit до первого элемента)
DeckBegin, DeckEnd: ListTwo; //указатели на начало и конец дека
DeckBeginPos, DeckEndPos: Integer; //"позиции в деке" (DeckEndPos содержит кол-во символов в Edit от DeckEndPosition до последнего элемента)
DeckEndPosition: Integer; //позиция последнего элемента в деке (содержит первоначальное кол-во символов в Edit до последнего элемента)
RoundList: List; //указатель в циклическом списке
RoundListPos: Integer; //"позиция в циклическом списке"
implementation
uses O_programm, Help, Un18_Lab;
{$R *.DFM}
procedure DoNewEditList;
var
q: List;
begin
q := ListBegin;
Form1.Edit1.Text := '';
while q <> nil do
begin
Form1.Edit1.Text := Form1.Edit1.Text + ' ' + IntToStr(q^.Info);
q := q^.Next;
end;
end;
procedure DoNewEditListTwo;
var
q: ListTwo;
begin
q := ListTwoBegin;
Form1.Edit2.Text := '';
while q <> nil do
begin
Form1.Edit2.Text := Form1.Edit2.Text + ' ' + IntToStr(q^.Info);
q := q^.Next;
end;
end;
procedure DoNewEditRoundList;
var
q: List;
begin
q := RoundList^.Next;
Form1.Edit7.Text := ' ' + IntToStr(RoundList^.Info);
while q <> RoundList do
begin
Form1.Edit7.Text := Form1.Edit7.Text + ' ' + IntToStr(q^.Info);
q := q^.Next;
end;
end;
procedure TForm1.Button12Click(Sender: TObject);
var
i, j: Integer;
s: string;
begin
StatusBar1.Panels[0].Text := '';
GetQueue(QueueBegin);
if QueueBegin <> nil then
begin
while Edit3.Text[QueuePos] <> ' ' do Inc(QueuePos);
Inc(QueuePos);
s := Edit3.Text;
for i := 1 to QueuePos - 1 do
if s[i] <> ' ' then s[i] := ' ';
Edit3.Text := s;
end
else
begin
ShowMessage('Очередь пуста');
Edit3.Text := '';
Image3.Hide;
Button10.Enabled := False;
Button11.Enabled := False;
Button12.Enabled := False;
StatusBar1.Panels[1].Text := 'Очередь пуста';
end;
Image3.Left := Round(QueuePos * 7);
end;
procedure TForm1.Button11Click(Sender: TObject);
begin
StatusBar1Panels[0].Text := 'Нельзя !!!';
Memo1.Lines.Add('В очерди нельзя возвращаться в начало т.к. указатель указывает сразу на начало;');
end;
procedure TForm1.Button22Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.Button21Click(Sender: TObject);
var
q: List;
qTwo: ListTwo;
qQueue, rQueue: List;
Info: Integer;
FlagList: Boolean;
qStack: List;
qDeckBegin, qDeckEnd: ListTwo;
qRoundList: List; // начало циклич. списка
begin
Button1.Enabled := True;
Button2.Enabled := True;
Button3.Enabled := True;
Button4.Enabled := True;
Button5.Enabled := True;
Button6.Enabled := True;
Button7.Enabled := True;
Button8.Enabled := True;
Button9.Enabled := True;
Button10.Enabled := True;
Button11.Enabled := True;
Button12.Enabled := True;
Button13.Enabled := True;
Button14.Enabled := True;
Button15.Enabled := True;
Button16.Enabled := True;
Button17.Enabled := True;
Button18.Enabled := True;
Button19.Enabled := True;
Button20.Enabled := True;
Button23.Enabled := True;
Button24.Enabled := True;
Button25.Enabled := True;
Button26.Enabled := True;
Image1.Visible := True;
Image2.Visible := True;
Image3.Visible := True;
Image4.Visible := True;
Image5.Visible := True;
Image6.Visible := True;
Image7.Visible := True;
Edit1.Text := '';
Edit2.Text := '';
Edit3.Text := '';
Edit4.Text := '';
Edit5.Text := '';
Edit7.Text := '';
StatusBar1.Panels[0].Text := '';
StatusBar1.Panels[1].Text := '';
CreateLists;
q := ListBegin;
qTwo := ListTwoBegin;
while q <> nil do
begin
Edit1.Text := Edit1.Text + ' ' + IntToStr(q^.Info);
q := q^.Next;
end;
Image1.Left := 9;
ListPos := 0;
while qTwo <> nil do
begin
Edit2.Text := Edit2.Text + ' ' + IntToStr(qTwo^.Info);
qTwo := qTwo^.Next;
end;
Image2.Left := 9;
ListTwoPos := 0;
FlagList := True;
while QueueBegin <> nil do
begin
Info := GetQueue(QueueBegin);
Edit3.Text := Edit3.Text + ' ' + IntToStr(Info);
AddToQueue(Info, qQueue);
if FlagList then
begin
FlagList := False;
rQueue := qQueue;
end;
end;
QueueBegin := rQueue;
QueuePos := 2;
Image3.Left := 9;
while Stack <> nil do
begin
Info := GetStack(Stack);
Edit4.Text := Edit4.Text + ' ' + IntToStr(Info);
AddToStack(Info, qStack);
end;
Stack := qStack;
Memo1.Lines.Add('В стеке числа идут на оборот т.к. элементы считываются из конца стека.');
StackPos := 2;
Image4.Left := 9;
while DeckEnd <> nil do
begin
Info := GetDeckEnd(DeckEnd);
Edit5.Text := Edit5.Text + ' ' + IntToStr(Info);
AddToDeck(Info, qDeckBegin, qDeckEnd, 0);
end;
DeckBegin := qDeckBegin;
DeckEnd := qDeckEnd;
DeckBeginPos := 2;
Image5.Left := 9;
Memo1.Lines.Add('Дек прочитывался с начала, поэтому элементы записались по порядку.');
DeckEndPosition := 1;
while Edit5.Text[DeckEndPosition] <> '' do Inc(DeckEndPosition);
Image6.Left := Round(9 + DeckEndPosition * 6.2);
Dec(DeckEndPosition);
DeckEndPos := DeckEndPosition;
qRoundList := RoundList^.Next;
Edit7.Text := ' ' + IntToStr(RoundList^.Info);
while qRoundList <> RoundList do
begin
Edit7.Text := Edit7.Text + ' ' + IntToStr(qRoundList^.Info);
qRoundList := qRoundList^.Next;
end;
Image7.Left := 9;
RoundListPos := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form3.Show;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
StatusBar1.Panels[0].Text := 'Нельзя !!!';
Memo1.Lines.Add('В однонаправленном списке нельзя перемещаться назад, т.к. связь существует толко в одну сторону;');
end;
procedure TForm1.Button4Click(Sender: TObject);
var
qList: List;
i, j: Integer;
begin
StatusBar1.Panels[0].Text := '';
qList := ListBegin;
i := 0;
while i <> ListPos do
begin
qList := qList^.Next;
Inc(i);
end;
if qList <> nil then
begin
if qList^.Next <> nil then Inc(ListPos);
i := 0;
j := 0;
while i < ListPos do
begin
Inc(j);
if Edit1.Text[j] = ' ' then Inc(i);
end;
Image1.Left := Round(9 + (j + 1) * 7.5);
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
var
qListTwo: ListTwo;
i, j: Integer;
begin
StatusBar1.Panels[0].Text := '';
qListTwo := ListTwoBegin;
i := 0;
if ListTwoPos <> 0 then dec(ListTwoPos);
i := 0;
j := 0;
while i < ListTwoPos do
begin
Inc(j);
if Edit2.Text[j] = ' ' then Inc(i);
end;
if ListTwoPos = 0 then Image2.Left := 9
else Image2.Left := Round(9 + (j + 1) * 7.5);
end;
procedure TForm1.Button8Click(Sender: TObject);
var
qListTwo: ListTwo;
i, j: Integer;
begin
StatusBar1.Panels[0].Text := '';
qListTwo := ListTwoBegin;
i := 0;
while i <> ListTwoPos do
begin
qListTwo := qListTwo^.Next;
Inc(i);
end;
if qListTwo <> nil then
begin
if qListTwo^.Next <> nil then Inc(ListTwoPos);
i := 0;
j := 0;
while i < ListTwoPos do
begin
Inc(j);
if Edit2.Text[j] = ' ' then Inc(i);
end;
Image2.Left := Round(9 + (j + 1) * 7.5);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DestroyList(ListBegin);
DestroyListTwo(ListTwoBegin);
DestroyList(QueueBegin);
DestroyList(Stack);
DestroyListTwo(DeckBegin);
Application.Terminate;
end;
procedure TForm1.Button15Click(Sender: TObject);
begin
StatusBar1.Panels[0].Text := 'Нельзя !!!';
Memo1.Lines.Add('В стеке нельзя возвращаться в начало т.к. указатель указывает сразу на начало;');
end;
procedure TForm1.Button16Click(Sender: TObject);
var
i: Integer;
s: string;
begin
StatusBar1.Panels[0].Text := '';
GetStack(Stack);
if Stack <> nil then
begin
while Edit4.Text[StackPos] <> ' ' do Inc(StackPos);
Inc(StackPos);
s := Edit4.Text;
for i := 1 to StackPos - 1 do
if s[i] <> ' ' then s[i] := ' ';
Edit4.Text := s;
end
else
begin
ShowMessage('Стек пуст');
Edit4.Text := '';
Image4.Hide;
Button14.Enabled := False;
Button15.Enabled := False;
Button16.Enabled := False;
StatusBar1.Panels[1].Text := 'Стек пуст';
end;
Image4.Left := Round(StackPos * 7);
end;
procedure TForm1.Button20Click(Sender: TObject);
var
i: Integer;
s: string;
begin
StatusBar1.Panels[0].Text := '';
GetDeckBegin(DeckBegin);
if DeckBegin <> nil then
begin
while Edit5.Text[DeckBeginPos] <> ' ' do Inc(DeckBeginPos);
Inc(DeckBeginPos);
s := Edit5.Text;
for i := 1 to DeckBeginPos - 1 do
if s[i] <> ' ' then s[i] := ' ';
Edit5.Text := s;
end;
if (DeckBegin = nil) and (DeckBegin = DeckEnd) then
begin
ShowMessage('Дек пуст');
Edit5.Text := '';
Image5.Hide;
Image6.Hide;
Button18.Enabled := False;
Button19.Enabled := False;
Button20.Enabled := False;
StatusBar1.Panels[1].Text := 'Дек пуст';
end;
Image5.Left := Round(DeckBeginPos * 7);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Windows.SetFocus(Button21.Handle);
end;
procedure TForm1.Button19Click(Sender: TObject);
var
i, a: Integer;
s: string;
begin
StatusBar1.Panels[0].Text := '';
GetDeckEnd(DeckEnd);
if DeckEnd <> nil then
begin
while Edit5.Text[DeckEndPos] <> ' ' do Dec(DeckEndPos);
Dec(DeckEndPos);
s := Edit5.Text;
for i := DeckEndPosition downto DeckEndPos + 1 do
if s[i] <> ' ' then s[i] := ' ';
Edit5.Text := s;
//удаляем все пробелы конце строки
s := '';
i := Length(Edit5.Text) - 1;
while Edit5.Text[i] = ' ' do Dec(i);
for a := 1 to i do s := s + Edit5.Text[a];
Edit5.Text := s;
end;
if (DeckEnd = nil) and (DeckBegin = DeckEnd) then
begin
ShowMessage('Дек пуст');
Edit5.Text := '';
Image5.Hide;
Image6.Hide;
Button19.Enabled := False;
Button20.Enabled := False;
StatusBar1.Panels[1].Text := 'Дек пуст';
end;
Image6.Left := Round(DeckEndPos * 7 - 9);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Form5.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
DeleteFromList(ListPos);
DoNewEditList;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
DeleteFromListTwo(ListTwoPos);
DoNewEditListTwo;
end;
procedure TForm1.Button10Click(Sender: TObject);
var
i, a: Integer;
s1, s2: string;