Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_prikl.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
900.41 Кб
Скачать

14. Алгоритм сортировки методом вставки

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

Для их сортировки должны повторяться следующие действия. Поднять карточку с именем, первую в неотсортированной части списка, сдвинуть вниз карточки с именами, которые находятся ни­же по алфавиту, чем имя на взятой карточке, а затем поместить эту карточку на освободившееся место в списке. Текст программы сор­тировки на языке псевдокода выглядит так:

procedure Сортировка (<список>) assign N the value 2;

while (значение N не превышает <длина списка>)

do (Выбрать N-й элемент списка в качестве опорного; Переместить этот элемент во временное хранилище, оставив в списке пустое место;

while (над пустым местом есть имя, которое по алфавиту размещается ниже, чем опорный элемент)

do (переместить имя, находящееся над пустым местом вниз, оставив в прежней позиции пустое место); Поместить опорный элемент на пустое место в списке assign N the value N+1

здесь N - счетчик, параметр <длина списка> - количество эле­ментов в списке.

Программа сортирует список, многократно повторяя следую­щие действия: «Элемент извлекается из списка, а затем вставляется на надлежащее ему место».

Каждое выполнение тела внешнего цикла приводит к тому, что внутренний цикл инициализируется и выполняется до тех пор, пока не будет выполнено условие его окончания. Условие окончания внешнего цикла выполняется, когда значение счетчика N превысит длину сортируемого списка.

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

15. Модульное программирование

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

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

В программировании под модулем понимается отдельная подпрограмма, а подпрограммы часто называются процедурами или процедурами-функциями. Поэтому модульное программирование еще называется процедурным.

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

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

Среди множества модулей различают:

  • головной модуль – управляет запуском программного продукта (существует в единственном числе);

  • управляющий модуль – обеспечивает вызов других модулей на обработку;

  • рабочие модули – выполняют функции обработки;

  • сервисные модули и библиотеки, утилиты – реализуют обслуживающие функции.

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

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

Модуль должен обладать следующими свойствами:

  • один вход и один выход – на входе программный модуль получает определенный набор исходных данных, выполняет содержательную обработку и возвращает один набор результатных данных, т.е. реализуется стандартный принцип IPO (Input–Process–Output вход-процесс-выход);

  • функциональная завершенность – модуль выполняет перечень регламентированных операций для реализации каждой отдельной функции в полном составе, достаточных для завершения начатой обработки;

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

  • слабые информационные связи с другими программными модулями – обмен информацией между модулями должен быть по возможности минимизирован;

  • обозримый по размеру и сложности программный код.

Установить разумные размеры модулей трудно, хотя стоит придерживаться правила: выделять модули, пока это целесообразно. Обычно размеры модуля ограничены несколькими десятками строк кода на языке высокого уровня.

Модули содержат:

  • определение доступных для обработки данных;

  • операции обработки данных;

  • схемы взаимосвязи с другими модулями.

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

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

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

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

  • принятие основных решений в алгоритме выносится на максимально «высокий» по иерархии уровень;

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

В результате дальнейшей детализации алгоритма создается функционально-модульная схема (ФМС) алгоритма приложения, являющаяся основой для программирования (рис. 2).

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

Рис. 3. Функционально-модульная структура алгоритма приложения

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

  • точки (момент, условие) начала диалога;

  • инициатор диалога – человек или программный продукт;

  • параметры и содержание диалога – сообщения, состав и структура меню, экранные формы и т.п.;

  • реакция программного продукта на завершение диалога.

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

Графический интерфейс пользователя (GUI, Graphics User Interface) является обязательным компонентом большинства современных программных продуктов, ориентированных на работу конечного пользователя.

16. Нисходящее проектирование

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

Спецификация задачи является ее первичным проектом. От неё мы движемся к программе, постепенно уточняя описание.

Постепенное уточнение проекта называется методом проектирования сверху вниз (пошаговой детализации или нисходящего проектирования).

Пример 1. В качестве примера рассмотрим проект одевания ребенка.

Решение:

1. Первичная цель:

Одеть.

2. Конкретизация цели на первом шаге:

Одеть нижнюю половину.

Одеть верхнюю половину.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]