для студентов специальности 5.05010201 «Обслуживание компьютерных систем и сетей»
Тема: Текстовые компоненты и списки в Delphi
Цель:освоить методику создания приложений, в которых используются текстовые компоненты и списки в Delphi.
Норма времени:2 часа.
После выполненных работ студент должен
знать:структуру динамических связных списков;
уметь:создавать простые приложения с использованием списков.
Оснащение рабочего места:инструкционные карты, конспект, ПК, среда Delphi.
Вводный инструктаж.. 1
Списки. 1
Пример программы.. 2
Задания для самостоятельного выполнения. 5
Контрольные вопросы.. 5
Дополнительные задания. 7
Вводный инструктаж
Списки
Указатели и динамические переменные позволяют создавать сложные динамические структуры данных, такие как списки и деревья.
Список можно изобразить графически (рис. 1).
Рис. 1. Графическое изображение списка
Каждый элемент списка (узел) представляет собой запись, состоящую из двух частей. Первая часть — информационная. Вторая часть отвечает за связь со следующим и, возможно, с предыдущим элементом списка. Список, в котором обеспечивается связь только со следующим элементом, называется односвязным.
Для того чтобы программа могла использовать список, надо определить тип компонентов списка и переменную-указатель на первый элемент списка. Ниже приведен пример объявления компонента списка студентов:
type
TPStudent = ^TStudent; // указатель на переменную типа TStudent
// описание типа элемента списка
TStudent = record
surname: string[20]; // фамилия
name: string[20];' // имя
group: integer; // номергруппы
address: string[60]; // домашнийадрес
next: TPStudent; // указатель на следующий элемент списка
end;
var
head: TPStudent; // указатель на первый элемент списка
Добавлять данные можно в начало, в конец или в нужное место списка. Во всех этих случаях необходимо корректировать указатели. На рис. 2 изображен процесс добавления элементов в начало списка.
После добавления второго элемента в список head указывает на этот элемент.
Рис. 2. Добавление элементов в список
Пример программы
Следующая программа (ее текст приведен ниже) формирует список студентов, добавляя фамилии в начало списка. Данные вводятся в поля редактирования диалогового окна программы (рис. 3) и добавляются в список нажатием кнопкиДобавить(Button1).
curr := head; // указатель на первый элемент списка
while curr <> NIL do begin
n := n + 1;
st := st + curr^.f_name + ' ' + curr^.l_name
+#13; curr := curr^.next;
// указатель на следующий элемент end;
end;
if n <> 0 then
ShowMessage('Список:' + #13 + st)
else
ShowMessage('В списке нет элементов.');
end;
end.
Добавление элемента в список выполняет процедура TForm1.Button1Click, которая создает динамическую переменную-запись, присваивает ее полям значения, соответствующие содержимому полей ввода диалогового окна, и корректирует значение указателя head.
Вывод списка выполняет процедура TForm1.Button2Click, которая запускается нажатием кнопкиПоказать.Для доступа к элементам списка используется указатель curr. Сначала он содержит адрес первого элемента списка. После того как первый элемент списка будет обработан, указателю curr присваивается значение поля next той записи, на которую указывает curr. В результате этого переменная curr содержит адрес второго элемента списка. Таким образом, указатель перемещается по списку. Процесс повторяется до тех пор, пока значение поля next текущего элемента списка (элемента, адрес которого содержит переменная curr) не окажется равно NIL.
Задания для самостоятельного выполнения
Создать программу с компонентами, согласно варианту, заданному преподавателем
Контрольные вопросы
Для чего используются компоненты Label, SpinEdit, Button и StringGrid
Что такое статические структуры?
Для чего применяются динамические структуры?
Какие переменные называются указателями?
Динамической переменной называется переменная…
Для освобождения памяти, занимаемой динамической переменной, используется процедура…
Какие сложные динамические структуры данных позволяют создавать указатели и динамические переменные?
Какой список называется односвязным?
Рассмотрено и одобрено на заседании цикловой комиссии общетехнических и специальных дисциплин
Протокол № ___ от «____» _________________ 2013 г.