Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ.doc
Скачиваний:
6
Добавлен:
12.11.2019
Размер:
1.51 Mб
Скачать

Задания для самостоятельной работы

  1. Добавьте кнопку для подсчета количества студентов в каждой группе.

  2. Выполните сортировку списка по фамилиям студентов

  3. Добавьте в запись поле средний балл. Определите студента с самым высоким средним баллом, самым низким средним баллом, подсчитайте средний балл по каждой группе.

Контрольные вопросы

  1. Методы работы с типизированными файлами в Delphi

  2. Диалоговые компоненты Delphi - OpenDialog и SaveDialog, свойства и методы

  3. Методы обработки записей в компонентах StringGrid.

Лабораторная работа № 14. Динамические структуры данных . Стек и очередь

ЦЕЛЬ РАБОТЫ:

  1. Освоить методы работы с динамическими структурами данных (создание, удаление, просмотр).

  2. Изучить принципы формирования стека и очереди.

ПОДГОТОВКА К РАБОТЕ:

  1. Изучить способы выделения динамической памяти;

  2. Усвоить различия между типизированными и нетипизированными указателями;

  3. Изучить принципы доступа к содержимому стека и очереди

ЗАДАНИЕ. Создайте приложение для работы со стеком и очередью. Приложение должно выполнять добавление и удаление элементов в соответствующие структуры данных. А также, хотя это и является нарушением принципов работы стека и очереди, выводить содержимое данных динамических структур без удаления элементов. Соответствующее приложение изображено на рисунке 14.1.

Последовательность действий:

  1. В блоке Type (после описания класса TForm1) объявите следующие новые типы данных:

ps=^stack; {Указатель на стек}

stack= Record {Стек}

data:Integer;

next:ps;

end;

pq=^queue; {Указатель на очередь}

queue= Record {Очередь}

data:Integer;

next:pq;

end;

  1. В области глобальных переменных объявите следующие переменные:

Form1: TForm1; {Эта строка уже есть}

// Указатель на вершину стека

head:ps;

// Указатели на начало и

// конец очереди соответственно

firstq,endq:pq;

  1. В блоке Implementation опишите функцию для вывода на экран стека (предположим, что содержимое стека выводится на экран в поле memo1):

procedure outs;

Var x:ps;

Begin

// Очистить поле Memo1

Form1.Memo1.Clear;

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

x:=Head;

// Цикл выполняется пока не дойдем до конца стека

While x<>nil do

Begin

// Вывод на экран очередного элемента стека

Form1.Memo1.Lines.Add(IntToStr(x^.data));

// Переход на следующий элемент стека

x:=x^.next;

end;

end;

  1. В блоке Implementation опишите функцию для вывода на экран очереди (предположим, что содержимое стека выводится на экран в поле memo2):

procedure outq;

Var x:pq;

Begin

// Очистить поле Memo2

Form1.Memo2.Clear;

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

x:=Firstq;

// Цикл выполняется пока не дойдем до конца очереди

While x<>nil do

Begin

// Вывод на экран очередного элемента очереди

Form1.Memo2.Lines.Add(IntToStr(x^.data));

// Переход на следующий элемент очереди

x:=x^.next;

end;

end;

  1. Для события OnCreate формы напишите следующий программный код:

procedure TForm1.FormCreate(Sender: TObject);

begin

head:=nil; // Пустой стек

firstq:=nil; // Пустая очередь

endq:=nil;

end;

  1. Для кнопки «Добавление элемента стека» напишите следующий программный код:

procedure TForm1.Button1Click(Sender: TObject);

Var x:ps; // Вспомогательная переменная

Begin

// Выделение нового элемента стека в динамической памяти

New(x);

// Заполнение нового элемента данными

x^.data:=StrToInt(Edit1.Text);

// Новый элемент теперь будет вершиной стека

x^.next:=head;

head:=x;

// Вывод стека на экран

Outs;

end;

  1. Для кнопки «Удаление элемента стека» напишите следующий программный код:

procedure TForm1.Button2Click(Sender: TObject);

Var x:ps; // Вспомогательная переменная

Begin

// Удаление выполняется, если стек не пустой

If head<>nil then

Begin

// Во вспомогательной переменной запоминается старое значение

вершины стека

x:=head;

// Вершина стека теперь будет указывать на

// следующий элемент

head:=head^.next;

// Удаление элемента, находившегося на вершине стека

Dispose(x);

// Вывод стека на экран

Outs;

end

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

end;

  1. Для кнопки «Добавление элемента очереди» напишите следующий программный код:

procedure TForm1.Button3Click(Sender: TObject);

Var x:pq; // Вспомогательная переменная

Begin

// Создание в динамической памяти очередного элемента очереди

New(x);

// Заполнение очередного элемента очереди

x^.data:=StrToInt(Edit2.Text);

x^.next:=nil;

If firstq<> nil then

// Созданный элемент добавляется в конец очереди

endq^.next:=x

else

firstq:=x; // Заполнение первого элемента очереди

Endq:=x; // Изменение указателя на конец очереди

Outq; // Вывод очереди на экран

end;

  1. Для кнопки «Удаление элемента из очереди напишите следующий программный код:

procedure TForm1.Button4Click(Sender: TObject);

Var x:pq; //Вспомогательная переменная

Begin

// Удаление выполняется, если в очереди есть элементы

If firstq<>nil then

begin

// Адрес первого элемента очереди запоминается

// во вспомогательной переменной

x:=Firstq;

// Первым элементом теперь станет следующий

firstq:=Firstq^.next;

// Удаляется первый элемент очереди

Dispose(x);

// Вывод очереди на экран

Outq;

end

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

end;

  1. Проверьте работу приложения.