Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

События мыши и клавиатуры

Пример

Var

Пример

Begin

Begin

Begin

Begin

Var

Begin

Begin

Var

Begin

Begin

Var

Public

Private

Public

Var

Типизированные файлы

 

< Объявление файловой переменной для типизированного файла >::=

<Имя переменной>: file of <тип>;

 

Процедуры и функции для работы с типизированными файлами (TP7)

 

procedure Assign(var F: File);

 

procedure Close (var F: File);

 

procedure Reset (var F: File);

Открывает существующий файл на чтение и запись. Маркер файла становится перед записью номер 0. Нумерация компонент начинается с нуля.

procedure Rewrite (var F: File);

Открывает файл на чтение и запись. Маркер файла становится перед записью номер 0. Файл после открытия имеет размер 0. Если файл ранее существовал, его содержимое теряется.

 

procedure Seek(var F: File, RecordNumber: Longint);

Перемещает маркер файла на компонент с номером RecordNumber. Нумерация компонент начинается с нуля.

 

procedure Truncate(var F: File);

Удаляет все компоненты файла, стоящие после маркера файла.

 

procedure Read(var F: File; < Список ввода >);

Читает из файла N компонент, где N – число пунктов в < Списке ввода>. Маркер файла перемещается вперед на N компонент.

 

procedure Write(var F: File; < Список вывода >);

Зписывает в файл N компонент, где N – число пунктов в < Списке ввода>. Маркер файла перемещается вперед на N компонент.

 

function Eof(var F: File): boolean;

 

Синтаксис Delphi:

 

procedure AssignFile(var F: <Файловый тип>; <Имя файла>: string);

procedure CloseFile (var F: <Файловый тип>);

Процедуры аналогичны соответственно процедурам Assign и Close.

 

 


Свойство (Property)

 

Свойство, как и поле класса, задает атрибут объекта. Но если поле есть просто хранилище данных, то свойство есть механизм обращения к данным и, возможно, механизм изменения данных. Свойство ограничивает доступ к данным теми рамками, которые задает программист.

 

Объявление:

property <Имя свойства>: <Тип>

read <Имя функции или поля для чтения> // Может отсутствовать, если есть write

write <Имя процедуры для модификации> // Может отсутствовать, если есть read

;

 


Пример. Delphi

 

TList1 = class (TObject)

pHead: pPersonType;

nItems: integer;

procedure DeleteTail(pFirstInTail: pPersonType);

function ItemsCountR: integer;

procedure ItemsCountW(k: integer);

property ItemsCount: integer read ItemsCountR write ItemsCountW;

end;

 


procedure TList1.DeleteTail(pFirstInTail: pPersonType);

pCurr, pDelete: pPersonType;

pCurr:= pFirstInTail;

while pCurr <> Nil do

pDelete:= pCurr;

pCurr:= pCurr^.pNext;

Dispose(pDelete);

end;

end;
function TList1.ItemsCountR: integer;

pCurr: pPersonType;

n: integer;

// ItemsCountR:= nItems;

pCurr:= pHead;

n:= 0;

while pCurr <> Nil do

Inc(n);

pCurr:= pCurr^.pNext;

end;

nItems:= n;

ItemsCountR:= n;

end;


procedure TList1.ItemsCountW(k: integer);

pCurr, pPrev: pPersonType;

n: integer;

// nItems:= k;

if k < 0 then

writeln(‘k must be non-negative!’);

Exit;

end;

 

pCurr:= pHead;

n:= 0;


while (pCurr <> Nil) and (n < k) do

Inc(n);

pPrev:= pCurr;

pCurr:= pCurr^.pNext;

end;

 

if n < k then

writeln(‘k must be less or equal to ’, n:0, ‘!’);

Exit;

end;

 

pPrev^.pNext:= Nil;

 


if pCurr <> Nil then

DeleteTail(pCurr);

 

nItems:= k;

end;

 


Обращение к свойствам объекта:

Writeln(<Имя объектной переменной>. ItemsCount);

// Обращение к свойству “ read ”.

 

<Имя объектной переменной>. ItemsCount:= 7;

// Обращение к свойству “ write ”.

 

MyList: TList1;

writeln(MyList1.ItemsCount);

writeln(MyList1.ItemsCountR);

MyList1.ItemsCount:= 10;

MyList1.ItemsCountW(10);


Алгоритм Дейкстры

http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B

 

Алгоритм Дейкстры (Dijkstra’s algorithm) – алгоритм на графах, изобретённый нидерландским ученым Э. Дейкстрой в 1959 году. Находит кратчайшее расстояние от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Алгоритм широко применяется в программировании и технологиях, например, его использует протокол OSPF для устранения кольцевых маршрутов.

Дан взвешенный ориентированный граф без петель и дуг отрицательного веса. – множество вершин, – множество рёбер графа.

Требуется найти кратчайшие пути от некоторой вершины a графа до всех остальных вершин этого графа.

 

Каждой вершине из сопоставим метку – минимальное известное расстояние до этой вершины от начальной вершины . Алгоритм работает пошагово – на каждом шаге он «посещает» одну вершину и пытается уменьшать метки. Работа алгоритма завершается, когда все вершины посещены.

Инициализация. Метка начальной вершины полагается равной 0, метки остальных вершин – бесконечности. Это отражает то, что расстояния от до других вершин пока неизвестны. Все вершины графа помечаются как непосещённые.

Шаг алгоритма. Если все вершины посещены, алгоритм завершается. В противном случае, из ещё не посещённых вершин выбирается вершина , имеющая минимальную метку. Мы рассматриваем всевозможные маршруты, в которых является предпоследним пунктом. Вершины, в которые ведут рёбра из , назовем соседями этой вершины. Для каждого соседа вершины , кроме отмеченных как посещённые, рассмотрим новую длину пути, равную сумме значений текущей метки и длины ребра, соединяющего с этим соседом. Если полученное значение длины меньше значения метки соседа, заменим значение метки полученным значением длины. Рассмотрев всех соседей, пометим вершину как посещенную и повторим шаг алгоритма.

Рассмотрим выполнение алгоритма на примере графа, показанного на рисунке. Пусть требуется найти расстояния от 1-й вершины до всех остальных.

Кружками обозначены вершины, линиями – пути между ними (ребра графа). В кружках обозначены номера вершин, над ребрами обозначена их «цена» – длина пути. Рядом с каждой вершиной красным обозначена метка – длина кратчайшего пути в эту вершину из вершины 1.

Первый шаг. Рассмотрим шаг алгоритма Дейкстры для нашего примера. Минимальную метку имеет вершина 1. Её соседями являются вершины 2, 3 и 6.

Первый по очереди сосед вершины 1 – вершина 2, потому что длина пути до неё минимальна. Длина пути в неё через вершину 1 равна сумме кратчайшего расстояния до вершины 1, значению её метки, и длины ребра, идущего из 1-ой в 2-ую, то есть 0 + 7 = 7. Это меньше текущей метки вершины 2, бесконечности, поэтому новая метка 2-й вершины равна 7.

Аналогичную операцию проделываем с двумя другими соседями 1-й вершины – 3-й и 6-й.

Все соседи вершины 1 проверены. Текущее минимальное расстояние до вершины 1 считается окончательным и пересмотру не подлежит (то, что это действительно так, впервые доказал Э. Дейкстра). Вычеркнем её из графа, чтобы отметить, что эта вершина посещена.

Второй шаг. Шаг алгоритма повторяется. Снова находим «ближайшую» из непосещенных вершин. Это вершина 2 с меткой 7.

Снова пытаемся уменьшить метки соседей выбранной вершины, пытаясь пройти в них через 2-ю вершину. Соседями вершины 2 являются вершины 1, 3 и 4.

Первый (по порядку) сосед вершины 2 – вершина 1. Но она уже посещена, поэтому с 1-й вершиной ничего не делаем.

 

 

Следующий сосед вершины 2 – вершина 3, так как имеет минимальную метку из вершин, отмеченных как не посещённые. Если идти в неё через 2, то длина такого пути будет равна 17 (7 + 10 = 17). Но текущая метка третьей вершины равна 9<17, поэтому метка не меняется.

 

 

Ещё один сосед вершины 2 – вершина 4. Если идти в неё через 2-ю, то длина такого пути будет равна сумме кратчайшего расстояния до 2-ой вершины и расстояния между вершинами 2 и 4, то есть 22 (7 + 15 = 22). Поскольку 22<, устанавливаем метку вершины 4 равной 22.

Все соседи вершины 2 просмотрены, замораживаем расстояние до неё и помечаем её как посещенную.

Третий шаг. Повторяем шаг алгоритма, выбрав вершину 3. После её «обработки» получим такие результаты:

Дальнейшие шаги. Повторяем шаг алгоритма для оставшихся вершин. Это будут вершины 6, 4 и 5, соответственно порядку.

Завершение выполнения алгоритма. Алгоритм заканчивает работу, когда вычеркнуты все вершины. Результат его работы виден на последнем рисунке: кратчайший путь от вершины 1 до 2-й составляет 7, до 3-й – 9, до 4-й – 20, до 5-й – 20, до 6-й – 11.

 

 

Особый интерес представляют события, происходящие с мышью и с клавиатурой в тот момент, когда указатель мыши нацелен на графический элемент управления класса TImage.

Пусть имя графического элемента – ImageGraph, имя формы – Form1.

 

Событие «нажата кнопка мыши» (MouseDown).

 

procedure TForm1.ImageGraphMouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; x, y: Integer);

 

Sender: объект–предок объекта, с которым произошло событие. Из этого объекта можно «выудить» наиболее общие для визуальных элементов управления на форме свойства и методы. Например:

ShowMessage(Sender. UnitName);

повлечёт появление на экране ExtCtrls – имя модуля (устройства, юнита), в котором класс TObject объекта Sender объявлен.

Другой пример:

ShowMessage(Sender. Name);

повлечёт ошибку на этапе компиляции. Нет у объекта Sender свойства Name.

 

Button: параметр перечисляемого типа, объявленного в модуле Controls:

<== предыдущая лекция | следующая лекция ==>
Порядок изъятия земельных участков и возмещения возникших убытков | Замечание. Стандартные процедуры и функции для работы с любыми файлами
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 272; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.066 сек.