Сортировка данных строкового типа методом перестановок с использованием процедур и функций

 

Содержание

Введение 3

1 Теоретические основы 4

      1.1 Системные требования 4

      1.2Анализ  технического задания 4

      1.3 Среда программирования Delphi 6

      1.4 Основные принципы  структурного программирования 12

      1.5 Создание консольного  приложения в среде  Delphi 15

      1.6 Компиляция и выполнение 18

      1.7 Массивы на языке  Delphi 19

      1.8 Алгоритм ввода  массива 20

      1.9 Алгоритм вывода  массива 20

      1.10 Поиск минимального  элемента массива 21

      1.11 Алгоритм сортировки 21

      1.12 Реализация алгоритмов  с использованием  подпрограмм 21

      1.13 Алгоритм решения  задачи 22

2 Разработка программы 23

      2.1 Создание консольного  приложения 23

      2.2 Объявление основных  переменных и констант 24

      2.3 Реализация алгоритмов  ввода и вывода  массива 25

      2.4 Реализация алгоритма  сортировки 27

      2.5 Тестирование и  отладка 28

      2.6 Руководство пользователя 29

Заключение 30 
 
 

 

Введение

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

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

     Задачей является разработать сортировку данных в массивах целых чисел методом  сортировки перестановками.

     Данную  работу решено разработать на языке  программирования Delphi.

     Delphi был выбран вследствие того, что он прост в освоении и применении.

     Delphi не интерпретируемый язык –  он компилируется в машинный  код, делая это исключительно быстро. Обработка строк в Delphi особенно быстра, что важно при разработке тяжеловесных языковых приложений.

     В сравнении с другими языками, грамотно спроектированные Delphi – приложения запускаются быстро, потому что они не должны ждать предварительной загрузки фреймворков. Для меня это главный плюс. Приложения, которые долго загружаются, имеют низкую производительность, независимо от того, как быстро они работают после загрузки.

 

      1 Теоретические основы

     1.1 Системные требования

     Данный  программный продукт работает на операционных системах семейства Windows.

     Процессор с  тактовой частотой не менее 200 МГц. И оперативной памятью не менее 32 МБ.

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

     Место на жестком диске 4 КБ.

     1.2 Анализ технического задания

     Delphi – это среда объектно-ориентированного программирования, основанная на языке Object Pascal. Используется для разработки и поддержки программного обеспечения. В отличие от своего прародителя, языка Pascal, многофункционален и удобен тем, что имеет визуальный редактор приложения, который позволяет создавать внешний облик будущей программы пользователя.

     В ходе работы программа постоянно имеет дело с элементами данных. Обрабатываемые данные могут быть представлены константами, переменными, выражениями.

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

     Константа – явно записанное значение, относящееся  к определенному типу данных языка Delphi и допустимое к применению в  выражениях.

     const  имя - константы = значение;

     Один  из важнейших операторов языка Delphi – это оператор присваивания.

     Оператор  присваивания – это оператор языка Delphi , который заносит в переменную новое значение.

     Оператор  присваивания записывается в следующей форме :

     Переменная: = значение;

     Пара  символов « := » , разделяющая правую и левую части оператора, рассматривается как знак присваивания . В левой части оператора присваивания стоит идентификатор – имя декларированной к данному моменту переменной. В правой части записано выражение. Результат его вычисления записывается в переменную, указанную в левой части. Старое значение этой переменной теряется. Тип значения выражения должен соответствовать типу переменной в левой части оператора. В конце оператора присваивания ставится точка с запятой.

     Оператор  присваивания, как и любые другие операторы языка  Delphi, может располагаться  и выполняться только между составным  оператором begin / end.

     Составной оператор – это группа операторов и описаний языка Delphi, объединенных в один блок.

     Составной оператор начинается с ключевого  слова begin, а завершается ключевым словом end, за которым обычно ставится точка с запятой. В предшествующем операторе точку с запятой  перед словом end указывать не обязательно.

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

     Условный  оператор if.

     Условный  оператор – это оператор, который  выполняет команду или группу команд в зависимости от определенного условия. Условие в условном операторе представляется выражением логического типа.

     Условный  оператор записывают в сокращенной  или полной форме.

     В своей сортировке я использовала только сокращённую форму условного оператора. Условный оператор содержит два основных элемента: условие и один или несколько операторов.

     Сокращённый условный оператор выполняет действие, если условие истинно. Если условие  ложно, никаких действий не производится.

     Сокращённая форма условного оператора выглядит следующем образом: If условие then оператор.

     В качестве оператора, идущего за ключевым словом then и выполняемого в зависимости  от условия, может использоваться любая  команда или оператор Delphi. Если требуется  выполнить в зависимости от условия  группу команд, то её надо ухватить скобками begin и end (представить как составной  оператор).

           if a[j] < min then

           begin

             min := a[j];

             k := j;

           end; 

     Если  одна и та же последовательность команд программы должна быть выполнена  несколько раз, для её записи используют оператор цикла.

     Оператор  цикла – это оператор, организующий многократное выполнение определенной команды или группы команд.  

     Многократно выполняемую команду или группу команд в операторе цикла называют телом цикла.

     Число повторов тела цикла может рассчитываться разными способами. В зависимости  от способа используют безусловный  оператор цикла или условный оператор цикла.

     Если  заранее известно, сколько раз  должны быть повторены команды в  теле цикла, используют безусловный  оператор цикла, который также называют циклом со счётчиком.

     Безусловный оператор цикла – это оператор цикла, в котором тело цикла повторяется  фиксированное число раз.

     Безусловный оператор цикла записывается следующим  образом:

     for переменная – счетчик: = начальное – значение

     to конечное – значение do тело цикла.

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

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

     1.3 Среда программирования Delphi

     Внешний вид среды программирования 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 близок к той модели приложений, что используется в Windows 95.

     Основные составные  части Delphi:

    • Дизайнер Форм (Form Designer)
    • Окно Редактора Исходного Текста (Editor Window)
    • Палитра Компонент (Component Palette)
    • Инспектор Объектов (Object Inspector)
    • Справочник (On-line help).

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

     Программисты  на Delphi проводят большинство времени, переключаясь между Дизайнером Форм и Окном Редактора Исходного Текста (которое для краткости называют Редактор). Прежде чем начинать, нужно распознать  два важных элемента (Рисунок 1.1, рисунок 1.2).

     

 

Рисунок 1.1 – Дизайнер Форм  

     

Рисунок 1.2 – Окно редактора  

     Дизайнер  Форм первоначально состоит из одного пустого окна, которое заполняется  всевозможными объектами, выбранными на Палитре Компонент.

     Логика  является движущей силой программы и Редактор – то место, где она "кодируется".

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

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

     

Рисунок 1.3 – Палитра Компонент 

     Слева от Дизайнера Форм можно видеть Инспектор Объектов (рисунок 4). Заметим, что информация в Инспекторе Объектов меняется в зависимости от объекта, выбранного на форме. Важно понять, что каждый компонент является настоящим объектом и можно менять его вид и поведение с помощью Инспектора Объектов.

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

     

 

Рисунок 1.4 – Инспектор Объектов 

     Страница  событий связана с Редактором; если дважды щелкнуть мышкой на правую сторону какого-нибудь пункта, то соответствующий  данному событию код автоматически  запишется в Редактор, сам Редактор немедленно получит фокус, и  сразу  же мы имеем возможность добавить код обработчика данного события. Данный аспект среды программирования Delphi будет еще обсуждаться позднее.

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

     

Рисунок 1.5 – Справочник

     Справочник  является контекстно-зависимым; при  нажатии клавиши F1, мы получим подсказку, соответствующую текущей ситуации. Например, находясь в Инспекторе Объектов, выберите какое-нибудь свойство и нажмите F1 – мы получим справку о назначении данного свойства. Если в любой момент работы в среде Delphi возникает неясность или затруднение - жмите F1 и необходимая информация появится на экране.

     Дополнительные элементы.

     Инструмент, который можно воспринимать как  вспомогательный  для среды программирования: меню (Menu System)

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

     В дополнение к инструментам, обсуждавшимся  выше, существуют пять средств, поставляемых вместе с Delphi. Эти инструментальные средства:

  1. Встроенный отладчик
  2. Внешний отладчик (поставляется отдельно)
  3. Компилятор командной строки
  4. WinSight
  5. WinSpector.

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

     На Delphi нам понадобится понять, как  использовать отладчик Delphi. Отладчик позволяет  Вам пройти пошагово по исходному  тексту программы, выполняя по одной  строке за раз, и открыть просмотровое окно (Watch), в котором будут отражаться текущие значения переменных программы.

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

     Теперь  о компиляторах. Внешний компилятор, называется DCC.EXE, полезен, в основном, если мы хотим скомпилировать приложение перед отладкой его во внешнем  отладчике. Большинство программистов, наверняка, посчитают, то гораздо проще  компилировать в среде Delphi, нежели пытаться создать программу из командной  строки. Однако, всегда найдется несколько  оригиналов, которые будут чувствовать  себя счастливее, используя компилятор командной строки. Но это факт – возможно, создать и откомпилировать программу на Delphi используя только DCC.EXE и еще одну программу CONVERT.EXE, которая поможет создать формы. Однако, данный подход неудобен для большинства.

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

     Первый  шаг – создать поддиректорию для программы. Лучше всего создать директорию, где будут храниться все Ваши программы и в ней – создать поддиректорию для данной конкретной программы. Например, Вы можете создать директорию MYCODE и внутри нее - вторую директорию TIPS1, которая содержала бы программу, над которой Вы только что работали.

     После создания поддиректории для хранения Вашей программы нужно выбрать  пункт меню File | Save Project. Сохранить  нужно будет два файла. Первый – модуль (unit), над которым Вы работали, второй – главный файл проекта, который "владеет" Вашей программой. Сохраните модуль под именем MAIN.PAS и проект под именем TIPS1.DPR. (Любой файл с расширением PAS и словом "unit" в начале является модулем.)

     1.4 Основные принципы  структурного программирования

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

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

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

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

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

     

Рисунок 1.6 - Алгоритмическое изображение оператора

     Второй  структурный оператор называется условный оператор. Достаточно часто одна или другая задачи должны исполняться в зависимости от определённого условия, которое зависит от результатов выполнения предыдущей программы или от внешних устройств. Каждая из таких задач называется плечом условного оператора (рисунок 1.7).

     

Рисунок 1.7 - Алгоритмическое изображение оператора

     Условный  оператор может использоваться в  неполном варианте, когда одно из плеч алгоритма отсутствует (рисунок 1.8):

     

Рисунок 1.8 - Алгоритмическое изображение оператора

     Третий  структурный оператор - это оператор цикла с проверкой условия после тела цикла. Такой оператор легко реализуется на языке программирования ассемблер при помощи команды условного или безусловного перехода. Отличие от условного оператора заключается в том, что передача управления осуществляется не вперёд, а назад. На языках программирования высокого уровня такой оператор входит в состав языка (оператор do..while в языке программирования C или оператор repeat..until в языке программирования PASCAL (рисунок 1.9)).

Рисунок 1.9 - Алгоритмическое изображение оператора

     Четвёртый структурный оператор - это оператор цикла с проверкой условия до тела цикла. В отличие от предыдущего оператора тело цикла в этом операторе может ни разу не выполниться, если условие цикла сразу же выполнено. Этот оператор, как и условный оператор невозможно реализовать на одной машинной команде (рисунок 1.10).

Рисунок 1.10 - Алгоритмическое изображение оператора

     1.5 Создание консольного  приложения в среде Delphi

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

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

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

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

     Итак, давайте последовательно создадим консольное приложение:

     1 Запустите среду Delphi, выберите в главном меню команду File | Close All, а затем – команду File | New

     2 Выберите “Console Application” и нажмите “OK” (рисунок 1.11)

Рисунок 1.11 - Окно среды Delphi для создания нового проекта

     3 В появившемся окне между ключевыми словами BEGIN и END введите следующие строчки (рисунок 1.12)

     

Рисунок 1.12 - Текст простейшей консольной программы в окне редактора кода

     4 Скомпилируйте и выполните эту программу, щелкнув на пункте Run | Run главного меню среды Delphi. На экране появится черное окно (рисунок 13.1), в левом верхнем углу которого будет содержаться текст "Press ENTER to exit..." ("Нажмите клавишу Enter ...")