Смекни!
smekni.com

Линейные списки. Стек. Дек. Очередь (стр. 10 из 10)

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.