Использование списков указателей на примере приложения DemoList
Подробное описание использования списков указателей при работе с приложением DemoList. Применение метод-обработчиков ListBtnClick, clearBtnClick, SortBtnClick, DeiBtnClick. Решение задачи с применением ключа программы, ее вид, описание процедуры.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 21.06.2009 |
Размер файла | 856,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Национальный Технический Университет Украины
Киевский Политехнический Институт
ММИФ
Лабораторная работа
Пример использования списка указателей
Киев 2008
Рассмотрим использование списков указателей на примере приложения DemoList. При щелчке мышью на форме приложения отображается точка, которой присваивается порядковый номер. Одновременно координаты и номер точки записываются в соответствующие свойства создаваемого экземпляра класса TMypixel. Указатель на этот объект передается в новый элемент списка pixList.
В результате после очистки формы всю последовательность точек можно восстановить, использовав указатели на объекты точек из списка.
Список точек можно отсортировать по координате X в порядке возрастания.
Класс TMyPixel обеспечивает хранение координат точки и ее порядковый номер в серии. Эти параметры передаются в конструктор класса. Метод setPixel обеспечивает отрисовку точки на канве формы (см. гл. 10).
Экземпляр класса создается для каждой новой точки при щелчке кнопкой мыши в методе-обработчике FormMouseDown. Здесь же указатель на новый объект сохраняется в создаваемом при помощи метода Add элементе списка PixList. Таким образом, программа "запоминает" расположение и порядок следования точек.
Метод-обработчик ListBtnClick обеспечивает отображение точек. Для этого в цикле текущий указатель списка передается в переменную объектного типа curPixel, т. е. в этой переменной по очереди "побывают" все созданные объекты, указатели на которые хранятся в списке.
Это сделано для того, чтобы получить доступ к свойствам объектов (непосредственно через указатель этого сделать нельзя). Второй способ приведения типа рассмотрен в методе-обработчике SortBtnClick.
Перед вторичным отображением точек необходимо очистить поверхность формы. Эту операцию выполняет метод-обработчик clearBtnClick.
Список точек можно отсортировать по координате X в порядке возрастания. Для этого в методе-обработчике SortBtnClick вызывается метод Sort списка PixList. В параметре метода (переменная процедурного типа) передается функция PixCompare, которая обеспечивает инкапсулированный в методе Sort механизм перебора элементов списка алгоритмом принятия решения о старшинстве двух соседних элементов.
Если функция возвращает положительное число, то элемент item1 больше элемента item2. Если результат отрицательный, то item1 меньше, чем item2. Если элементы равны, функция должна возвращать ноль.
В нашем случае сравнивались координаты X двух точек. В результате такой сортировки по возрастанию объекты оказались расположены так, что первый элемент списка указывает на объект с минимальной координатой X, а последний -- на объект с максимальной координатой X.
После сортировки осталось заново пронумеровать все точки. Это делает цикл в методе-обработчике SortBtnclick. Обратите внимание на примененный в этом случае способ приведения типа, обеспечивающий обращение к свойствам экземпляров класса TMypixel.
Метод-обработчик DeiBtnClick обеспечивает полную очистку списка pixList.
Условие задачи:
Описать процедуру или функцию, которая!
а) проверяет на равенство списки L1 и L2;
Код програмы:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
type Nodepoint=^Node;
Node=record
count:integer;
list:nodepoint;
end;
function kil(cur4:nodepoint):integer;
var k:integer;
begin
k:=1;
while cur4<>nil do begin
cur4:=cur4^.list;
k:=k+1;
end;
kil:=k;
end;
function Por(q1,q2:nodepoint):boolean;
var bol:boolean;
begin
bol:=true;
if kil(q1)<>kil(q2) then begin
por:=false;
exit;
end;
while (q1<>nil) and (q2<>nil) do begin
if q1^.count<>q2^.count then
bol:=false;
{if (q1=nil) and (q2<>nil) then begin
Por:=false;
exit;
end else
if (q2=nil) and (q1<>nil) then begin
Por:=false;
exit;
end; }
q1:=q1^.list;
q2:=q2^.list;
end;
Por:=bol;
end;
procedure Vuvodsp(head:nodepoint);
begin
while head<>nil do begin
writeln(head^.count);
head:=head^.list;
end
end;
procedure del(var p:nodepoint);
var r:nodepoint;
begin
while (p<>nil) do begin
r:=p;
p:=p^.list;
dispose(r);
end;
end;
function Vvodsp(l:integer):nodepoint;
var cur1,firs:nodepoint;j:integer;
begin
New(cur1);
firs:=cur1;
writeln('Vedit spisok');
readln(cur1^.count);
for j:=1 to l-1 do begin
new(cur1^.list);
readln(cur1^.list^.count);
cur1:=cur1^.list;
cur1^.list:=nil;
end;
Vvodsp:=firs;
end;
var cur,l1,l2:nodepoint;n:integer;
begin
writeln('Vedit kilkist elementiv pershogo spusku');
readln(n);
L1:=Vvodsp(n);
readln;
writeln;
writeln('Vedit kilkist elementiv drugogo spusku');
readln(n);
L2:=Vvodsp(n);
readln;
writeln;
cur:=L1;
Vuvodsp(cur);
readln;
writeln;
cur:=L2;
Vuvodsp(cur);
readln;
if por(L1,L2) then writeln('Tak,l1= L2') else
writeln('Ni,l1<> L2');
readln;
del(L1);
del(L2);
end.
Вид программи:
Список литературы:
Тurbo Pascal 7.0 Изд. М. 1999
Пильщиков В.Н. «Сборник упражнений по языку Тurbo Pascal 7.0» М., Наука 1989г.
Wikipedia.com Интернет-енциклопедия
Епанешников В.И. «Программирование в среде Turbo Pascal 7.0» М. 2001
Подобные документы
Реализация линейных списков в языке программирования C++. Основные операции при работе с ними. Разработка интерфейса и алгоритмов. Описание работы программы на псевдокоде. Составление программного кода. Тестирование, отладка и результат работы программы.
курсовая работа [1,1 M], добавлен 07.01.2014Выбор алгоритма решения задачи. Разработка программы, обеспечивающую эффективную обработку и хранение информации с использованием линейных списков. Написание программы на псевдокоде и на языке программирования высокого уровня. Результаты работы программы.
курсовая работа [2,1 M], добавлен 21.04.2012Математическое описание алгоритмов схемы и операций для уравнения Лапласа. Изучение разностной схемы "крест" для нахождения численного решения эллиптического уравнения, задача Дирихле. Использование указателей в среде Matlab для решений методом Гаусса.
дипломная работа [859,3 K], добавлен 23.10.2014Назначение и возможности разработанного приложения для визуализации картографической информации. Хранимые процедуры, функции и триггеры. Взаимодействие пользователя с приложением. Описание экранной формы по работе с картами. Визуализация карты в MS Visio.
курсовая работа [2,1 M], добавлен 14.08.2014Создание приложения "Напоминание о датах" на языке Pascal. Элементы работы с классом "список и процедуры". Прямой доступ к элементам массива. Перенос существующего элемента на новые места. Удаление указателей из списка. Руководство пользователя программы.
курсовая работа [5,1 M], добавлен 12.10.2012Составление алгоритмов и написание программ циклической структуры с использованием векторов, указателей и векторов указателей на вектор на языке C++. Статическое и динамическое распределение памяти. Функция ввода и обработки элементов вектора или матрицы.
контрольная работа [210,5 K], добавлен 25.03.2015Разработка приложения, которое содержит данные об экспонатах и выставках. Создание базы данных и добавление элемента с информацией в любую позицию списков. Добавление и удаление экспонатов с выставки. Сохранение всех списков в файлы, составление отчета.
курсовая работа [1,2 M], добавлен 02.07.2014Описание используемых понятий и механизмов объектно-ориентированного программирования. Разработка и описание необходимых классов. Демонстрационный модуль с кратким описанием использованных стандартных компонентов. Внешний вид и листинг программы.
курсовая работа [1,3 M], добавлен 24.07.2013Сущность понятий: "куча" (пул памяти), связный список, синхронизация потоков; разработка программы, исключающей возможность перекрытия потоков друг другом. Организация связных списков и использование функций API для работы с пулом памяти в ОС Windows.
курсовая работа [145,3 K], добавлен 11.05.2012Ханойские башни: постановка задачи, условия перемещения дисков со стержня на стержень. Стратегия решения, используемые предикаты. Текст программы на языке Пролог. Построение модели решения задачи о ферзях. Примеры использования списков в языке Пролог.
презентация [72,0 K], добавлен 29.07.2012