Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика.doc
Скачиваний:
404
Добавлен:
10.04.2015
Размер:
4.26 Mб
Скачать

Тема 7. Основы алгоритмизации и программирования

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

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

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

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

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

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

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

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

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

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

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

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

Существует аналогия между экономическими показателями и переменными с индексами. Например, показатель П1 (КОД_МАТЕРИЛА, ЦЕНА) может быть представлен как С(i), где С - цена материала с i-м кодом материала. Переменная С соответствует атрибуту-основанию, а индекс i - атрибуту-признаку.

Поступление материалов на склад обозначим переменной P(i, j, m, n), где j - номер склада; m - код поставщика; n - дата. Тогда, для определения стоимости материалов имеется расчетное соотношение S (i, j, m, n) = Р(i, j, m, n) С( i). Таким образом, закономерности, установленные в математике для арифметических операций над переменными с индексами, трансформируются в правила арифметических операций над показателями.

Модель арифметических вычислений в ИС основывается на графе взаимосвязи показателей (файлов). В графе G (S, U) множество вершин S = { s ( i ) } представляют все показатели (файлы), хранящиеся в БД. Дуга U( i, j ) от S( i ) к S(j) существует в том случае, если есть расчетное соотношение для показателя S(j) и в правой части его встречается показатель S( i ).

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

Алгоритм имеет ряд обязательных свойств (атрибутов): дискретность, определенность (или детерминированность), результативность (или конечность), массовость.

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

Программа – это алгоритм, записанный на специальном алгоритмическом языке программирования, который может восприниматься ЭВМ.

Исполнитель алгоритма – это автоматическое устройство (ЭВМ, робот, станок с ЧПУ) или человек, выполняющие определенный набор команд.

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

Словесный способ предполагает словесное (без формул и таблиц) описание алгоритма, в принципе, с любой степенью детализации.

Формульно-словесный способ более компактный. В нем словесные описания сочетаются с формулами.

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

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

Табличный способ предполагает представление алгоритмов в виде таблицы решений и, в основном, носит вспомогательный характер.

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

Лекция №13

Технология программирования – это методы и средства создания программ. Эффективная технология программирования предполагает использование стандартов, прогрессивных инструментальных средств разработки, а также специальных методов и приёмов организации работ. Различают две технологии: структурное программирование; объектно-ориентированное программирование.

Структурное программирование является классической технологией разработки алгоритмов и программ. К его основным принципам относятся:

- разработка программ «сверху вниз» методом пошаговой детализации;

- модульное программирование;

  • структурное кодирование.

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

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

Объект – это совокупность свойств (параметров) определённых сущностей (отношений) и методов их обработки (программных средств).

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

Метод – это программа действий над объектом или его свойствами.

Событие – это характеристика изменения состояния объекта.

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

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

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

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

Инкапсуляция означает сочетание структур данных с методами их обработки в абстрактных типах данных – классах объектов.

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

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

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

- на системы с жёстким сценарием диалога – предполагают стандартизированное представление информации обмена в виде меню, действия запрос-ответ, запрос по формату;

- на дескрипторные системы – предполагают наличие стандартного формата ключевых слов сообщений;

- на тезаурусные системы 5;

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

Для создания диалоговых процессов и интерфейса пользователя наиболее подходят объектно-ориентированные инструментальные средства разработки программ. Так, в составе инструментов СУБД содержатся построители меню, с помощью которых создаётся ориентированная на конечного пользователя совокупность режимов и команд в виде главного меню и вложенных подменю, и конструкторы экранных форм, системы подсказок и другие объекты.

Как правило, интерфейс прикладных программных продуктов строится по типу графического, ориентированного на среду Windows интерфейса (например, Delphi – это среда разработки программ, ориентированных на работу в Windows). Определилась тенденция массового использования конечными пользователями интегрированных сред программирования (например, интегрированная среда программирования TURBO PASCAL 7.0).

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

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

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

- различные вспомогательные программы.

Языки программирования можно разделить на следующие классы:

- машинные (computer language) языки, воспринимаемые аппаратной частью компьютера (машинные коды);

- машинно-ориентированные (computer-oriented language) языки, предназначенные для использования на конкретных ЭВМ (ассемблеры);

- алгоритмические (algorithmic language) – языки, не зависящие от архитектуры компьютера (Паскаль, Фортран, Бейсик и др.);

- процедурно-ориентированные (procedure-oriented language) – языки, в которых есть средства описания программы как совокупности процедур (подпрограмм);

- проблемно-ориентированные (universal programming language) языки, предназначенные для решения задач из определенной профессиональной деятельности (Лисп, РПГ, Симула и др.);

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

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

- язык Си был изобретен для популярной ныне операционной системы UNIX. Он соединяет свойства языка высокого уровня с возможностью управления ресурсами компьютера, что обычно обеспечивается только при программировании на языке Ассемблера;

- язык Си++ представляет собой расширение языка Си. Язык облегчает создание сложных программ, реализует популярные в настоящее время концепции объектно-ориентированного программирования;

- язык Паскаль позволяет писать легко читаемые программы и содержит в себе все элементы, необходимые для соблюдения хорошего строгого стиля программирования. Это обусловливает большую популярность языка;

- язык Бейсик облегчает написание простых программ. Это – язык для начинающих. Множество версий этого языка иногда друг с другом не совместимы. Язык мало подходит для написания больших и сложных программ;

- языки Лисп и Пролог используют для построения экспертных систем.

Лекция №14

Для удовлетворения сложных информационных потребностей пользователи «общаются» с базой данных с помощью запросов.

Запрос представляет собой спецификацию (предписание) на специальном языке (базы данных) для обработки дан­ных. В реляционных СУБД запросы к базе данных выражают­ся, соответственно, на языке SQL.

Формирование запросов в СУБД может осуществляться в специальном редакторе (командный режим) или через нагляд­но-диалоговые средства (конструкторы) и пошаговые мастера формирования запросов. Сформированный запрос в виде SQL-инструкции сохраняется в файле базы данных и впослед­ствии специальной командой СУБД может запускаться (откры­ваться) на выполнение.

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

  • запросы на выборку данных;

  • запросы на изменение данных;

  • управляющие запросы.

Запросы на выборку являются наиболее часто применяемыми запросами. Обычно они реализуется SQL-инструкцией SELECT с предложением FROM. Результатом исполнения запроса на выборку является набор данных, который представляет временную таблицу со структурой, определяемой параметрами запроса и полей таблиц, из которых выбираются данные. В отличие от режимов поиска и фильтра­ции запросами на выборку данные выбираются из закрытых таблиц базы данных.

Результаты запросов на выборку по­мещаются в специальную временную таблицу, размещаемую на период исполнения запроса в оперативной па­мяти. В этом смысле запрос в реляционных СУБД тождестве­нен просто таблице данных, «открытие» которой осуществля­ется в результате выполнения запроса. Из этого следует возможность исполнения запросов над результатами исполнения других запросов, что об­легчает построение запросов при решении сложных задач.

Запросы на выборку классифицируются по двум критери­ям — по формированию условий выборки и по схеме отбора данных.

По формированию условий выборки запросы можно под­разделить на:

запросы со статическими (неизменяемыми) условиями отбора;

запросы с параметрами;

запросы с подчиненными запросами.

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

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

По схеме отбора данных запросы на выборку подразделя­ются на запросы:

на выборку данных из одной таблицы;

на выборку данных в один набор из нескольких таблиц;

на объединение данных.

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

Различают запросы на выборку всех записей с заданным набором полей и запросы на выборку подмножества за­писей.

Пример запроса, формирующего список сотрудников организации из таблицы «Сотрудни­ки», но с сокращенным набором полей:

SELECT Сотрудники.Таб_№, Сотрудники.Фамилия, Телефон FROM Сотрудники;

В запросах на отбор подмножества записей в SQL-инст­рукции SELECT через предложение WHERE помещается выра­жение, определяющее условие отбора данных. Пример запроса на отбор подмножества за­писей из таблицы «Сотрудники» для формирования списка работников инженерно-технического и экономического профи­ля.

SELECT Фамилия, Должность FROM Сотрудники

WHERE ((Должность)=”Инженер” Or (Должность) = ”Экономист”);

В запросах на выборку данных широко применяются пре­дикаты отбора ALL, DISTINCT, DISTINCTROW и TOP п.

Пре­дикат ALL используется по умолчанию и устанавливает вывод в набор всех записей, формируемых по условию отбо­ра в предложении WHERE, и в большинстве слу­чаев в инструкции SELECT опускается.

Предикат DISTINCT' используется для исключения в набо­ре отбираемых данных тех записей, значения которых по опре­деленному полю повторяются.

В запросах на выборку помимо предложений FROM и WHERE используются предложения GROUP BY, НАVING и ORDER ВY для дополнительной обработки отбираемых запи­сей.

Предложение GRОUP ВY объединяет (группирует) записи с одинаковыми значениями определенных полей в одну запись.

Предложение НАVING выполняет функцию предложения WHERE, позволяя задавать дополнительные условия для отбо­ра сгруппированных предложением GROUP ВY записей.

Пред­ложение ORDER BY обеспечивает сортировку отобранных за­писей в зависимости от способа ASC (по возрастанию) или DESC (по убыванию).

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

SELECT Категория, Профиль FROM Подразделения WHERE ((Категория) <> ”Третья”) GROUP BY Категория, Профиль HAVING ((Профиль)=”Основной”)

ORDER BY Категория DESC;

В трактовке реляционных СУБД и языка SQL «пустых», т. е. неопределенных, значе­ний полей не бывает. Иначе говоря, значением числового поля может быть число, равное «О», а значением других типов полей (текстовые, дата) может быть нулевое значение—«Null».

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

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

SELECT Фамилия, Должность FROM Сотрудники WHERE ((Ученая_степень) Is Null);

Запросы данного типа подразделяются на запросы на сочетание данных, на соединение данных, на объединение данных.

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

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

В реляционных СУБД такие возможности предоставляются через вычисляемые поля и групповые операции в запросах над отбираемыми данными.

Вычисляемые поля. В инструкции SELECT в списке отбираемых полей добавляется выражение, по которому вычисляется новое поле, и посредством ключевого слова AS определяется его имя в формируемом наборе данных. Запрос, формирующий ведомость начислений сотрудникам с вычисляемым полем «ИТОГО».

SELECT Сотрудники.*, Оклад+ Перс_надб+Надб_ за_учстеп AS ИТОГО FROM Сотрудники;

Групповые операции. В процессе отбора и обработки дан­ных важное значение имеют группирование данных по значе­ниям какого-либо поля и осуществление тех или иных опера­ций над сгруппированными записями. Групповые операции осу­ществляются на основе SQL-предложения GROUP BY в сочетании со статистическими функциями SQL. В большин­стве диалектов языка SQL в состав инструкции SELECT допус­кается включение статистических функций, которые осу­ществляют групповые вычислительные операции над отбираемыми записями.

К числу статистических функций SQL относятся:

SUM (выражение) - вычисляет сумму набора значений;

AVG (выражение) – вычисляет среднее арифметическое набора чисел;

Min (выражение) – вычисляет минимальное значение из набора значений;

Max (выражение) – вычисляет максимальное значение из набора значений;

StDev (выражение) – вычисляет среднеквадратичное отклонение набора значений;

Count (выражение) – вычисляет количество записей, содержащихся в наборе;

Var (выражение) – вычисляет дисперсию по набору значений.

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

Сами групповые вычисления задаются включением в SQL-инструкцию SELECT вычисляемого поля на основе выражения со статистическими функциями, вы­полняемыми над наборами данных, формируемыми предложе­нием GROUP BY.

Для примера на рисунке 7.15. приведен запрос, формирующий итоговые данные по общей сумме премиальных каждого из пре­мированных сотрудников. Группирование данных производит­ся по полю «ФИО».

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

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

Второй вариант реализуется через включение в тело внеш­ней (главной) SQL-инструкции внутренней инструкции SELECT. При этом результат исполнения внутренней инструкции SELECT используется для формирования условия отбора записей в главном (внешнем) запросе или в качестве выраже­ния для нового вычисляемого поля. Такие запросы называются подчиненными.

Использование внутренней инструкции SELECT для фор­мирования условий отбора записей во внешнем запросе возмож­но, например, через предикаты сравнения — ANY (каждый), SOME (некоторые), ALL (для всех);

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

SELECT ...FROM... WHERE Выражение () [ANY|SOME|ALL] (SELECT...);

где () — оператор сравнения.

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

Предикаты ANY и SOME используются для отбора в главной SQL-инст­рукции тех записей, которые удовлетворяют сравнению с ка­кой-либо записью (т.е. хотя бы с одной), из отобранных во внут­ренней инструкции SELECT.

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

SELECT Электромобили.* FROM Электромобили WHERE (((Электромобили.Запас_хода) >=All (SELECT Маршруты.Расстояние FROM Маршруты WHERE (((Маршруты.Время_года)= ”Зима”));)));

Лекция №15