![]() |
|
|
Реферат: Линейные списки. Стек. Дек. Очередь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. |
![]() |
||
НОВОСТИ | ![]() |
![]() |
||
ВХОД | ![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |