44905 (Линейные списки. Стек. Дек. Очередь), страница 7

2016-07-31СтудИзба

Описание файла

Документ из архива "Линейные списки. Стек. Дек. Очередь", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "44905"

Текст 7 страницы из документа "44905"

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;

begin

GetQueue(QueueBegin);

if QueueBegin <> nil then

begin

i := QueuePos;

while (Edit3.Text[i] <> ' ') and (i <= Length(Edit3.Text)) do Inc(i);

Inc(i);

s1 := '';

s2 := '';

for a := 1 to QueuePos - 1 do s1 := s1 + Edit3.Text[a];

for a := i to Length(Edit3.Text) do s2 := s2 + Edit3.Text[a];

Edit3.Text := s1 + s2;

end;

end;

procedure TForm1.Button9Click(Sender: TObject);

begin

Form4.Show;

end;

procedure TForm1.Button14Click(Sender: TObject);

var

i, a: Integer;

s1, s2: string;

begin

GetStack(Stack);

i := StackPos;

while (Edit4.Text[i] <> ' ') and (i <= Length(Edit4.Text)) do Inc(i);

Inc(i);

s1 := '';

s2 := '';

for a := 1 to StackPos - 1 do s1 := s1 + Edit4.Text[a];

for a := i to Length(Edit4.Text) do s2 := s2 + Edit4.Text[a];

Edit4.Text := s1 + s2;

end;

procedure TForm1.Button13Click(Sender: TObject);

begin

Form6.Show;

end;

procedure TForm1.Button17Click(Sender: TObject);

begin

Form7.Show;

end;

procedure TForm1.Button18Click(Sender: TObject);

begin

Form8.Show;

end;

procedure TForm1.Button26Click(Sender: TObject);

begin

StatusBar1.Panels[0].Text := 'Нельзя !!!';

Memo1.Lines.Add('В цикл. списке нельзя перемещаться назад, т.к. по сути цикл. список это однонаправ. список и следовательно связь существует только в одну сторону;');

end;

procedure TForm1.Button25Click(Sender: TObject);

var

qRoundList: List;

i, j: Integer;

Count: Integer;

begin

StatusBar1.Panels[0].Text := '';

qRoundList := RoundList^.Next;

// Подсчет кол-ва елементов в списке

Count := 1;

while qRoundList <> RoundList do

begin

Inc(Count);

qRoundList := qRoundList^.Next;

end;

qRoundList := RoundList;

i := 0;

while i <> RoundListPos do

begin

qRoundList := qRoundList^.Next;

Inc(i);

end;

if qRoundList <> nil then

begin

if qRoundList^.Next <> nil then Inc(RoundListPos);

if RoundListPos > Count - 1 then RoundListPos := 0;

i := 0;

j := 0;

while i < RoundListPos do

begin

Inc(j);

if Edit7.Text[j] = ' ' then Inc(i);

end;

if RoundListPos = 0 then j := -1;

Image7.Left := Round(9 + (j + 1) * 7.5);

end;

end;

procedure TForm1.Button23Click(Sender: TObject);

begin

Form9.Show;

end;

procedure TForm1.Button24Click(Sender: TObject);

begin

if RoundList <> nil then

begin

DeleteFromRoundList(RoundListPos);

if RoundList <> nil then DoNewEditRoundList;

end

else

begin

Edit7.Text := '';

ShowMessage('Циклический список пуст');

Button24.Enabled := False;

Button25.Enabled := False;

Button26.Enabled := False;

Image7.Hide;

end;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

AboutBox.Visible := True;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

Form10.Visible := True;

end;

procedure TForm1.Button27Click(Sender: TObject);

begin

Form11.Show;

end;

procedure TForm1.Button30Click(Sender: TObject);

begin

Form12.Show;

end;

procedure TForm1.Button29Click(Sender: TObject);

begin

Form13.Show;

end;

procedure TForm1.Button31Click(Sender: TObject);

begin

Form14.Show;

end;

procedure TForm1.Button32Click(Sender: TObject);

begin

Form15.Show;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Form1.Hide;

Form16.Show;

N8.Enabled := False;

end;

procedure TForm1.N11Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(' Лабораторная работа №1.');

Memo1.Lines.Add(' "Списки"');

Memo1.Lines.Add('______________________________________________________________');

Memo1.Lines.Add('1. Нажмите кнопку "Теория" для получения информации о списках.');

Memo1.Lines.Add(' Внимательно изучите теоретический материал.');

Memo1.Lines.Add('');

Memo1.Lines.Add('2. На листе формата А4, опишите ход проделанной работы.');

Memo1.Lines.Add(' Ответьте на поставленные вопросы.');

Memo1.Lines.Add(' 1) Что такое линейный список?');

Memo1.Lines.Add(' 2) Какие операции можно выполнить с линейным списком?');

Memo1.Lines.Add(' 3) Какие существую еще списки?');

Memo1.Lines.Add(' 4) Что представляет из себя связанное распределение?');

Memo1.Lines.Add(' 5) Чем отличается связанное распределение от последовательного?');

Memo1.Lines.Add(' 6) Что такое динамические переменные? Функции new и nil.');

end;

procedure TForm1.Button33Click(Sender: TObject);

begin

Form17.Show;

end;

procedure TForm1.N21Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(' Лабораторная работа №2.');

Memo1.Lines.Add(' "Однонаправленный и двунаправленный список"');

Memo1.Lines.Add('______________________________________________________________');

Memo1.Lines.Add('1. Нажмите кнопку "Теория" для однонаправленного и ');

Memo1.Lines.Add(' двунаправленного списка.');

Memo1.Lines.Add(' Внимательно изучите теоретический материал.');

Memo1.Lines.Add('');

Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');

Memo1.Lines.Add(' Кнопки "<>" служат для перемещения курсора по списку.');

Memo1.Lines.Add(' а) Переместитесь влево до 3, 5 и последнего элемента;');

Memo1.Lines.Add(' б) Переместитесь вправо до первого элемента (см. коментарии);');

Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в список.');

Memo1.Lines.Add(' а) Добавьте после 3, 5, 7 элемента цифру 33 в обоих списках;');

Memo1.Lines.Add(' б) Добавте 1-м и 3-м элементом цифру 55 в двунаправленном списке;');

Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из списка.');

Memo1.Lines.Add(' а) Удалите 3, 5, 7 элементы в однонаправленном списке;');

Memo1.Lines.Add(' б) Удалите последний, 1 и 3 элементы в двунаправленном;');

Memo1.Lines.Add('');

Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');

Memo1.Lines.Add(' Ответьте на поставленные вопросы:');

Memo1.Lines.Add(' 1) Обратите внимание как перемещается курсор?');

Memo1.Lines.Add(' 2) Чем отличается однонаправленный и двунаправленный списки?');

Memo1.Lines.Add(' 3) Можно ли добавить элемент в любое место списка?');

Memo1.Lines.Add(' 4) Можно ли удалить любой элемент из списка?');

end;

procedure TForm1.N31Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(' Лабораторная работа №3.');

Memo1.Lines.Add(' "Циклический список"');

Memo1.Lines.Add('______________________________________________________________');

Memo1.Lines.Add('1. Нажмите кнопку "Теория" для циклического списка?');

Memo1.Lines.Add(' Внимательно изучите теоретический материал.');

Memo1.Lines.Add('');

Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');

Memo1.Lines.Add(' Кнопки "<>" служат для перемещения курсора по списку.');

Memo1.Lines.Add(' а) Переместитесь вправо до 3, 5, последнего, первого элемента;');

Memo1.Lines.Add(' б) Переместитесь влево (см. коментарии);');

Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в список.');

Memo1.Lines.Add(' а) Добавьте 3, 5, 1-м элементами число 44;');

Memo1.Lines.Add(' б) Добавьте после 2, 4, 1-го элемента число 0;');

Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из списка.');

Memo1.Lines.Add(' Удалите 3, 5, 1, 4 элементы;');

Memo1.Lines.Add('');

Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');

Memo1.Lines.Add(' Ответьте на поставленные вопросы:');

Memo1.Lines.Add(' 1) Обратите внимание как перемещается курсор?');

Memo1.Lines.Add(' 2) Какую ссылку имеет последний элемент циклического списка?');

Memo1.Lines.Add(' 3) Что называется головой и хвостом списка?');

end;

procedure TForm1.N41Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(' Лабораторная работа №4.');

Memo1.Lines.Add(' "Очередь"');

Memo1.Lines.Add('______________________________________________________________');

Memo1.Lines.Add('1. Нажмите кнопку "Теория" для очереди.');

Memo1.Lines.Add(' Внимательно изучите теоретический материал.');

Memo1.Lines.Add('');

Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');

Memo1.Lines.Add(' Кнопки "<>" служат для перемещения курсора по очереди.');

Memo1.Lines.Add(' а) Переместитесь вправо до 3 элемента;');

Memo1.Lines.Add(' б) Переместитесь влево (см. коментарии);');

Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в очередь.');

Memo1.Lines.Add(' а) Добавьте 1, 4, 5-м элементами число 99;');

Memo1.Lines.Add(' б) Добавьте последним число 999;');

Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из очереди.');

Memo1.Lines.Add(' Удалите 1, 2, 3 элементы;');

Memo1.Lines.Add('');

Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');

Memo1.Lines.Add(' Ответьте на поставленные вопросы:');

Memo1.Lines.Add(' 1) Как удаляется и добавляется элементы в очереди?');

Memo1.Lines.Add(' 2) В чем различие и сходство очереди и однонаправленного списка?');

Memo1.Lines.Add(' 3) Что называется головой и хвостом очереди?');

Memo1.Lines.Add(' 4) Как располагаются элементы в очереди?');

end;

procedure TForm1.N51Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(' Лабораторная работа №5.');

Memo1.Lines.Add(' "Стек"');

Memo1.Lines.Add('______________________________________________________________');

Memo1.Lines.Add('1. Нажмите кнопку "Теория" для стека.');

Memo1.Lines.Add(' Внимательно изучите теоретический материал.');

Memo1.Lines.Add('');

Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');

Memo1.Lines.Add(' Кнопки "<>" служат для перемещения курсора в стеке.');

Memo1.Lines.Add(' а) Переместитесь вправо до 4 элемента;');

Memo1.Lines.Add(' б) Переместитесь влево (см. коментарии);');

Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в стек.');

Memo1.Lines.Add(' Добавьте 1, 3, 5 элементами число 22;');

Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из стека.');

Memo1.Lines.Add(' Удалите 1, 3, 5, последний элементы;');

Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');

Memo1.Lines.Add(' Ответьте на поставленные вопросы:');

Memo1.Lines.Add(' 1) Как удаляется и добавляется элементы в стек?');

Memo1.Lines.Add(' 2) Приведи примеры стека на практике?');

end;

procedure TForm1.N61Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(' Лабораторная работа №6.');

Memo1.Lines.Add(' "Дек"');

Memo1.Lines.Add('______________________________________________________________');

Memo1.Lines.Add('1. Нажмите кнопку "Теория" для дека.');

Memo1.Lines.Add(' Внимательно изучите теоретический материал.');

Memo1.Lines.Add('');

Memo1.Lines.Add('2. Нажмите кнопку "Обновить" для формирования списков.');

Memo1.Lines.Add(' Кнопки "<>" служат для перемещения курсора в деке.');

Memo1.Lines.Add(' а) Переместитесь влево на 2 элемента;');

Memo1.Lines.Add(' б Переместитесь вправо на 4 элемента;');

Memo1.Lines.Add(' Кнопка "Добавить" служит для добавления элемента в дек.');

Memo1.Lines.Add(' а) Добавьте 1, 3 элементом число 11;');

Memo1.Lines.Add(' б) Добавьте 5, 6 элементом число 88;');

Memo1.Lines.Add(' Кнопка "Удалить" служит для удаления элемента из дека.');

Memo1.Lines.Add(' а) Удалите 2, 4 элементы;');

Memo1.Lines.Add(' б) Добавте 6, 7 элементы;');

Memo1.Lines.Add('');

Memo1.Lines.Add('3. На листе формата А4, опишите ход проделанной работы.');

Memo1.Lines.Add(' Ответьте на поставленные вопросы:');

Memo1.Lines.Add(' 1) Как удаляется и добавляется элементы в дек?');

Memo1.Lines.Add(' 2) В чем сходны и различны дек, стек и двунаправленный список?');

end;

procedure TForm1.N71Click(Sender: TObject);

begin

Memo1.Clear;

Memo1.Lines.Add(' Лабораторная работа №7.');

Memo1.Lines.Add(' "Тест"');

Memo1.Lines.Add('______________________________________________________________');

Memo1.Lines.Add('1. Повторите весь теоретический материал.');

Memo1.Lines.Add('');

Memo1.Lines.Add('2. Поработайте с демонстрационной программой.');

Memo1.Lines.Add('');

Memo1.Lines.Add('3. Запустите тест (сервис\тест или Ctrl + T).');

Memo1.Lines.Add(' Ответьте на поставленные вопросы теста.');

Memo1.Lines.Add('');

Memo1.Lines.Add('4. Результаты теста сообщить преподавателю.');

end;

procedure TForm1.N9Click(Sender: TObject);

begin

Form18.Show;

end;

end.

unit Unit2; //Формирование списков

interface

uses SysUtils, Windows, Dialogs;

type

List = ^Spisok; //Однонаправленный

Spisok = record

Info: Integer;

Next: List;

end;

ListTwo = ^SpisokTwo; //Двунаправленный

SpisokTwo = record

Info: Integer;

Next: ListTwo;

Prev: ListTwo;

end;

procedure CreateLists;

procedure AddToList(X: Integer; var PointerEndList: List);

procedure AddToListAfterPos(X: Integer; Position: Integer);

procedure DeleteFromList(Position: Integer);

procedure AddToListTwo(X: Integer; var PointerEndListTwo: ListTwo);

procedure AddToListTwoAfterPos(X: Integer; Position: Integer);

procedure DeleteFromListTwo(Position: Integer);

procedure AddToQueue(X: Integer; var PointerEndQueue: List);

procedure AddToEndQueue(X: Integer);

function GetQueue(var PointerBegin: List): Integer;

procedure AddToStack(X: Integer; var PointerStack: List);

function GetStack(var PointerStack: List): Integer;

procedure AddToDeck(X: Integer;

var PointerDeckBegin, PointerDeckEnd: ListTwo; Flag: Integer);

function GetDeckBegin(var PointerDeckBegin: ListTwo): Integer;

function GetDeckEnd(var PointerDeckEnd: ListTwo): Integer;

procedure DestroyList(PointerBegin: List);

procedure DestroyListTwo(PointerBegin: ListTwo);

procedure AddToRoundList(X: Integer; var PointerRoundList: List);

procedure DeleteFromRoundList(Position: Integer);

procedure DestroyRoundList(var PointerRoundList: List);

implementation

uses Unit1;

procedure DestroyList(PointerBegin: List);

var

q: List;

begin

while PointerBegin <> nil do

begin

q := PointerBegin;

PointerBegin := PointerBegin^.Next;

if q <> nil then Dispose(q);

end;

end;

procedure DestroyListTwo(PointerBegin: ListTwo);

var

q: ListTwo;

begin

while PointerBegin <> nil do

begin

q := PointerBegin;

PointerBegin := PointerBegin^.Next;

if q <> nil then Dispose(q);

end;

end;

procedure DestroyRoundList(var PointerRoundList: List);

var

q, t: List;

begin

q := PointerRoundList^.Next;

PointerRoundList^.Next := nil;

while q <> nil do

begin

t := q;

q := q^.Next;

if t <> nil then Dispose(t);

end;

PointerRoundList := nil;

end;

procedure AddToList(X: Integer; var PointerEndList: List); //Добавить элемент в

//конец списка (PointerEnd - указатель на последний элемент списка)

begin

if PointerEndList = nil then // Если первый элемент еще не существует

begin

New(PointerEndList);

PointerEndList^.Info := X;

PointerEndList^.Next := nil;

end

else

begin

New(PointerEndList^.Next);

PointerEndList := PointerEndList^.Next;

PointerEndList^.Info := X;

PointerEndList^.Next := nil;

end;

end;

procedure AddToListAfterPos(X: Integer; Position: Integer);

var //Добавить элемент в список после Position

i: Integer;

q, qNew: List;

begin

if Position = 0 then // Если позиция = 0, то добавляем в начало

begin

New(qNew);

qNew^.Info := X;

qNew^.Next := ListBegin;

ListBegin := qNew;

end

else

begin

q := ListBegin;

i := 0;

while (i < Position) and (q <> nil) do // Ищем элемент после которого

// нужно вставить

begin

q := q^.Next;

Inc(i);

end;

if q <> nil then // Если элемент существует то вставляем

begin

New(qNew);

qNew^.Info := X;

qNew^.Next := q^.Next;

q^.Next := qNew;

end

else ShowMessage('Элемент, после которого хотите вставить, удален');

end;

end;

procedure AddToRoundList(X: Integer; var PointerRoundList: List);

var qRound: List;

begin

if PointerRoundList = nil then

begin

New(PointerRoundList);

PointerRoundList^.Info := X;

PointerRoundList^.Next := PointerRoundList;

RoundList := PointerRoundList;

end

else

begin

New(qRound);

qRound^.Info := X;

qRound^.Next := PointerRoundList^.Next;

PointerRoundList^.Next := qRound;

end;

PointerRoundList := PointerRoundList^.Next;

end;

procedure DeleteFromRoundList(Position: Integer);

var

q, h: List;

i: Integer;

begin

if RoundList^.Next = RoundList then //один элемент в списке

begin

if RoundList <> nil then Dispose(RoundList);

RoundList := nil;

end

else // не один элемент в списке

begin

i := 1;

q := RoundList;

while i < RoundListPos do

begin

Inc(i);

q := q^.Next;

end;

if i <> 1 then

begin

h := q^.Next;

q^.Next := h^.Next;

if h <> nil then Dispose(h);

end

else

begin

q := RoundList^.Next;

while q^.Next <> RoundList do q := q^.Next;

h := q^.Next;

q^.Next := h^.Next;

if h <> nil then Dispose(h);

RoundList := q^.Next;

end;

end;

if RoundList <> nil then

begin

q := RoundList^.Next;

i := 1;

while q <> RoundList do

begin

Inc(i);

q := q^.Next;

end;

if i = RoundListPos then

begin

RoundListPos := 0;

Form1.Image7.Left := 9;

end;

end;

end;

procedure DeleteFromList(Position: Integer); //Удаляет элемент под

//номером Position

var

i: Integer;

q, r: List;

begin

q := ListBegin;

if q <> nil then // Если список не пуст, то

begin

if Position = 0 then //Если позиция = 0, то удаляем первый элемент

begin

ListBegin := q^.Next;

if q <> nil then Dispose(q);

end

else

begin

i := 0;

while (i < Position - 1) and (q <> nil) do //Ищем элемент после

//которого нужно удалить

begin

q := q^.Next;

Inc(i);

end;

r := q^.Next;

if r <> nil then //Если удаляемый элемент существует, то удаляем его

begin

q^.Next := r^.Next;

if r <> nil then Dispose(r);

end

else ShowMessage('Элемент уже не существует');

end;

end

else

begin

ShowMessage('Список пуст');

Form1.Image1.Hide;

end;

end;

procedure AddToListTwo(X: Integer; var PointerEndListTwo: ListTwo); //Добавить элемент в

//конец дв-списка (PointerEnd - указатель на последний элемент списка)

begin

if PointerEndListTwo = nil then //Если список еще не существует или пуст,

//добавляем в начало

begin

New(PointerEndListTwo);

PointerEndListTwo^.Info := X;

PointerEndListTwo^.Next := nil;

PointerEndListTwo^.Prev := nil;

end

else

begin

New(PointerEndListTwo^.Next);

PointerEndListTwo := PointerEndListTwo^.Next;

PointerEndListTwo^.Info := X;

PointerEndListTwo^.Next := nil;

PointerEndListTwo^.Prev := nil;

end;

end;

procedure AddToListTwoAfterPos(X: Integer; Position: Integer);

var //Добавить элемент в двунап. список после Position

i: Integer;

q, qNew: ListTwo;

begin

if Position = 0 then //Если позиция = 0, вставляем в начало

begin

New(qNew);

qNew^.Info := X;

qNew^.Next := ListTwoBegin;

ListTwoBegin := qNew;

end

else

begin

q := ListTwoBegin;

i := 0;

while (i < Position) and (q <> nil) do //Ищем элемент после которого

//нужно вставить

begin

q := q^.Next;

Inc(i);

end;

if q <> nil then // Если элемент существует то вставляем

begin

New(qNew);

qNew^.Info := X;

qNew^.Next := q^.Next;

qNew^.Prev := q;

q^.Next := qNew;

end

else ShowMessage('Элемент, после которого хотите вставить, удален');

end;

end;

procedure DeleteFromListTwo(Position: Integer); //Удаляет элемент

//под номером Position

var

i: Integer;

q, r: ListTwo;

begin

q := ListTwoBegin;

if q <> nil then //Если удаляемый элемент существует, то

begin

if Position = 0 then //Если позиция = 0, то удаляем первый элемент

begin

ListTwoBegin^.Prev := nil;

ListTwoBegin := q^.Next;

if q <> nil then Dispose(q);

end

else

begin

i := 0;

while (i < Position - 1) and (q <> nil) do //Ищем элемент

// после которого нужно удалить

begin

q := q^.Next;

Inc(i);

end;

r := q^.Next;

if r <> nil then //Если он существует, то удаляем его

begin

if r^.Next <> nil then r^.Next^.Prev := q;

q^.Next := r^.Next;

if r <> nil then Dispose(r);

end

else ShowMessage('Элемент уже не существует');

end;

end

else

begin

ShowMessage('Список пуст');

Form1.Image2.Hide;

end;

end;

procedure AddToQueue(X: Integer; var PointerEndQueue: List); //Добавить элемент

//в конец очереди (PointerEnd - указатель на последний элемент очереди)

begin

if PointerEndQueue = nil then //Если очередь еще не существует или пуста

//добавляем в начало

begin

New(PointerEndQueue);

PointerEndQueue^.Info := X;

PointerEndQueue^.Next := nil;

end

else

begin

New(PointerEndQueue^.Next);

PointerEndQueue := PointerEndQueue^.Next;

PointerEndQueue^.Info := X;

PointerEndQueue^.Next := nil;

end;

end;

function GetQueue(var PointerBegin: List): Integer; //ф-ия получает элемент из

// очереди и возвращает указатель на начало очереди

var

rQueue: List;

begin

rQueue := PointerBegin;

if rQueue <> nil then //Если очередь не пуста

begin

PointerBegin := PointerBegin^.Next;

Result := rQueue^.Info;

if rQueue <> nil then Dispose(rQueue);

end

else

begin

ShowMessage('Очередь пуста');

Form1.Edit3.Text := '';

Form1.Button10.Enabled := False;

Form1.Button11.Enabled := False;

Form1.Button12.Enabled := False;

Form1.Image3.Hide;

end;

end;

procedure AddToEndQueue(X: Integer);

var

Info: Integer;

rQueue, qQueue: List;

FlagList: Boolean;

begin

FlagList := True; //Для выделения первого элемента

qQueue := nil;

rQueue := nil;

while QueueBegin <> nil do //Ищем указатель на последний элемент очереди

begin

Info := GetQueue(QueueBegin);

AddToQueue(Info, rQueue); //Формируем новую очередь из элементов старой

//очереди, чтобы не потерять ее

if FlagList then /////////////////////////////////////

begin // //

qQueue := rQueue; // формируем указатель на очередь //

FlagList := False; // //

end; // //////////////////////////////////

end;

AddToQueue(X, rQueue);

if qQueue <> nil then QueueBegin := qQueue // определяем указатель на очередь

else QueueBegin := rQueue; //////////////////////////////////

end;

procedure AddToStack(X: Integer; var PointerStack: List); //Добавить элемент в

//стек (PointerStack - указатель на стек)

var

Stacks: List;

begin

if PointerStack = nil then //Если стек пуст, то формируем его

begin

New(PointerStack);

PointerStack^.Info := X;

PointerStack^.Next := nil;

end

else //иначе добавляем элемент

begin

New(Stacks);

Stacks^.Info := X;

Stacks^.Next := PointerStack;

PointerStack := Stacks;

end;

end;

function GetStack(var PointerStack: List): Integer; //ф-ия получает элемент из

// стека и возвращает указатель на стек

var

rStack: List;

begin

rStack := PointerStack;

if rStack <> nil then //Если стек еще не пуст

begin

PointerStack := PointerStack^.Next;

Result := rStack^.Info;

if rStack <> nil then Dispose(rStack);

end

else

begin

ShowMessage('Стек пуст');

Form1.Button14.Enabled := False;

Form1.Image4.Hide;

end;

end;

procedure AddToDeck(X: Integer; var PointerDeckBegin, PointerDeckEnd: ListTwo;

Flag: Integer); //Добавить элемент в дек

//PointerDeckBegin - указатель на начало дека

//PointerDeckEnd - указатель на конец дека

var

Decks: ListTwo;

begin

if PointerDeckBegin = nil then //Если дек пуст, то формируем его

begin

New(PointerDeckBegin);

PointerDeckBegin^.Info := X;

PointerDeckBegin^.Next := nil;

PointerDeckBegin^.Prev := nil;

PointerDeckEnd := PointerDeckBegin;

end

else //иначе добавляем элемент

begin

if Flag = 0 then //добавляем в начало

begin

New(Decks);

Decks^.Info := X;

Decks^.Next := PointerDeckBegin;

Decks^.Prev := nil;

PointerDeckBegin^.Prev := Decks;

PointerDeckBegin := Decks;

end

else //добавлям в конец

begin

New(Decks);

Decks^.Info := X;

Decks^.Next := nil;

Decks^.Prev := PointerDeckEnd;

PointerDeckEnd^.Next := Decks;

PointerDeckEnd := Decks;

end;

end;

end;

function GetDeckBegin(var PointerDeckBegin: ListTwo): Integer;

//ф-ия получает элемент из начала дека и возвращает указатель на начало дека.

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.

82


Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее