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

Алгоритмизация

Различают линейные, циклические и разветвляющиеся алгоритмы.

1. Разветвляющийся алгоритм.

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

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

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

Объем продукции

V

1

2

3

4

5

6

7

8

9

10

11

12

Цена

Q

10

4.6

3.3

2.5

2

1.7

1.4

1.2

1.1

1

0.9

0.8

Экспериментальные данные таблицы можно аппроксимировать тремя отрезками прямых с координатами: (1, 10), (2, 4.6), (5, 1.8), (12, 0.8). Уравнения аппроксимирующих прямых имеют вид:

1. Q = AV + B;

2. Q = CV + D;

3. Q = EV + F.

Коэффициенты A-F определяют по двум точкам для каждой прямой. Таким образом для первой прямой с заданными точками (1, 10) и (2, 4.6) составляется система уравнений вида:

Аналогично определяем коэффициенты двух остальных прямых:

Подставим коэффициенты в исходные уравнения:

Алгоритм вычисления цены Q по объему товара V состоит в определении по заданному значению V соответствующего уравнения аппроксимирующей прямой и вычислении по нему значения Q.

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

Блок-схема:

Нет

Нет

Да

Да

2. Циклические алгоритмы.

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

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

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

Ввод начальных значений Х = Хmin  Тело цикла Y = F(x)  Изменение на шаг значения аргумента Х = Х + шаг  Проверка окончания цикла Х > Хmax

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

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

Циклический процесс, получение значений Q, как функции от V, можно представить в виде блок-схемы:

Да

Нет

Да

Да

Нет

Нет

Погрешность:

ΔQ = Qмодельное - Qтабличное

06.04.2012 г. (пт)

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

Для оценки рационального размера функции и количества ее параметров можно использовать правило 7±2. Смысл правила в том, что количество элементов (параметров функции или операторов в языках программирования), которые человек воспринимает хорошо, не должно превышать семи. Следовательно, при удачной декомпозиции размер функции не превосходит обычно 25-81 строк текста, а количество параметров должно быть не более 5-9. При этом 25-81 строка текста для одной функции соответствует в ее блоке не более 5-9 элементарным конструкциям, каждая из которых должна занимать не более 5-9 строк.

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

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

ОПИСАНИЕ ЯЗЫКА ПРОГРАММИРОВАНИЯ С И С++

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

1. Язык должен быть простым, доступным для широкого круга специалистов;

2. Язык должен быть однозначным при истолковании алгоритма, в отличие от естественного языка;

3. Язык должен предполагать простой в создании и функционировании транслятор с этого языка на язык компьютера;

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

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

Существуют различные способы описания синтаксиса языка. Обычно выделяют два способа, как наиболее известные, предложенные Бэкусом и Виртом в соответствии с рисунком.

Бэкус

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

Вирт

Синтаксические диаграммы

<Прописная_буква> : : = А|В|…|Z

<строчная_буква> : : = a|b|…|z

Прописная_буква

--------------------

\/ \/ \/ \/

A B C … Z

\/ \/ \/ \/

----------------------

строчная_буква

--------------------

\/ \/ \/ \/

a b c … z

\/ \/ \/ \/

----------------------

<Буква> : : =

(<Прописная_буква>|<строчная_буква>)

Буква

Прописная_буква|

| |

Строчная_буква--|

<Ненул_восм_цифра> : : = 1|2|…|7

Ненул_восм_цифра

--------------------

\/ \/ \/ \/

1 2 3 … 7

\/ \/ \/ \/

----------------------

<Восм_цифра> : : = (<Ненул_восм_цифра>|0)

Восм_цифра

-----------------------------

\/ \/

Ненул_восм_цифра 0

\/ \/

------------------------------

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

1. Использование металингвистических формул, которые предложены Бэкусом (автора языка AlgoL-60);

2. Использование синтаксических диаграмм, предложенных Виртом (автором языка Pascal);

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

Металингвистическая формула определяет понятия путем перечисления всех его значений, используя обозначения:

: : = – «это есть по определению»

| – «или»

( ) – «и»

{ } – неограниченное повторение заключенной в скобки конструкции

[ ] – необязательность конструкции, заключенной в скобки.

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

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

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