Лекция 1 по программированию и алгоритмизации.pptx
- Количество слайдов: 32
Программирование и основы алгоритмизации лекции – 18 часов; лабораторные работы – 18 часов
Введение Программирование — процесс создания компьютерных программ с помощью языков программирования, реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. Язык программирования — формальная знаковая система, предназначенная для описания алгоритмов в форме программы, которая удобна для исполнителя (например, компьютера). Языки программирования делятся на машинно-независимые (Си, Си++, Паскаль и др. ) и машинно-ориентированные (язык ассемблера). Машинно-независимые языки позволяют быстро писать довольно сложные программы. Машинно-зависимые языки применяются в тех случаях, когда необходимо построить наиболее компактный машинный код и создать самые быстродействующие программы. Они оперируют непосредственно ячейками памяти и программно-доступными элементами микропроцессора.
Введение Компьютерные программы применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами. Алгоритмизация — процесс систематического составления алгоритмов для решения поставленных прикладных задач.
Введение Алгоритмический язык программирования – формальный язык, используемый для записи, реализации и изучения алгоритмов. Всякий язык программирования является алгоритмическим языком, но не всякий алгоритмический язык пригоден для использования в качестве языка программирования. Алгоритмический язык образуют три его составляющие: алфавит, синтаксис и семантика. Алфавит – фиксированный для данного языка набор символов (букв, цифр, специальных знаков и т. д. ), которые могут быть использованы при написании программы. Синтаксис – правила построения из символов алфавита специальных конструкций, с помощью которых составляется алгоритм. Семантика – система правил толкования конструкций языка. Программа составляется с помощью соединения символов алфавита в соответствии с синтаксическими правилами и с учетом правил семантики.
Введение Алгоритм — это точный набор инструкций, описывающих порядок действий некоторого исполнителя достижения результата, решения некоторой задачи за конечное число шагов. Основные свойства алгоритмов: 1. Понятность для исполнителя — исполнитель алгоритма должен понимать, как его выполнять. Иными словами, имея алгоритм и произвольный вариант исходных данных, исполнитель должен знать, как надо действовать для выполнения этого алгоритма. 2. Дискретность (прерывность, раздельность) — алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определенных) шагов (этапов). 3. Определенность — каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
Введение 4. Результативность (или конечность) состоит в том, что за конечное число шагов алгоритм либо должен приводить к решению задачи, либо после конечного числа шагов останавливаться из-за невозможности получить решение с выдачей соответствующего сообщения, либо неограниченно продолжаться в течение времени, отведенного для исполнения алгоритма, с выдачей промежуточных результатов. 5. Массовость означает, что алгоритм решения задачи разрабатывается в общем виде, т. е. он должен быть применим для некоторого класса задач, различающихся лишь исходными данными. При этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма.
Основные виды программных продуктов Системные программные продукты – это, в первую очередь, операционная система, в задачи которой входит: управление работой устройств компьютера; работа с файлами; управление программами (запуск, выделение памяти и других ресурсов и т. п. ); взаимодействие с пользователем. Прикладные программные продукты представляют собой комплекс программ, с помощью которых на данном рабочем месте выполняются конкретные задания. Инструментальные программные продукты предназначены для использования в ходе проектирования, разработки и сопровождения программ.
Этапы проектирования программных продуктов 1. Составление технического задания на программирование Этап анализа и спецификации программ, жизненного цикла программных продуктов. При составлений технического задания требуется: • определить платформу разрабатываемой программы – тип операционной системы; • определить необходимость разработки программы, которую можно переносить на различные платформы; • выбрать методы решения задачи; • разработать обобщенный алгоритм решения комплекса задач, функциональную структуру алгоритма или состав объектов; • определить требования к комплексу технических средств системы обработки информации, интерфейсу конечного пользователя.
Этапы проектирования программных продуктов 2. Технический проект На данном этапе выполняется комплекс наиболее важных работ, а именно: • с учетом принятого подхода к проектированию программного продукта разрабатывается детальный алгоритм обработки данных или уточняется состав объектов и их свойств, методов обработки, событий, запускающих методы обработки; • определяется состав общесистемного программного обеспечения, включающий базовые средства; • разрабатывается внутренняя структура программного продукта, образованная отдельными программными модулями; • осуществляется выбор инструментальных средств разработки программных модулей. Работы данного этапа в существенной степени зависят от принятых решений по технической части системы обработки данных и операционной среде, от выбранных инструментальных средств проектирования алгоритмов и программ, технологии работ. .
Этапы проектирования программных продуктов 3. Рабочая документация (рабочий проект) На данном этапе осуществляется адаптация базовых средств программного обеспечения (операционной системы, СУБД, инструментальных сред конечного пользователя - текстовых редакторов, электронных таблиц и т. п. ). Выполняется разработка программных модулей или методов обработки объектов – собственно программирование или создание программного кода. Проводятся автономная и комплексная отладка программного продукта, испытание работоспособности программных модулей и базовых программных средств. Для комплексной отладки готовится контрольный пример, который позволяет проверить соответствие возможностей программного продукта заданным спецификациям.
Этапы проектирования программных продуктов Основной результат работ этого этапа – создание эксплуатационной документации на программный продукт: описание применения – дает общую характеристику программного изделия с указанием сферы его применения, требований к базовому программному обеспечению, комплексу технических средств; руководство пользователя – включает детальное описание функциональных возможностей и технологии работы с программным продуктом. Данный вид документации ориентирован на конечного пользователя и содержит необходимую информацию для самостоятельного освоения и нормальной работы пользователя (с учетом требуемой квалификации пользователя); руководство программиста (оператора) – указывает особенности установки (инсталляции) программного продукта и его внутренней структуры – состав и назначение модулей, правила эксплуатации и обеспечения надежной и качественной работы программного продукта. В ряде случаев на данном этапе для программных продуктов массового применения создаются обучающие системы, демоверсии, гипертекстовые системы помощи.
Этапы проектирования программных продуктов 4. Ввод в действие Готовый программный продукт сначала проходит опытную эксплуатацию (пробный рынок продаж), а затем сдается в промышленную эксплуатацию (тиражирование и распространение программного продукта). Жизненный цикл программных продуктов (ПО) — период времени, который начинается с момента принятия решения о необходимости создания программного продукта и заканчивается в момент его полного изъятия из эксплуатации. Этот цикл — процесс построения и развития ПО.
Основные принципы построения программных алгоритмов • нисходящее программирование; • модульное программирование; • структурное программирование
Нисходящее программирование последовательное разложение общей функции обработки данных на простые функциональные элементы ( «сверхувниз» ). В результате строится иерархическая схема, отражающая состав и взаимоподчиненность отдельных функций, которая носит название функциональная структура алгоритма (ФСА) приложения. Последовательность действий по разработке функциональной структуры алгоритма приложения: • определяются цели автоматизации предметной области и их иерархия (цельподцель); • устанавливается состав приложений (задач обработки), обеспечивающих реализацию поставленных целей; • уточняется характер взаимосвязи приложений и их основные характеристики (информация для решения задач, время и периодичность решения, условия выполнения и др. ); • определяются необходимые для решения задач функции обработки данных; • выполняется декомпозиция функций обработки до необходимой структурной сложности, реализуемой предполагаемым инструментарием.
Нисходящее программирование Функциональная структура приложения Ц - цель; п. Ц - подцель; П - приложение; Ф – функция
Модульное программирование Модуль – логически взаимосвязанная совокупность функциональных элементов, оформленных в виде отдельных частей программы. Модуль характеризуют: • один вход и один выход – на входе программный модуль получает определенный набор исходных данных, выполняет содержательную обработку и возвращает один набор результатных данных, т. е. реализуется стандартный принцип IPO (Input - Process - Output) – вход-процесс-выход; • функциональная завершенность – модуль выполняет перечень регламентированных операций для реализации каждой отдельной функции в полном составе, достаточных для завершения начатой обработки; • логическая независимость – результат работы программного модуля зависит только от исходных данных, но не зависит от работы других модулей; • слабые информационные связи с другими программными модулями – обмен информацией между модулями должен быть по возможности минимизирован; • обозримый по размеру и сложности программный элемент.
Модульное программирование Каждый модуль состоит из спецификации (сигнатуры) и тела (семантики). Сигнатура определяет правила использования модуля. Семантика определяет способ реализации процесса обработки. При модульном программировании сначала определяются состав и подчиненность функций, а затем – набор программных модулей, реализующих эти функции. Однотипные функции реализуются одними и теми же модулями. Функция верхнего уровня обеспечивается главным модулем – он управляет выполнением нижестоящих функций, которым соответствуют подчиненные модули. void main(void) { тело главного модуля; }
Модульное программирование При определении набора модулей, реализующих функции конкретного алгоритма, необходимо учитывать следующее: • каждый модуль вызывается на выполнение вышестоящим модулем и, закончив работу, возвращает управление вызвавшему его модулю; • принятие основных решений в алгоритме выносится на максимально высокий по иерархии уровень; • для использования одной и той же функции в разных местах алгоритма создается один модуль, который вызывается на выполнение по мере необходимости. В результате дальнейшей детализации алгоритма создается функционально-модульная схема (ФМС) алгоритма приложения, которая является основой для программирования.
Модульное программирование Функционально-модульная структура приложения
Алгоритмы большой сложности обычно представляются с помощью схем двух видов: • обобщенной схемы алгоритма – раскрывает общий принцип функционирования алгоритма и основные логические связи между отдельными модулями на уровне обработки информации (ввод и редактирование данных, вычисления, печать результатов и т. п. ); • детальной схемы алгоритма – представляет содержание каждого элемента обобщенной схемы с использованием управляющих структур в блок-схемах алгоритма, псевдокода либо алгоритмических языков высокого уровня.
Структурное программирование – основано на модульной структуре программного продукта и типовых управляющих структурах алгоритмов обработки данных различных программных модулей.
Основные алгоритмические структуры Следование Развилка Полная развилка Неполная развилка Цикл С предусловием (ПОКА) С предусловием (ДО) С параметром
Основные алгоритмические структуры Развилка Полная развилка if(условие) { операции, если условие выполняется; } else { операции, если условие не выполняется; } Неполная развилка if(условие) { операции, если условие выполняется; }
Основные алгоритмические структуры Цикл нет да С предусловием (ПОКА) С предусловием (ДО) do С параметром for(параметр = начальное значение; параметр != конечное значение; while(условие выполняется) операции; параметр = параметр + шаг) { } { операции; while(условие выполняется); операции; } } {
Основные подходы к проектированию программных алгоритмов Метод последовательного уточнения алгоритма (пошаговая детализация, нисходящая разработка). Алгоритм сначала формулируется в самых «крупных» командах, при этом в записи алгоритма могут использоваться команды, выходящие за рамки возможностей исполнителя. На каждом последующем этапе отдельные детали алгоритма уточняются. Недоступные исполнителю команды записываются как вызов вспомогательных алгоритмов. После этого строятся вспомогательные алгоритмы. Процесс продолжается до тех пор, пока все алгоритмы не будут состоять из команд, понятных исполнителю. Данный подход к проектированию алгоритмов позволяет повысить качество и надежность разрабатываемых программ. Кроме того, появляется возможность использовать отдельные модули программы при решении других задач.
Основные подходы к проектированию программных алгоритмов Восходящая разработка. Осуществляется последовательное построение программы из уже имеющихся элементов, начиная с примитивов, предоставляемых выбранным языком программирования. Процесс заканчивается получением требуемой готовой программы. На каждом этапе из имеющихся элементов строятся новые, более мощные (в контексте разрабатываемой программы) элементы. Они используются на следующем этапе для построения еще более сложных элементов и так далее до тех пор, пока не будут получены элементы, из которых можно непосредственно составить требуемую программу. На практике при разработке алгоритмов обычно используется сочетание методов нисходящего и восходящего проектирования.
Эффективность алгоритмов В значительной степени эффективность алгоритма зависит от его сложности — количественной характеристики, указывающей, сколько времени работает алгоритм (временная сложность) либо какой объем памяти необходим для его выполнения (емкостная сложность). Время выполнения алгоритма – это величина, равная произведению числа действий (элементарных шагов, команд) n на среднее время выполнения одного действия t. Емкостная сложность (трудоемкость) алгоритма определяется числом ячеек памяти, используемых в процессе его исполнения.
Функциональная структура вычислительной машины Подавляющее большинство современных вычислительных машин построено по принципу архитектуры Джона фон Неймана.
Память вычислительной машины Память – способность объекта обеспечивать хранение данных. Память состоит из ячеек, в каждой из которых содержится 1 бит информации, принимающий значения « 0» или « 1» . Биты обрабатывают группами фиксированного размера. Для этого память организуется таким образом, что группы по n бит могут записываться и считываться за одну базовую операцию. Группа из n бит называется словом информации, а значение n – длиной слова. Слова последовательно располагаются в памяти компьютера. Восемь последовательных битов называются байтом. Типичный способ расположения битов в байте: 1 килобайт (Кбайт) = 210 = 1 024 байт 1 мегабайт (Мбайт) = 210 Кбайт = 220 байт = 1 048 576 байт 1 гигабайт (Гбайт) = 210 Мбайт = 230 байт = 1 073 741 824 байт
Память вычислительной машины Для доступа к памяти с целью записи или чтения отдельных элементов информации необходимы имена, или адреса, определяющие их расположение в памяти. Имя переменной, определяющее её положение в памяти называется идентификатором. Для обозначения адресов используются числа из диапазона от 0 до 2 k-1 со значением k, достаточным для адресации всей памяти компьютера. Все 2 k адресов составляют адресное пространство компьютера. Чаще всего адреса назначаются байтам памяти. Память, в которой каждый байт имеет свой адрес, называется памятью с байтовой адресацией. При этом последовательные байты имеют адреса 0, 1, 2 и т. д.
Способы адресации памяти Обратная адресация Прямая адресация Компиляторы высокоуровневых языков поддерживают прямой способ адресации.


