Алгоритм Хаффмена

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    458,67 Кб
  • Опубликовано:
    2015-07-23
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Алгоритм Хаффмена

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Ивановский государственный политехнический университет»

(Текстильный институт)

Кафедра ВПМСИТ




Курсовая работа на тему:

«Алгоритм Хаффмана»

 

Авторы работы Козин И.А.

Специальность 100101 «Информационный сервис»

Руководитель работы Кухтина Е. А.






Иваново 2013

Содержание

Введение

. Оптимизация. Задачи оптимизации

. Объектно-ориентированное программирование

. Система программирования Delphi

.1 Общие сведения о языке программирования Delphi

.2 Среда разработки Delphi 7.0

. Классический метод Хаффмена

. Программная реализация метода кодирования Хаффмена

. Программный код реализуемого метода

Выводы

Список использованных источников

Введение

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

Объектно-ориентированное программирование (ООП) зародилось в языках программирования Паскаль, Ада, С++. До появления ООП технология создания компьютерных программ базировалась на процедурном программировании, в котором основой программ являлись функции и процедуры, т.е. действия. Созданная т.о. компьютерная программа отличалась четким алгоритмом работы - последовательностью действий по достижению поставленной цели. В ООП основной точкой опоры при проектировании программы является - объект. Программа ООП - это не последовательность операторов, а совокупность объектов и способов их взаимодействия. Обмен информацией между объектами происходит посредством сообщений.

ООП основано на трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.

Инкапсуляция - объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.

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

Полиморфизм - свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами.

1.     

. Оптимизация. Задачи оптимизации

Каждый человек время от времени оказывается в ситуации, когда достижение некоторого результата может быть осуществлено не единственным способом. В таких случаях приходится отыскивать наилучший способ. Однако в различных ситуациях наилучшими могут быть совершенно разные решения. Все зависит от выбранного или заданного критерия. На практике оказывается, что в большинстве случаев понятие «наилучший» может быть выражено количественными критериями - минимум затрат, минимум времени, максимум прибыли и т.д. Поэтому возможна постановка математических задач отыскания оптимального (optimum - наилучший) результата, так как принципиальных различий в отыскании наименьшего или наибольшего значения нет. Задачи на отыскание оптимального решения называются задачами оптимизации. Оптимальный результат, как правило, находится не сразу, а в результате процесса, называемого процессом оптимизации. Применяемые в процессе оптимизации методы получили название методов оптимизации. Чтобы решить практическую задачу надо перевести ее на математический язык, то есть составить ее математическую модель.

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

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

Наилучшие в определенном смысле решения задач принято называть оптимальными. Без использования принципов оптимизации в настоящее время не решается ни одна более или менее сложная проблема. При постановке и решении задач оптимизации возникают два вопроса: что и как оптимизировать?

Ответ на первый вопрос получается как результат глубокого изучения проблемы, которую предстоит решить. Выявляется тот параметр, который определяет степень совершенства решения возникшей проблемы. Этот параметр обычно называют целевой функцией или критерием качества. Далее устанавливается совокупность величин, которые определяют целевую функцию. Наконец, формулируются все ограничения, которые должны учитываться при решении задачи. После этого строится математическая модель, заключающаяся в установлении аналитической зависимости целевой функции от всех аргументов и аналитической формулировки, сопутствующих задаче ограничений. Далее приступают к поиску ответа на второй вопрос. Для ответа не него используются множество алгоритмов оптимизации, направленных на решение конкретных задач. В частности в ходе изучения нашего курса были изучены «Жадный» алгоритм, алгоритм Прима, алгоритм Крускала, алгоритм Дейкстры и другие.

Можно выделить два типа задач оптимизации - безусловные и условные.

Безусловная задача оптимизации состоит в отыскании максимума или минимума действительной функции при действительных переменных и определении соответствующих значений аргументов на некотором множестве σ n-мерного пространства. Обычно рассматриваются задачи минимизации; к ним легко сводятся и задачи на поиск максимума путем замены знака целевой функции на противоположный.

Условные задачи оптимизации, или задачи с ограничениями, это такие, при формулировке которых задаются некоторые условия (ограничения) на множестве . Эти ограничения задаются совокупностью некоторых функций, удовлетворяющих уравнениям или неравенствам.

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

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

.       

. Объектно-ориентированное программирование

Во второй половине 80-х годов возникла потребность в новой методологии программирования, которая была бы способна справиться с нарастающей сложностью программ, а также с необходимостью повышения их надежности. Ею стало объектно-ориентированное программирование (ООП).

Объектно-ориентированный подход обладает следующими преимуществами:

         -        уменьшение сложности программного обеспечения;

         -        повышение надежности программного обеспечения;

         -        обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;

         -        обеспечение возможности повторного использования отдельных компонентов программного обеспечения.

Основными понятиями ООП являются объект (экземпляр класса), класс, метод и сообщение (запрос). В объектно-ориентированном программировании программа рассматривается как совокупность объектов - отдельных фрагментов кода, обеспечивающих выполнение определенных действий и объединяющих данные и методы управления ими.

ООП - это подход, в котором данные и поведение (методы обработки данных) жестко связаны в одной структуре. Каждая используемая в программе переменная имеет смысл только тогда, когда она может принимать какие-либо значения. Множество значений, которые может принимать переменная, является определяющей характеристикой переменной, и называется ее типом. Тип переменной, в свою очередь определяет набор операций, которые можно применять к переменной. (Эти положения полностью согласуются с основами структур данных).

Объектом назовем понятие, абстракцию или любой предмет с четко очерченными границами, который имеет смысл в контексте рассматриваемой прикладной проблемы.

В ООП базовыми единицами программ являются классы.

Класс - это структура данных, которая может содержать в своем составе переменные, функции и процедуры.

Переменные класса называются полями (как в структуре данных “запись”) или свойствами. Процедуры и функции, входящие в состав класса, называются методами. Классы также называют объектными типами. Базовым классом для всех объектов в Delphi, является класс TObject. При объявлении класса вначале описываются поля, а затем методы. Поля класса являются переменными входящими в состав его структуры. В объявлении класса присутствуют только заголовки методов. Содержание методов (операции обработки) описываются в разделе реализации того модуля, в котором объявляется новый объектный тип. Иными словами, ООП позволяет пользователю вводить собственные типы данных, расширяя тем самым набор встроенных в язык типов данных.

Объектом или экземпляром класса называется переменная объектного типа (переменная типа класс). Чтобы объект мог обмениваться данными с другими объектами (как это происходит в реальном мире), используются свойства объекта. Свойства объекта определяют состояние объекта. Технология ООП позволяет работать с объектом только через его методы. Иначе говоря, изменить состояние объекта можно, вызвав какой либо метод этого объекта. Кстати, это положение ООП существенно ограничивает возможность приведения объекта в недопустимое состояние или несанкционированно разрушить объект.

Взаимодействие между объектами осуществляется с помощью сообщений. Объект может посылать сообщения другим объектам или принимать сообщения от них.

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

Подытоживая сказанное, объект можно интерпретировать как модель некоторого реального объекта или процесса, которая обладает следующими свойствами:

         -        поддается хранению и обработке;

         -        способна взаимодействовать с другими объектами и вычислительной средой, посылая сообщения и реагируя на принимаемые сообщения;

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

ООП базируется на 3 основных принципах: инкапсуляции, наследовании и полиморфизме.

Инкапсуляция (encapsulation) - это сокрытие реализации класса и отделение его внутреннего представления от внешнего (интерфейса). При использовании объектно-ориентированного подхода не принято применять прямой доступ к свойствам какого-либо класса из методов других классов. Для доступа к свойствам класса принято задействовать специальные методы этого класса для получения и изменения его свойств.

Наследование (inheritance) - это отношение между классами, при котором класс использует структуру или поведение другого класса (одиночное наследование), или других (множественное наследование) классов. Наследование вводит иерархию "общее/частное", в которой подкласс наследует от одного или нескольких более общих суперклассов. Подклассы обычно дополняют или переопределяют унаследованную структуру и поведение. Наследование - это средство получения новых типов данных (классов) из уже существующих типов, называемых базовыми классами. При этом повторно используется существующий код. Порождённый класс образуется из базового путем добавления или изменения кода. При этом новый класс сохраняет все свойства старого: данные объекта базового класса включаются в данные производного объекта , а методы базового класса могут быть вызваны для объекта производного класса, причем они будут выполняться над данными включенного в объект базового класса. Иначе говоря, новый класс наследует как данные старого класса, так и методы их обработки.

Различают единичное наследование, когда имеется только один базовый класс, и множественное наследование, когда базовых классов несколько. Наследование напрямую связано с идеей многократного использования или универсальности, программных компонент. Единожды разработав конструкцию такого компонента, в дальнейшем на ее основе можно строить новые компоненты, не переделывая того, что уже было заложено в старую.

Полиморфизм (polymorphism= множество форм) - положение теории типов, согласно которому имена (например, переменных) могут обозначать объекты разных (но имеющих общего родителя) классов. Следовательно, любой объект, обозначаемый полиморфным именем, может по-своему реагировать на некий общий набор операций.

Свойства объекта. Совокупность данных и методов их чтение и записи называются свойством. Свойства объектов можно устанавливать в процессе проектирования, а также можно изменять программно во время выполнения программы. (В процессе проектирования приложений в среде программирования Delphi можно просматривать значения некоторых из этих данных в окне Инспектора Объектов и изменять эти значения).

События и их обработка. Средой взаимодействия объектов являются сообщения, генерируемые в результате наступления различных событий. Событие - это взаимодействие на объект. Событие наступает в результате действий пользователя (перемещение курсора, нажатие кнопки и т.п.). В каждом объекте определено множество событий, на которые он может реагировать. В конкретных объектах могут быть определены обработчики каких-то из этих событий. К написанию этих обработчиков и сводится основное программирование с помощью Delphi.

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

3.     

. Система программирования Delphi

.1 Общие сведения о языке программирования Delphi

Язык программирования Delphi - результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5. 5, добавил в Паскаль объектно-ориентированные свойства, а Delphi - объектно-ориентированный язык программирования с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией.- это греческий город, где жил дельфийский оракул. И этим именем был назван новый программный продукт.

4.2 Среда разработки Delphi 7.0

Внешний вид среды программирования Delphi отличается от многих других из тех, что можно увидеть в Windows. К примеру, Borland Pascal for Windows 7.0, Borland C++ 4.0, Word for Windows, Program Manager - это все MDI приложения и выглядят по-другому, чем Delphi. MDI (Multiple Document Interface) - определяет особый способ управления нескольких дочерних окон внутри одного большого окна.

Среда Delphi же следует другой спецификации, называемой Single Document Interface (SDI), и состоит из нескольких отдельно расположенных окон.

Если Вы используете SDI приложение типа Delphi, то уже знаете, что перед началом работы лучше минимизировать другие приложения, чтобы их окна не загромождали рабочее пространство. Если нужно переключиться на другое приложение, то просто щелкните мышкой на системную кнопку минимизации Delphi. Вместе с главным окном свернутся все остальные окна среды программирования, освободив место для работы других программ.

Ниже перечислены основные составные части Delphi:

         Дизайнер Форм (Form Designer)

         Окно Редактора Исходного Текста (Editor Window)

-        Палитра Компонентов (Component Palette)

         Инспектор Объектов (Object Inspector)

         Справочник (On-line help)

Есть, конечно, и другие важные составляющие Delphi, вроде линейки инструментов, системного меню и многие другие, нужные Вам для точной настройки программы и среды программирования.

Дизайнер Форм и Окно Редактора Исходного текста, наверное, самые используемые и самые важные элементы среды. В первом вы настраиваете внешний вид программы, а во втором редактируете и пишете код программы. Элементы представлены на рисунке 1 и на рисунке 2.

Рисунок 1 - Дизайнер Форм (Form Designer)

Рисунок 2 - Окно Редактора Исходного Текста (Editor Window)

Палитра Компонент позволяет Вам выбрать нужные объекты для размещения их на Дизайнере Форм. Палитра Компонентов использует постраничную группировку объектов. Внизу Палитры находится набор закладок - Standard, Additional, Dialogs и т.д. Если Вы щелкнете мышью на одну из закладок, то Вы можете перейти на следующую страницу Палитры Компонентов. Принцип разбиения на страницы широко используется в среде программирования Delphi и его легко можно использовать в своей программе. На рисунке 3 представлена Палитра Компонентов.

Рисунок 3 - Палитра Компонетов (Component Palette)

Еще одним важным компонентом среды являеться Инспектор Объектов. Информация в Инспекторе Объектов меняется в зависимости от объекта, выбранного на форме.

Инспектор Объектов состоит из двух страниц, каждую из которых можно использовать для определения поведения данного компонента. Первая страница - это список свойств, вторая - список событий. Если нужно изменить что-нибудь, связанное с определенным компонентом, то Вы обычно делаете это в Инспекторе Объектов. К примеру, Вы можете изменить имя и размер компонента TLabel изменяя свойства Caption, Left, Top, Height, и Width. Инспектор объектов представлен на рисунке 4.

Рисунок 4 - Инспектор Объектов (Object Inspector)

Последняя важная часть среды Delphi - Справочник (on-line help). Для доступа к этому инструменту нужно просто выбрать в системном меню пункт Help и затем Contents. На экране появится Справочник

4.     

.        Классический метод Хаффмена

оптимизация объектный программирование хаффмен

Метод Хаффмена является исторически первым методом этой группы. Оригинальная работа была опубликована в 1952 г. под названием "А Method for The Construction of Minimum Redundancy Codes". В основе метода лежит модель кодирования в виде бинарного дерева с минимальной длиной взвешенных путей.

Бинарным деревом называется ориентированное дерево, полу степень исхода любой из вершин которого не превышает двух.

Пусть Т - бинарное дерево, А = (0,1) - двоичный алфавит и каждому ребру Т-дерева приписана одна из букв алфавита таким образом, что все ребра, исходящие из одной вершины, помечены различными буквами. Тогда любому листу Т - дерева можно приписать уникальное кодовое слово, образованное из букв, которыми помечены ребра, встречающиеся при движении от корня к соответствующему листу. Особенность описанного способа кодирования в том, что полученные коды являются префиксными.

Очевидно, что стоимость хранения информации, закодированной при помощи Т- дерева, равна сумме длин путей из корня к каждому листу дерева.

Рассмотрим в качестве примера кодировку символов в стандарте ASСII. Здесь каждый символ представляет собой кодовое слово фиксированной (8 бит) длины, поэтому стоимость хранения определится выражением 8Σwi, = 8Wi, где W - количество кодовых слов во входном потоке.

Поэтому стоимость хранения 39 кодовых слов в кодировке ASCII равна 312, независимо от относительной частоты отдельных символов в этом потоке. Алгоритм Хаффмена позволяет уменьшить стоимость хранения потока кодовых слов путем такого подбора длин кодовых слов, который минимизирует длину взвешенных путей. Будем называть дерево с минимальной длиной взвешенных путей деревом Хаффмена.

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

.        Выбираются 2 свободных узла дерева с наименьшими весами.

.        Создается родитель с весом равным их суммарному весу.

.        Родитель добавляется в список свободных узлов, а двое его потомков удаляются из этого списка.

.        Одной дуге выходящей из родителя ставится в соответствие бит 1, другой - бит 0.

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

После выполнения алгоритма каждый символ, входящий в сообщение определяется как конкатенация нулей и единиц, сопоставленных ребрам дерева Хаффмена, на пути от корня к соответствующему листу.

Наиболее частый символ сообщения А закодирован наименьшим количеством битов, а наиболее редкий символ Д - наибольшим. Стоимость хранения кодированного потока, определенная как сумма длин взвешенных путей, определится выражением 15*1+7*3+6*3+6*3+5*3 = 87, что существенно меньше стоимости хранения входного потока (312).

Поскольку ни один из полученных кодов не является префиксом другого, они могут быть однозначно декодированы при чтении их из потока. Алгоритм декодирования предполагает просмотр потока битов и синхронное перемещение от корня вниз по дереву Хаффмена в соответствии со считанным значением до тех пор, пока не будет достигнут лист, то есть декодировано очередное кодовое слово, после чего распознавание следующего слова вновь начинается с вершины дерева.

Классический алгоритм Хаффмена имеет один существенный недостаток. Для восстановления содержимого сжатого сообщения декодер должен знать таблицу частот, которой пользовался кодер. Следовательно, длина сжатого сообщения увеличивается, на длину таблицы частот, которая должна посылаться впереди данных, что может свести на нет все усилия по сжатию сообщения. Кроме того, необходимость наличия полной частотной статистики перед началом собственно кодирования требует двух проходов по сообщению: одного - для построения модели сообщения (таблицы частот и дерева Хаффмена), другого - для кодирования.

6.     

. Программная реализация метода кодирования Хаффмена

Написанная нами программа представляет собой окно, в котором расположены элементы:

Кнопка «Выберите файл с текстом» - открывает диалоговое окно, где пользователь должен выбрать файл с текстом, который он желает закодировать.

Кнопка «Кодировать текст» - непосредственно вызывает процедуру кодирования, и выводит готовый код в текстовое поле.

Кнопка «Сохранить в файл» - сохраняет готовый код в текстовый файл с названием «Kodirovanie.txt» в директорию с исходным файлом.

Так же на форме есть два текстовых поля, в один из них выводиться кодируемый текст, а в другое уже готовый код после процедуры кодирования.

Внешний вид программы представлен на рисунке 5.

Рисунок 5 - Рабочее окно программы

.       

. Программный код реализуемого метода

Объявление глобальных переменных:

var

          Form1: TForm1;

Rod, S: array [1..256] of char;:array [1..256] of integer;:array [1..256] of boolean;: array [1..256] of string;kvors:byte; sss:string;

Процедура считывания текста из файла и составления таблицы частот:

procedure tabl_chastot ;j,i:integer;est: boolean;Form1 do begin('выберите нужный вам файл', mtinformation, [mbOk], 0);

                   opendialog1.Filter:='текстовые файлы|*.txt|все|*';

                    if opendialog1.Execute and fileexists(opendialog1.Filename) then

                    else messagedlg('Что то не так с файлом', mtwarning, [mbOk], 0);

                    sss:=memo1.Text;;:=0 ;i:=1 to length(sss) do begin

                    est:=false;

                             for j:=1 to kvors do begin

                                      if sss[i]=s[j] then begin

                                      C[j]:=C[j]+1 ;

                                       est:=true;

                                       end;;

                            if not est then begin

                            kvors:=kvors+1 ;

                            S[kvors]:=sss[i] ;

                            c[kvors]:=1

                             end;

                    end;;

Функция поиска минимального среди количеств повторений символов в тексте:

function imin():integer ;min: real;j,i:integer ;:=1E+30;:=0;

         for j:=1 to kvors do begin

                   if f[j]=true then begin

                             if C[j]< min then begin

                            min:=C[j];

                            imin:=j;

                            end;

                   end;

          end;

end;

Процедура кодирования текста:

procedure glavnaya ;i,j,k,n1,n2: integer;i:=1 to kvors do begin[i]:=S[i];[i]:=true;[i]:='';;k:=1 to kvors-1 do begin:=imin(); f[n1]:=false;:=imin() ;[n2]:=C[n2]+C[n1];i:=1 to kvors do beginrod[i]=rod[n2] then kod[i]:='0'+kod[i]rod[i]=rod[n1] then begin[i]:='1'+kod[i] ;[i]:=rod[n2] ;;;.Edit1.Text:='';i:=1 to length(sss) do beginj:=1 to kvors do beginsss[i]=S[j] then form1.Edit1.Text:=form1.Edit1.Text+kod[j]; ;

end; end; end;

Процедура обработки события нажатие кнопки «Выберите файл с текстом»:

procedure TForm1.Button1Click(Sender: TObject);

         tabl_chastot;

end;

Процедура обработки события нажатие кнопки «Кодировать текст»:

procedure TForm1.Button2Click(Sender: TObject);

         glavnaya;

end;

         Процедура обработки события нажатие кнопки «Сохранить в файл»

procedure TForm1.Button3Click(Sender: TObject);f: textFile;(f, 'Kodirovanie.txt');(f);(f, edit1.text);

                   closefile(f);

end;

end.

Выводы

В ходе проделанной работы мы познакомились со средой разработки Borland Delphi 7.0, изучили основы объектно-ориентированного программирования, изучили некоторые задачи оптимизации и алгоритмы их решения. Подробно изучили метод кодирования текста Хаффмена и получили практические навыки по программированию и решению поставленных задач.

Список использованных источников

1.      Валентин Озеров «Советы по Delphi», 1999

.        Зуев Е.А. Программирование на языке Turbo Pascal 6. 0,7.0. - М.: Радио и связь, Веста, 1993.

.        Фаронов В.В. Turbo Pascal 7.0. Начальный курс. - М.: Нолидж, 2000.

.        Фаронов В.В. «DELPHI. Программирование на языке высокого уровня». - Питер, 2005.

.        Дятченко Д.А. Методические указания к выполнению курсовой работы по дисциплине «Программирование и алгоритмическе языки» - Северодонецк, 2005.

.        Методические указания /Сост. Е.Р. Пантелеев, М.М. Хаджар, ИГТА, 2004

.        http://ru.wikipedia.org/wiki/Delphi


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!