Линейные списки. Стек. Дек. Очередь
	
	
    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; 
begin 
  GetQueue(QueueBegin); 
  if QueueBegin <> nil then 
    begin 
      i := QueuePos; 
      while (Edit3.Text[i] <> ' ') and (i  ' ') and (i  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;            // 
  [pic]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. 
----------------------- 
                                      4 
                                      2 
                                      1 
                                      3 
                                      5 
                                  Включить 
                                  Исключить 
                                    Конец 
                                   Третий 
                                   Второй 
                                      1 
                                      3 
                                      5 
                                      4 
                                      2 
                                      2 
                                      1 
                                      3 
                                      5 
                                      N 
                                      4 
                           Включить или исключить 
                                    Новый 
                                      4 
                                      3 
                                      2 
                                      1 
                                Третий сверху 
                                    Новый 
                                    Конец 
                                   Третий 
                                   Второй 
                                   Начало 
                                     Низ 
                                    Верх 
                           Включить или исключить 
                                Второй сверху 
       Рис. 1   Стек, представленный в виде железнодорожного разъезда 
                           Включить или исключить 
                                Правый конец 
                                Второй справа 
                                Второй слева 
                                 Левый конец 
                                      N 
                                      N 
                                      4 
                                      3 
                                      2 
                                      1 
                                      Р 
                                      * 
                                      Р 
                             Указываемый объект 
                                      * 
                                 Содержимое 
                                    Адрес 
                           Связанное распределение 
                                 Содержимое 
                                    Адрес 
      Последовательное распределение 
                                     B: 
                                     C: 
                                     D: 
                                     E: 
                                     Л: 
                                      B 
                                      C 
                                      D 
                                      E 
                                      Л 
                                  Элемент 1 
                                  Элемент 2 
                                  Элемент 3 
                                  Элемент 4 
                                  Элемент 5 
                                   L0 + c: 
                                  L0 + 2c: 
                                  L0 + 3c: 
                                  L0 + 4c: 
                                  L0 + 5c: 
                                  Элемент 1 
                                  Элемент 2 
                                  Элемент 3 
                                  Элемент 4 
                                  Элемент 5 
                                    FIRST 
                                  Элемент 5 
                                  Элемент 4 
                                  Элемент 3 
                                  Элемент 2 
                                  Элемент 1 
                                Элемент [pic] 
                                    FIRST 
                                  Элемент 5 
                                  Элемент 4 
                                  Элемент 3 
                                  Элемент 2 
                                  Элемент 1 
                                    LINK 
                                    INFO 
                                     PTR 
                                Голова списка 
а 
а 
а 
а 
… 
nil 
                                      3 
                                      1 
                                      2 
                                      4 
                                      5 
                                   Начало 
      ??????????????????????????????????????????????????????????????????????? 
???????????????????????????????????????????????????????????????????????????? 
????????????????????? 
Страницы: 1, 2, 3 
	
	
					
							 |