ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 186

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


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

Например, MS Excel, MathCad, Mathematics и другие.

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


Разработка алгоритма решения


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

  2. Разработка алгоритма решения. Это означает, что на основе выбранного метода записывается последовательность действий, приводящих к решению задачи . Разработка алгоритма обычно завершается либо представлением в виде графической схемы, либо записью с помощью символов специального языка проектирования программ, называемого псевдокодом. Используются также другие средства представления логики алгоритма: HIPO-диаграммы,  таблицы решений и др. Цель такого представления состоит в том, чтобы еще до этапа программирования убедиться в правильности логики разрабатываемого алгоритма.

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

  4. Написание программы. На этом этапе алгоритм записывается в виде последовательности предложений на понятном ЭВМ языке.

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

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

  7. Серийные расчеты. На этом этапе проводятся многочисленные предусмотренные постановкой задачи расчеты по исследованию влияния исходных данных на характеристики процесса. Результаты стараются выводить в удобном для просмотра и анализа виде.




Алгоритмы решения задач


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


Понятие алгоритма, его свойства.

Понятие алгоритма обсуждалось в прошлом семестре. Рассмотрим его более полно.

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

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

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


Свойства алгоритма


  1. Дискретность. Это означает, что предопределенный алгоритмом вычислительный процесс должен состоять из простых элементарных операций, которые может выполнить человек или машина.

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

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

  4. Универсальность (массовость). Решение однотипных задач с раз­личными исходными данными можно осуществлять по одному и тому же алгоритму, что дает возможность создавать типовые программы для решения задач при различных вариантах задания значений исходных данных.

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



Обозначения элементов алгоритмов и блоков


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


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

  1. словесный (записи на естественном языке);

  2. структурно-стилизованный (записи с помощью символов специального языка проектирования программ, называемого псевдокодом);

  3. графический (изображения схем из графических символов);

  4. программный (тексты на языках программирования).

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

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

В схеме алгоритма каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т. п.) соответствует геометрическая фигура, представленная в виде блочного символа (блока), называемого символом действия. Символы действия соединяются линиями переходов, определяющими очередность выполнения действий. Форма символов установлена ГОСТ 19.003—99, а правила составления схем алгоритмов — ГОСТ 19.002—99.


Базовые управляющие конструкции


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

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

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

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

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

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



Основные блочные символы

Таблица 1.

Название

Внешний вид

Пример

Назначение

Линии передачи управления (потока информации)

       

       

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

Соединение линий потока информации

   

   

Служит для соединения нескольких линий в одну. Стрелки ставятся при направлении линии справа налево и снизу вверх.

Начало алгоритма

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

Конец алгоритма

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

Блок обработки данных (последо­вательное действие или процесс)

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

Ветвление (развилка)

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

Ввод данных (с клавиатуры)

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

Вывод результатов на бумагу

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

Ввод или вывод данных (без указания устройства)

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

Предопределенный процесс (вызов модуля)

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

Разрыв линии передачи управления и ее продолжение

 

 

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

Перенос алгоритма на следующую страницу

 

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

Текстовые пояснения

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



Базовые алгоритмические структуры.



Таблица 2.

Внешний вид

Пример

Словесное описание алгоритма

Синтаксис записи на С++

Последовательность

         

         

Действия выполняются в порядке их следования в алгоритме. Знак = в действии предписывает вычислить выражение справа от него и занести результат в переменную слева от него.

x=d+sin(g);

y=y+3;

Второе действие предписывает сложить y и 3, а результат записать туда же, т.е. увеличить y на 3.

Ветвление

Вычисляется условие.

Если оно истинно, то

выполняется действие1.

Иначе

выполняется действие2.

Переход к следующему действию (продолжение алгоритма).


if (условие)

 действие1;

else

 действие2;

Пример:

if (a>b)

 c=c+1;

else

 c=c+2;

Вычисляется условие.

  1. Если оно истинно, то

выполняется действие1.

Переход к следующему действию (продолжение алгоритма).


if (условие)

 действие1;


Пример:

if (x<0)

 y=x;



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


if (условие1)

 действие1;

else if (условие2)

 действие2;

else if (условие3)

 действие3;

•••••••••••••••••••••••••

else действие n;


Повторение (цикл)

Цикл с предусловием.

  1. Вычисляется условие.

  2. Если оно истинно, то

  3. Выполняется действие.

  4. Переход к пункту 1.

Иначе

выход из цикла (продол­   жение алгоритма).


while ( условие )

действие;

Пример:

while ( a<5 )

 a=a+2;

Цикл с постусловием.

  1. Выполняется действие.

  2. Вычисляется условие.

  3. Если оно истинно, то

 Переход к пункту 1.

Иначе

выход из цикла (продол­   жение алгоритма).



do

 действие

while (условие);

Пример:

do

 x=x-1;

while ( x>0 );


Цикл с параметром (пошаговый).

  1. Вычисляется начальное значение счетчика.

  2. Вычисляется условие (продол­жения цикла);

  3. Если оно истинно, то

  4. Выполняется действие;

  5. Вычисляется новое значение счетчика;

  6. Переход к пункту 2.

Иначе - выход из цикла (продолжение алгоритма).


for( начальное значение счетчика;

условие продолжения цикла;

изменение счетчика)

повторяемое действие

Пример:

s=0;

for(i=1;i<50;i=i+1)

 s=s+i;




Некоторые стандартные приемы алгоритмизации


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