Компьютерное моделирование
Рассмотрим последовательность этапов компьютерного моделирования на примере вычисления площади треугольника.
Постановка задачи. Вычислить площадь треугольника S по заданным сторонам а, b, с. Объект моделирования - треугольник. Для содержательного описания объекта надо ответить на следующие вопросы.
а) Что должна делать программа?
б) Какие у нее исходные данные, и какие результаты?
По возможности необходимо сформулировать условия, которым должны удовлетворять исходные данные и результаты работы программы. Разрабатываемая программа должна вычислять площадь треугольника по трем сторонам. Исходные данные: переменные а, b, с - стороны треугольника. Вычисляемый результат: S - площадь треугольника. По смыслу задачи а, b, с, S положительны, причем не всякая тройка чисел образует длины сторон треугольника. Чтобы числа а, b, с могли быть длинами сторон треугольника, необходимо и достаточно, чтобы большее из них было меньше суммы двух других (известное из геометрии неравенство треугольника). Но вот вопрос: следует ли считать, что вводимые значения а, b, c удовлетворяют этому условию, или программа должна предусматривать дополнительную проверку? Отвечая на него, мы обнаруживаем, что постановка задачи не является столь ясной, какой она показалась на первый взгляд. А значит, в нее нужно внести одно из дополнений: "a, b, с заведомо являются сторонами треугольника" или "Следует вычислить площадь, если а, b, с - стороны треугольника, а в противном случае выдавать сообщение: а, b, с не являются сторонами треугольника". Теперь от нашего выбора зависит работа будущей программы. Обычно программа должна предусматривать защиту от неправильных данных, реагируя на них выдачей соответствующего сообщения. Поэтому выбираем второе дополнение.
Выбор метода или построение модели. Проанализировав постановку задачи, программист выбирает метод решения. В нашем примере в связи с этим нужно рассмотреть два вопроса. Во-первых, каким способом лучше определить, что значения а, b, с могут быть длинами сторон треугольника? По определению, неотрицательные числа а, b, с могут быть длинами сторон треугольника, если максимальное из них меньше суммы двух других. Пусть max(a,b,c)=c. Тогда правило может быть записано так: a+b>c. Увеличим обе части неравенства на величину с и разделим их на 2:
Переменной Р обозначим полупериметр треугольника: Тогда а, b, с - стороны треугольника, если P>c, где с - наибольшая из сторон. Во-вторых, площадь треугольника также может быть вычислена различными способами. Мы выберем формулу Герона:
Теперь метод решения поставленной задачи может быть сформулирован так. По заданным значениям переменных а, b, c вычислить полупериметр Р. Если а, b, c образуют стороны треугольника, то вычислить его площадь S и выдать результаты расчета. В противном случае, выдать сообщение о том, что а, b, с не являются сторонами треугольника. Для сложных задач выбор метода решения, как правило, состоит из нескольких шагов. Сначала обсуждаются наиболее крупные действия, а уж затем может быть последовательно реализовано каждое из них. Для очень простых задач метод решения можно даже не записывать на бумаге.
Организация данных. Прежде чем приступать к разработке алгоритма, следует продумать, какие переменные, массивы или другие виды данных в нем будут использованы. Это во многом определяет будущий алгоритм. К этому этапу нередко приходится обращаться и во время разработки алгоритма, когда появляется необходимость ввести новые переменные, используемые для получения некоторых промежуточных результатов. Или, наоборот, некоторые переменные введены неоправданно, и их нужно исключить. В ходе организации данных нужно не только привести список используемых переменных, но и определить их смысл, тип и условия, которым они должны удовлетворять. В рассматриваемой задаче мы будем использовать следующие переменные: а, b, с - стороны треугольника; d - наибольшее из значений а, b, с; Р - полупериметр; S - площадь. Для них должны выполняться следующие условия: P>d, S>0, a>0, b>0, c>0. Все переменные будем считать вещественными.
Алгоритмизация. На этап построения алгоритма иногда смотрят как на некоторое вспомогательное действие, выполняемое непосредственно перед программированием. На самом деле успешная разработка алгоритма позволяет избежать многих ошибок, поскольку именно на этом этапе определяется логика будущей программы. А, как известно, труднее всего находить и исправлять логические ошибки. Конечно, разработать алгоритм можно, не пользуясь никакими особыми приемами. Но вы, безусловно, быстрее и успешнее выполните этот шаг, если воспользуетесь специальными методами построения алгоритмов. Одним из них является метод пошагового уточнения. Сначала вы пытаетесь взглянуть на задачу в целом и описать алгоритм в структурированной форме, не вдаваясь в мелкие детали. Для нашей задачи, например, это описание будет выглядеть так:
Начало
задать (а, b, с);
вычислить полупериметр Р;
найти наибольшую из сторон а, b, с;