Использование списков указателей на примере приложения 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.