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

Контрольные вопросы

  1. Что такое данные, база данных, структура базы данных?

  2. Какие структуры данных вам известны?

  3. Перечислите функциональные возможности СУБД.

  1. Из каких компонентов состоит Microsoft Access?

  2. Дать краткое объяснение каждого компонента.

Лекция №12 Тема: Основы алгоритмизации задач. Алгоритмы. Алгоритмические структуры. Алгоритмические языки.

Цель: Дать понятие алгоритма и его свойств. Объяснить смысл формального исполнения алгоритма, т.е. такого факта, что исполнителю нет необходимости понимать смысл команд, которые он исполняет. Такое понятие важно только для составления алгоритма.

Ключевые понятия: алгоритм, моделирование, алгоритмизация, программирование, исполнитель, команда.

Понятие алгоритма

Алгоритм относится к фундаментальным понятияминформатики. На понятии алгоритма построены все основные принципы программирования – составления программ для компьютеров.

Само слово «алгоритм» происходит от имени средневекового математика Абу Джафара ибн Муссы аль-Хорезми, который еще в IXвеке (825г.) сформулировал правила выполнения арифметических действий. Редакция последней части имени ученого в европейских языках привело к образованию термина «алгорифм» или «алгоритм». Первоначально под алгоритмами и понимали только правила выполнения четырех арифметических действий над многозначными числами.

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

Основные свойства алгоритма:

дискретность — представление процесса в виде отдельных элементарных шагов, логическая взаимосвязь выполнения которых исполнителем (человеком или машиной) не вызывает сомнения;

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

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

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

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

Особенности алгоритма:

ввод — наличие некоторых исходных данных, известных до начала работы;

эффективность — все выполняемые действия должны быть реализуемыми в приемлемый отрезок времени;

вывод — алгоритм обязан выдавать определенную информациюпо его завершении.

Чтобы та или иная последовательность действий считалась алгоритмом, она должна удовлетворять всем названным требованиям

Словесная запись алгоритмов.

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

Например. Пусть требуется записать последовательность элементарных действий для вычислений по формуле:

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

1. Прочитать заданное значение х.

2. Умножить х на 8.

3. Из результата второго действия извлечь квадратный корень.

4. К результату третьего действия прибавить 1.

5. Умножить х на 3.

6. Результат пятого действия разделить на результат четвертого действия.

7. Записать значение результата у.

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

Следует особое внимание обратить на первое и последнее предписания в этой записи, обеспечивающие задание значения исходного данного и выдачу полученного ответа. При всей кажущейся излишней педантичности этих предписаний они имеют первостепенное значение в алгоритмах, адресуемых исполнителям-автоматам. Формулируя эти предписания, автор алгоритма должен четко определить для себя, что в этой задаче «дано», а что «требуется получить». Или, говоря иными словами, какие величины являются носителями исходных значений (входные величины, или аргументы), а какие – носителями значений результатов (выходные величины или результаты). В приведенной выше записи вычислительного алгоритма входной величиной является х, а выходной – y.

Графическое представление алгоритмов

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

Введем для нее некоторые обозначения.

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

Проверка - проверяет выполнение некоторого условия Р, имеет один вход и два выхода (рис.б).

Слияние - это соединение путей управления, имеет два входа и выход (рис.в).

Начало и конец - обозначают начало и конец вычислительного процесса (рис.г).

Ввод и вывод данных, не привязанный к конкретному устройству, обозначается параллелограммом. Внутри него пишется слово «Ввод» или «Вывод» и перечисляются вводимые или выводимые переменные (рис.д).

Условные графические изображения структурных элементов алгоритма

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

Основные алгоритмические структуры

Изображены следующие блок-схемы: а - композиция,или следование;б - альтернатива,или развилка,ви г -блок-схемы, каждую из которых называют итерацией,или циклом(с предусловием (в), с постусловием (г)).S1иS2 представляют собой в общем случае некоторые серии команд для соответствующего исполнителя,В -это условие, в зависимости от истинности(Т)или ложности(F) которого управление передаётся по одной из двух ветвей. Можно доказать, что для составления любого алгоритма достаточно представленных выше четырех блок-схем, если пользоваться их последовательностями и/или суперпозициями.

Блок-схема «альтернатива» может иметь и сокращенную форму, в которой отсутствует ветвь S2.Развитием блок-схемы типа альтернатива является блок-схема«выбор».

Развитие структуры типа «альтернатива»;

а) - неполная развилка; б) -структура «выбор»

Мы завершили рассмотрение основных структурных элементов алгоритмов: следования, развилки и цикла (повторения), являющихся базовыми элементами. Еще в 1966 году К. Бойм и Д. Якопини доказали, что алгоритм решения любой логической задачи можно составить из этих трех структур. С их помощью можно представлять любые линейные, разветвляющиеся и циклические алгоритмические процессы

Алгоритмические языки. Классификация

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

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

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

По первому признаку они делятся на две большие группы: машинно-зависимые и машинно-независимые языки. Машинно-зависимые языки классифицируют на машинные и машинно-ориентированные (автокоды). Различают два уровня машинно-ориентированных языков: символического кодирования (ассемблеры) и макроязыки (макроассемблеры).

В мнемокоде цифровой код операции заменен буквенным (мнемоническим), а цифровые адреса - буквенными именами.

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

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

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

Машинно-независимые языки в последние годы обычно разделяют на: процедурно-ориентированные (Бейсик, Паскаль, Фортран, Кобол, ПЛ/1), проблемно-ориентированные (РПГ, Лисп, АПЛ), объектно-ориентированные (ADA, JAVA, Delpi, Visual Basic,Си++).

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

Структура алгоритмического языка

В основе любого языка (естественного или искусственного) лежит набор исходных букв (символов), называемый алфавитом языка.

Алфавиты алгоритмических языков состоят обычно из следующих наборов:

  • букв латинского алфавита и алфавита национального языка;

  • цифр (от 1 до 9);

  • знаков операций:

арифметических

логических

отношения

специальных знаков.

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

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

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

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

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

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

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

  • присваивания

  • безусловной передачи управления

  • условной передачи управления

  • цикла

  • ввода и вывода данных.

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

Из предложений (операторов и выражений) образуются программы. Для удобства составления, отладки и работы готовые программы обычно разбивают на части, которые называются программными единицами.

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

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

Программная единицаэто основная программа или подпрограмма. Выполнение любой составной программы начинается с выполнения основной программы (главной).

Подпрограммы бывают двух типов собственно подпрограммы (процедуры) и подпрограммы-функции.

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

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

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