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

1 Алгоритм и его свойства

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

Одно из наиболее удачных определений понятия алгоритма принадлежит американскому учёному Дональду Эрвину Кнуту (англ. Donald Ervin Knuth, родился 10 января 1938): «Алгоритм — это ко-

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

Каждый алгоритм в явной или неявной форме содержат следующий ряд общих свойств:

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

-необходимым условием, которому удовлетворяет алгоритм, явля-

ется его «детерминированность», или «определённость». В каж-

дый момент времени следующий шаг работы однозначно опреде-

8

ляется состоянием системы. Таким образом, алгоритм выдаёт один и тот же результат (ответ) для одних и тех же исходных данных. Однако, существуют вероятностные алгоритмы, в которых следующий шаг работы зависит от текущего состояния системы и генерируемого случайного числа;

-свойство алгоритма «массовость» подразумевает возможность применения алгоритма к разным наборам исходных данных. Каждый алгоритм призван решать класс однотипных задач;

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

-свойство «конечность» требует, чтобы каждое действие и алгоритм в целом должны иметь возможность завершения;

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

Разработка алгоритма является сложным и трудоемким процессом. Алгоритмизация – это техника разработки (составления) алгоритма для решения задач на ЭВМ. Стадии создания алгоритма:

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

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

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

9

-словесноформульное описание;

-блок-схема (схема графических символов);

-алгоритмические языки.

При записи алгоритма существует общая методика:

-необходимо обозначить начало и конец алгоритма;

-описать входные и выходные данные;

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

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

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

Правила выполнения блок-схем определяются ГОСТом: «ГОСТ 19.701-90. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения». Основные элементы блоксхемы, применяемые при создании программы, приведены в таблице 1.1. Порядок выполнения этапов указывается стрелками, соединяющими блоки. Допустимо также указывать стрелки только на горизонтальных линиях в направлении слева направо. Геометрические фигуры размещаются сверху вниз и слева направо. Нумерация блоков производится в порядке их размещения в схеме.

10

Таблица 1.1 - Основные элементы блок-схем алгоритма

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

Начало или конец алгоритма. Внутри фигуры пишут

«начало» или «конец» соответственно

Прямоугольником обозначается операция. Внутри

блока пишут операции, которые выполняются на данном шаге алгоритма.

Ромбом обозначается оператор ветвления. Внутри

ромба записываются проверяемые условия

Параллелограмм обозначает операции ввода-вывода

данных

Цикл с известным числом итераций. Внутри обычно

указывают счетчик цикла, начальное, конечное значение и шаг цикла

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

Объект, который будет выполнять алгоритм, обычно называют исполнителем. Исполнитель - объект, который выполняет алгоритм. Идеальными исполнителями являются машины, роботы, компьютеры... Алгоритм, записанный на «понятном» компьютеру языке программирования, называется программой.

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

11

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

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

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

Языки программирования делятся на две группы: операторные и функциональные. К функциональным относятся ЛИСП, ПРОЛОГ и т.д.

Операторные языки делятся на процедурные и непроцедурные. Процедурные делятся на машинно-ориентированные и машиннонезависимые.

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

Кмашинно-независимым языкам относятся:

-Процедурно – ориентированные (Паскаль, Фортран и др.);

-Проблемно – ориентированные (ЛИСП и др.);

12

- Объектно-ориентированные (Си++, Visual Basic, Java и др.).

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

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

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

-нисходящую разработку (нисходящее программирование);

-структурное кодирование;

-сквозной контроль.

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

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

- линейные алгоритмы;

13

-алгоритмы с ветвлениями;

-циклические алгоритмы.

Линейный алгоритм (линейная структура) – это такой алгоритм,

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

Алгоритмы разветвляющейся структуры – это такие алгоритмы,

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

ДА

НЕТ

Условие

Оператор ветви «ДА»

 

 

 

Оператор ветви «НЕТ»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 1.1 – Схема оператора сравнения

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

14

Существуют две схемы циклических вычислительных процес-

сов.

а) цикл с предусловием

б) цикл с постусловием

Рисунок 1.2 – Схемы циклов

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

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

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

15