var
q: ListTwo;
begin
if PointerDeckBegin <> nil then //Если дек не пуст
begin
Result := PointerDeckBegin^.Info;
q := PointerDeckBegin;
PointerDeckBegin := q^.Next;
if PointerDeckBegin <> nil then PointerDeckBegin^.Prev := nil;
if q <> nil then Dispose(q);
end
else
begin
ShowMessage('Дек пуст');
Form1.Edit5.Text := '';
Form1.Button18.Enabled := False;
Form1.Button19.Enabled := False;
Form1.Button20.Enabled := False;
Form1.Image5.Hide;
Form1.Image6.Hide;
end;
end;
function GetDeckEnd(var PointerDeckEnd: ListTwo): Integer;
//ф-ия получает элемент из конца дека и возвращает указатель на конец дека.
var
q: ListTwo;
begin
if PointerDeckEnd <> nil then //Если дек не пуст
begin
Result := PointerDeckEnd^.Info;
q := PointerDeckEnd;
PointerDeckEnd := q^.Prev;
if PointerDeckEnd <> nil then PointerDeckEnd^.Next := nil;
if q <> nil then Dispose(q);
end
else
begin
ShowMessage('Дек пуст');
Form1.Edit5.Text := '';
Form1.Button18.Enabled := False;
Form1.Button19.Enabled := False;
Form1.Button20.Enabled := False;
Form1.Image5.Hide;
Form1.Image6.Hide;
end;
end;
procedure CreateLists; //процедура создания всех списков
var
i: Integer;
X: Integer;
Uk, q: List;
UkTwo, qTwo: ListTwo;
UkQueue, qQueue: List;
qStack: List;
qDeckBegin, qDeckEnd: ListTwo;
begin
X := Random(101); //Определяем значение первого элемента
Uk := nil; //////////////////////////
q := nil; // //
UkTwo := nil; // НАЧАЛЬНЫЕ УСТАНОВКИ: //
qTwo := nil; // //
UkQueue := nil; // все указатели = nil //
qQueue := nil; // //
qStack := nil; // //
qDeckBegin := nil; // //
qDeckEnd := nil; //////////////////////////
// Destroy for every lists
if ListBegin <> nil then DestroyList(ListBegin);
if ListTwoBegin <> nil then DestroyListTwo(ListTwoBegin);
if QueueBegin <> nil then DestroyList(QueueBegin);
if Stack <> nil then DestroyList(Stack);
if DeckBegin <> nil then DestroyListTwo(DeckBegin);
if RoundList <> nil then DestroyRoundList(RoundList);
AddToList(X, Uk); //
AddToListTwo(X, UkTwo); // Добавляем Х в
AddToQueue(X, UkQueue); // каждый список
AddToStack(X, qStack); //
AddToDeck(X, qDeckBegin, qDeckEnd, 0); //
AddToRoundList(X, RoundList); ///////////////////
Unit1.Form1.Edit6.Text := IntToStr(X);
q := Uk; //
qTwo := UkTwo; // Формируем указатели на начало списков
qQueue := UkQueue; //
for i := to 9 do //Дальнейшее формирование списков
begin
X := Random(101);
AddToList(X, q);
AddToListTwo(X, qTwo);
AddToQueue(X, qQueue);
AddToStack(X, qStack);
AddToDeck(X, qDeckBegin, qDeckEnd, 0);
AddToRoundList(X, RoundList);
Unit1.Form1.Edit6.Text := Unit1.Form1.Edit6.Text + ' ' + IntToStr(X);
end;
ListBegin := Uk; //////////////////////////////////////
ListTwoBegin := UkTwo; // //
QueueBegin := UkQueue; // //
Stack := qStack; // Определяем указатели все списки //
DeckBegin := qDeckBegin; // //
DeckEnd := qDeckEnd; // //
RoundList := RoundList^.Next //////////////////////////////////
end;
end.
unit Unit16; //Тест
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm16 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
Button1: TButton;
RadioGroup1: TRadioGroup;
Button2: TButton;
procedure RadioGroup1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form16: TForm16;
NumberQuestion: Integer = 0;
NumberTrueAnswer: Integer = 0;
ff: Boolean = True;
implementation
uses Unit1, Un18_Lab;
{$R *.DFM}
procedure TForm16.RadioGroup1Click(Sender: TObject);
begin
Button1.Enabled := True;
Button1.SetFocus;
end;
procedure TForm16.Button2Click(Sender: TObject);
begin
Form16.Hide;
Form1.Show;
end;
procedure TForm16.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
Button1.Enabled := False;
Inc(NumberQuestion);
case NumberQuestion of
1:
begin
if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Однонаправленный список - это ...');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('Список, элементы которого имеют связь со следующим и предыдущим элементом');
RadioGroup1.Items.Add('Список, элементы которого имеют связь со следующим элементом');
RadioGroup1.Items.Add('Список, элементы которого не имеют связи');
end;
2:
begin
if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Если элемент содержит ссылки на следующий и предыдущий элемент, то это ...');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('однонаправленный список');
RadioGroup1.Items.Add('двунаправленный список');
RadioGroup1.Items.Add('очередь');
RadioGroup1.Items.Add('стек');
RadioGroup1.Items.Add('дек');
RadioGroup1.Items.Add('циклический список');
end;
3:
begin
if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Куда добавляется элемент в двунаправленный список?');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('В начало');
RadioGroup1.Items.Add('В конец');
RadioGroup1.Items.Add('В любое другое место');
end;
4:
begin
if RadioGroup1.ItemIndex = 2 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Чем отличается однонаправленный список от двунаправленного?');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('Существует связь с предыдущим элементом');
RadioGroup1.Items.Add('Не существует связь с предыдущим элементом');
RadioGroup1.Items.Add('Не отличаются');
end;
5:
begin
if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Какой элемент считывается из стека?');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('Последний');
RadioGroup1.Items.Add('Любой');
RadioGroup1.Items.Add('Первый');
end;
6:
begin
if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Чем отличается дек от стека?');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('Добавление в любом место. Удаление из начала');
RadioGroup1.Items.Add('Добавление в начало. Удаление из любого места');
RadioGroup1.Items.Add('Все включения исключения происходят на обоих его концах');
end;
7:
begin
if RadioGroup1.ItemIndex = 2 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Откуда считывается элемент из очереди?');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('С конца');
RadioGroup1.Items.Add('С начала');
RadioGroup1.Items.Add('Из люього места');
end;
8:
begin
if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Куда добавляется элемент в стек?');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('В конец');
RadioGroup1.Items.Add('В начало');
RadioGroup1.Items.Add('В любое место');
end;
9:
begin
if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Какую ссылку содержит последний элемент циклического списка?');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('На первый элемент');
RadioGroup1.Items.Add('На предыдущий элемент');
RadioGroup1.Items.Add('NIL');
end;
10:
begin
if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Если все включения и исключения происходят на одном конце списка, то это ...');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('однонаправленный список');
RadioGroup1.Items.Add('двунаправленный список');
RadioGroup1.Items.Add('очередь');
RadioGroup1.Items.Add('стек');
RadioGroup1.Items.Add('дек');
RadioGroup1.Items.Add('циклический список');
end;
11:
begin
if RadioGroup1.ItemIndex = 3 then Inc(NumberTrueAnswer);
Memo1.Lines.Add('Если последний элемент имеет ссылку на первый элемент, то это ...');
RadioGroup1.Items.Clear;
RadioGroup1.Items.Add('однонаправленный список');
RadioGroup1.Items.Add('двунаправленный список');
RadioGroup1.Items.Add('очередь');
RadioGroup1.Items.Add('стек');
RadioGroup1.Items.Add('дек');
RadioGroup1.Items.Add('циклический список');
end;
12:
begin
if RadioGroup1.ItemIndex = 5 then Inc(NumberTrueAnswer);
Button1.Hide;
if NumberTrueAnswer >= 10 then ShowMessage('Ваша оценка - ОТЛИЧНО!');
if (NumberTrueAnswer >= 8) and (NumberTrueAnswer < 10) then ShowMessage('Ваша оценка - ХОРОШО!');
if (NumberTrueAnswer >= 6) and (NumberTrueAnswer < 8) then ShowMessage('Ваша оценка - ТРИ!');
if NumberTrueAnswer < 6 then
begin
ShowMessage('Тебе однозначно нужно почитать теорию. Твоя оценка - Два!!!');
ff := False;
end;
Form16.Hide;
Form1.Show;
if not ff then Form18.Show;
end;
end;
end;
procedure TForm16.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form16.Hide;
Form1.Show;
if not ff then Form18.Show;
end;
end.