ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 186
Скачиваний: 4
Очень многие инженерные задачи можно решить с помощью уже готовых программ - прикладных пакетов. Они умеют интегрировать и дифференцировать, решать системы линейных и нелинейных уравнений, а также уравнения в частных производных.
Например, MS Excel, MathCad, Mathematics и другие.
Однако не всегда можно приспособить свою задачу под возможности пакета, часто бывает проще и быстрее написать свою программу. Научиться это делать очень важно и потому, что программирование помогает развить логическое мышление и сформировать навыки структуризации, формализации процесса решения любой задачи.
Разработка алгоритма решения
-
Выбор или разработка метода численного решения. Для поставленной математической задачи необходимо выбрать метод ее численного решения, сводящий решение задачи к последовательности арифметических и логических операций. Разработкой и изучением таких методов занимается раздел математики, называемый численным анализом. Примером численного метода в нашем случае является метод прямоугольников для вычисления определенного интеграла. В этом методе интеграл заменяется конечной суммой.
-
Разработка алгоритма решения. Это означает, что на основе выбранного метода записывается последовательность действий, приводящих к решению задачи . Разработка алгоритма обычно завершается либо представлением в виде графической схемы, либо записью с помощью символов специального языка проектирования программ, называемого псевдокодом. Используются также другие средства представления логики алгоритма: HIPO-диаграммы, таблицы решений и др. Цель такого представления состоит в том, чтобы еще до этапа программирования убедиться в правильности логики разрабатываемого алгоритма.
-
Разработка интерфейса пользователя. Параллельно с разработкой алгоритма разрабатывается сценарий работы программы, т.е. ее представление на экране при взаимодействии с пользователем.
-
Написание программы. На этом этапе алгоритм записывается в виде последовательности предложений на понятном ЭВМ языке.
-
Отладка программы. При реализации алгоритма в виде программы и ее вводе с клавиатуры в память ЭВМ могут быть допущены ошибки. Их обнаружение, локализацию и устранение выполняют на этапе отладки программы. Одним из критериев профессионального мастерства программистов является их способность обнаруживать и исправлять собственные ошибки: начинающие программисты не умеют этого делать, у опытных программистов это не вызывает затруднений. Тем не менее ошибки в программах делают все. По данным разных авторов, этап отладки программы занимает от 50 до 70 % времени, затрачиваемого на все этапы создания программы и получения решения с помощью ЭВМ. В связи с важностью и трудоемкостью этапа отладки все современные системы программирования имеют специальные средства, помогающие в обнаружении и устранении ошибок.
-
Отладка метода и алгоритма. На этом этапе, наиболее трудоемком, производится тестирование программы, т.е. проверяется, правильно ли результаты ее работы отражают предметную область, для моделирования которой программа создана. С этой целью проводятся многочисленные расчеты, результаты которых сравнивают с уже известными экспериментальными данными и теоретическими решениями. При несовпадении результатов приходится изменять алгоритм или метод решения, а возможно и строить другую физическую модель.
-
Серийные расчеты. На этом этапе проводятся многочисленные предусмотренные постановкой задачи расчеты по исследованию влияния исходных данных на характеристики процесса. Результаты стараются выводить в удобном для просмотра и анализа виде.
Алгоритмы решения задач
Важную роль играет разработка оптимального алгоритма решения задачи. Именно алгоритмы наиболее сложны при обучении и требуют высокого уровня логического мышления. Поэтому в нашем курсе мы будем постоянно возвращаться к алгоритмам решения задач и уделять большое внимание правилам перевода алгоритмических конструкций в синтаксические конструкции программ на языке С++.
Понятие алгоритма, его свойства.
Понятие алгоритма обсуждалось в прошлом семестре. Рассмотрим его более полно.
Алгоритм - это система точно сформулированных правил, определяющих процесс преобразования допустимых исходных данных (входной информации) в желаемый результат (выходной информацию). Таким образом, алгоритм должен содержать конечную последовательность шагов или операций, однозначно определяющих процесс переработки исходных и промежуточных данных в искомый результат. В нем отображается логика и способ формирования решения с указанием формул, логических условий и соотношений для контроля достоверности результатов.
При составлении алгоритмов следует учитывать ряд требований, выполнение которых приводит к формированию необходимых свойств.
Если алгоритм рассматривать как совокупность предписаний по выполнению действий, то всегда необходимо выделить те объекты, над которыми должны осуществляться предписанные действия. Такими объектами являются данные.
Свойства алгоритма
-
Дискретность. Это означает, что предопределенный алгоритмом вычислительный процесс должен состоять из простых элементарных операций, которые может выполнить человек или машина.
-
Определенность. Алгоритм должен быть однозначным, исключающим произвольность толкования любого из предписаний и заданного порядка исполнения.
-
Полнота. Это свойство означает, что должны быть предусмотрены все возможные варианты работы алгоритма при любых допустимых значениях исходных данных.
-
Универсальность (массовость). Решение однотипных задач с различными исходными данными можно осуществлять по одному и тому же алгоритму, что дает возможность создавать типовые программы для решения задач при различных вариантах задания значений исходных данных.
-
Результативность. Реализация вычислительного процесса, предусмотренного алгоритмом, должна через определенное число шагов привести к выдаче результатов или сообщения о невозможности решения задачи. Это свойство не всегда должно выполняться, поскольку существуют такие циклические процессы, которые не должны прекращаться (например, плавка металла в доменных печах или выработка электроэнергии на электростанциях). Ясно, что алгоритмы таких процессов не имеют окончания за конечное число шагов.
Обозначения элементов алгоритмов и блоков
Для строгого задания различных структур данных и алгоритмов их обработки требуется иметь такую систему формальных обозначений и правил, чтобы смысл всякого используемого предписания трактовался точно и однозначно. Соответствующие системы правил называют языками описаний.
К средствам описания алгоритмов относятся следующие основные способы их представления:
-
словесный (записи на естественном языке);
-
структурно-стилизованный (записи с помощью символов специального языка проектирования программ, называемого псевдокодом);
-
графический (изображения схем из графических символов);
-
программный (тексты на языках программирования).
Наибольшее распространение в связи со своей наглядностью имеет способ записи алгоритмов в виде блок-схем с помощью специальных графических элементов - блоков, соединяемых линиями передач управления.
Поскольку алгоритмы воспринимаются в первую очередь визуально, их следует изображать таким образом, чтобы их структура выглядела четко и выразительно. Краткость, выразительность и планомерность при проектировании позволяют создавать схемы алгоритмов высокого качества.
В схеме алгоритма каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т. п.) соответствует геометрическая фигура, представленная в виде блочного символа (блока), называемого символом действия. Символы действия соединяются линиями переходов, определяющими очередность выполнения действий. Форма символов установлена ГОСТ 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. Переход к следующему действию (продолжение алгоритма).
|
if (условие) действие1;
Пример: if (x<0) y=x;
|
|
|
Условия проверяются сверху вниз. Как только встречается истина, выполняется соответствующее действие и последовательность проверок прекращается. Последнее действие срабатывает, если все предыдущие условия ложны.
|
if (условие1) действие1; else if (условие2) действие2; else if (условие3) действие3; ••••••••••••••••••••••••• else действие n;
|
Повторение (цикл) |
|||
|
|
Цикл с предусловием.
Иначе выход из цикла (продол жение алгоритма).
|
while ( условие ) действие; Пример: while ( a<5 ) a=a+2; |
|
|
Цикл с постусловием.
Переход к пункту 1. Иначе выход из цикла (продол жение алгоритма).
|
do действие while (условие); Пример: do x=x-1; while ( x>0 );
|
|
|
Цикл с параметром (пошаговый).
Иначе - выход из цикла (продолжение алгоритма).
|
for( начальное значение счетчика; условие продолжения цикла; изменение счетчика) повторяемое действие Пример: s=0; for(i=1;i<50;i=i+1) s=s+i;
|
Некоторые стандартные приемы алгоритмизации
Научиться составлять алгоритмы даже средней сложности - дело непростое и творческое, поскольку именно здесь в полной мере требуется логическое мышление. Существует очень большое количество различных видов алгоритмов, и рассмотреть в нашем курсе даже их небольшую часть невозможно.