Разработка программного средства по теме «Динамические типы данных»
После загрузки демонстрационной программы перед вами появится вот такое окно. Это главная форма демонстрационной программы. Для формирования списков нажмите кнопку «Обновить». Теперь списки сформированы и готовы к работе. Списки содержат целые положительные числа. Указатели указывают на начало списка. С помощью кнопок «<<» «>>» можно перемещать указатель по списку. С помощью кнопки «Добавить» вы можете добавить элемент в список. При нажатии на кнопку «Добавить» всплывает окно «Добавление нового элемента», в котором вы указываете какой элемент хотите добавить и нажимаете кнопку «Ok».
При нажатии на кнопку «Удалить» удаляется элемент из списка. В однонаправленном, двунаправленном и циклическом списках удаляется тот элемент, на который указывает указатель. В очереди и стеке удаляется первый. При удалении элемента из дека появляется окно «Удаление элемента», в котором вам предлагается выбрать откуда удалять элемент из начала или с конца. При нажатии на кнопку теория (для очереди) открывается окно «Очередь», котором изложена теория и даны примеры. Аналогично для остальных списков. Для более удобной работы с учащимися в программе предусмотрены лабораторные работы (Ctrl + L или Сервис \ Лабораторные работы). Если вы выберете все то откроется окно «Лабораторные работы», в котором даны сразу все работы и задания. Перед вами 4 лабораторная работа на список «Очередь». Если вы будете выбирать каждую в отдельности то они будут отображаться в комментариях на главной форме. Помощь можно вызвать (Справка\Помощь или F1). После проведения всех лабораторных работ учащимся предлагается ответить на вопросы теста, за который они получают оценку. При запуске теста (Сервис\Тест или Ctrl + T) открывается окно «Тест». Сверху вопрос, ниже варианты ответов. После выбора ответа кнопка «Далее» становится активной, нажав на нее появляется следующий вопрос. После выполнения теста выдается оценка, если неудовлетворительная то открывается окно «Лабораторные работы». Примечание: после того как тест запустился вызов теста становится неактивным т.е. второй раз учащийся запустить тест не сможет. Закрыть программу можно нажатием на кнопку «Закрыть» или F10. Заключение В квалификационной работе мы попытались раскрыть более полно и наглядно понятие линейного списка, однонаправленного и двунаправленного списков, стека, дека и очереди. Сформировать и закрепить познавательный интерес к данной теме у учащихся. Выявлять и развивать творческие способности в использовании полученного навыка при программировании. Главной целью нашей работы было знакомство с теоретическим материалом, касающийся информационных структур и разработка программного средства «Динамические типы данных». Достижением этой цели и согласно поставленной гипотезы определялись следующие задачи: 1. Изучить литературу по теме динамические информационные структуры, педагогическую и методическую по теме исследования; 2. Проанализировать виды динамических информационных структур; 3. Разработать факультатив по теме исследования; 4. Разработать программный продукт по теме исследования. Все поставленные цели и задачи реализованы в данной квалификационной работе. Изучено понятие линейного списка, всевозможные операции с этим списком, определяются основные термины и понятия. Кроме того, рассматривается более конкретно и полно каждый список в отдельности и показывается целесообразность использования списков в тех или иных случаях. Для каждого списка приводятся жизненные примеры для простоты восприятия. Дается понятие связанного распределения и кратко изучается понятие динамических информационной структуры, которая позволяют применить полученные знания при программировании. Также рассматривается преимущество и недостатки двух форм представления информации: связанное и последовательное. Далее следует методическая часть, в которой представлена расчасовка факультатива, его структура, и поставлены цели и задачи факультатива. Приводится для примера три конспекта уроков по теме «Очередь», «Стек» и «Тест». И последнее это руководство пользователя, в котором дается описания работы с демонстрационной программой. Литература 1. Айен Синклер «Большой толковый словарь компьютерных терминов», М.: 1998 г. 2. Архангельский А. Я. «Программирование в Delphi 4», М.: 1999 г. 3. Архангельский А. Я. «Программирование в Delphi 5», М.: 2000 г. 4. Вирт Н. «Алгоритмы и структуры данных», Москва Изд. Мир, 1989 г. 5. Гудмэн Д. «Управление памятью для всех», Киев 1995 г. 6. Зубов В. С. «Справочник программиста», М.: 1999 г. 7. Кнут Д. «Искусство программирования для ЭВМ», т.1 Основные алгоритмы, Изд. Мир М.: 1976 г. 8. Кормен Т. и другие «Алгоритмы построения и анализ», М.: 2000 г. 9. Подласый И. П. Учебник для студентов высших педагогических учебных заведений, М.: Просвещение 1996 г. 10. Усова А. В. «Формирование у школьников понятий в процессе обучения», М.: Педагогика, 1986 г. Приложение 1. (Листинг программы) В листинге приведены только три основных модуля. В первом модуле описан интерфейс программы, обработка всех событий. Второй модуль, отвечай за формирование списков и выполнения всех операций со списками. У второго модуля нет формы. Третий модуль – это тест, служит для проверки и оценивания учащихся. В остальных, не приведенных модулях, описаны: формы для добавления элемента в список, лабораторные работы, теоретический материал с примерами, помощь и информация о программе. unit Unit1; // Интерфейс interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8, Unit9, Menus, Unit11, Unit12, Unit13, Unit14, Unit15, Unit16, Unit17;
type TForm1 = class(TForm) Panel1: TPanel; Edit1: TEdit; Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Panel2: TPanel; Label2: TLabel; Edit2: TEdit;
Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Panel3: TPanel; Label3: TLabel; Edit3: TEdit; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; Panel4: TPanel; Label4: TLabel; Edit4: TEdit; Button13: TButton; Button14: TButton; Button15: TButton; Button16: TButton; Panel5: TPanel; Label5: TLabel; Edit5: TEdit; Button17: TButton; Button18: TButton; Button19: TButton; Button20: TButton; Panel6: TPanel; Edit6: TEdit; Label6: TLabel; Button21: TButton; StatusBar1: TStatusBar; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Button22: TButton; Memo1: TMemo; Label7: TLabel; Image6: TImage; Bevel1: TBevel; Panel7: TPanel; Button23: TButton; Button24: TButton; Button25: TButton; Button26: TButton; Edit7: TEdit; Image7: TImage; Label8: TLabel; Panel8: TPanel; Image8: TImage; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; Button27: TButton; Button28: TButton; Button30: TButton; Button29: TButton; Button31: TButton; Button32: TButton; N6: TMenuItem; N7: TMenuItem; N8: TMenuItem; N11: TMenuItem; N21: TMenuItem; N31: TMenuItem; N41: TMenuItem; N51: TMenuItem; N61: TMenuItem; N71: TMenuItem; Button33: TButton; N9: TMenuItem; procedure Button12Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button22Click(Sender: TObject); procedure Button21Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button15Click(Sender: TObject); procedure Button16Click(Sender: TObject); procedure Button20Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button19Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button17Click(Sender: TObject); procedure Button18Click(Sender: TObject); procedure Button26Click(Sender: TObject); procedure Button25Click(Sender: TObject); procedure Button23Click(Sender: TObject); procedure Button24Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure Button27Click(Sender: TObject); procedure Button30Click(Sender: TObject); procedure Button29Click(Sender: TObject); procedure Button31Click(Sender: TObject); procedure Button32Click(Sender: TObject); procedure N8Click(Sender: TObject); procedure N11Click(Sender: TObject); procedure Button33Click(Sender: TObject); procedure N21Click(Sender: TObject); procedure N31Click(Sender: TObject); procedure N41Click(Sender: TObject); procedure N51Click(Sender: TObject); procedure N61Click(Sender: TObject); procedure N71Click(Sender: TObject); procedure N9Click(Sender: TObject); private public end;
procedure DoNewEditList; procedure DoNewEditListTwo; procedure DoNewEditRoundList;
var Form1: TForm1; ListBegin: List; //указатель на однонапр. список ListPos: Integer; //позиция в однонапр. списке ListTwoBegin: ListTwo; //указатель на двунапр. список ListTwoPos: Integer; //позиция в двунапр. списке QueueBegin: List; //указатель на очередь QueuePos: Integer; //"позиция в очереди" (содержит кол-во символов в Edit до первого элемента) Stack: List; //указатель на стек StackPos: Integer; //"позиция в стеке" (содержит кол-во символов в Edit до первого элемента) DeckBegin, DeckEnd: ListTwo; //указатели на начало и конец дека DeckBeginPos, DeckEndPos: Integer; //"позиции в деке" (DeckEndPos содержит кол-во символов в Edit от DeckEndPosition до последнего элемента) DeckEndPosition: Integer; //позиция последнего элемента в деке (содержит первоначальное кол-во символов в Edit до последнего элемента) RoundList: List; //указатель в циклическом списке RoundListPos: Integer; //"позиция в циклическом списке"
implementation
uses O_programm, Help, Un18_Lab;
{$R *.DFM}
procedure DoNewEditList; var q: List; begin q := ListBegin; Form1.Edit1.Text := ''; while q <> nil do begin Form1.Edit1.Text := Form1.Edit1.Text + ' ' + IntToStr(q^.Info); q := q^.Next; 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 TForXXXm1.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 <= 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 be
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (165)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |