Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Компьютерное моделирование. Рассмотрим последовательность этапов компьютерного моделирования на примере вычисления площади треугольника





Рассмотрим последовательность этапов компьютерного моделирования на примере вычисления площади треугольника.
Постановка задачи. Вычислить площадь треугольника 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. Все переменные будем считать вещественными.
Алгоритмизация. На этап построения алгоритма иногда смотрят как на некоторое вспомогательное действие, выполняемое непосредственно перед программированием. На самом деле успешная разработка алгоритма позволяет избежать многих ошибок, поскольку именно на этом этапе определяется логика будущей программы. А, как известно, труднее всего находить и исправлять логические ошибки.
Конечно, разработать алгоритм можно, не пользуясь никакими особыми приемами. Но вы, безусловно, быстрее и успешнее выполните этот шаг, если воспользуетесь специальными методами построения алгоритмов. Одним из них является метод пошагового уточнения.
Сначала вы пытаетесь взглянуть на задачу в целом и описать алгоритм в структурированной форме, не вдаваясь в мелкие детали. Для нашей задачи, например, это описание будет выглядеть так:

Начало
1. задать (а, b, с);
2. вычислить полупериметр Р;
3. найти наибольшую из сторон а, b, с;
4. если а, b, с - стороны треугольника
4.1. то вычислить площадь S; выдать (S);
4.2. иначе выдать (а, b, с,' - не являются сторонами треугольника')
Конец.

А теперь рассмотрим более подробно пункты алгоритма.
Вычисление полупериметра Р.
Этот шаг сводится к выполнению оператора Р:= (а + b + c)/2.
Нахождение наибольшей из сторон а, b, с.
Операторы:
d:=a;
если d < b, то d:=b;
если d < с, то d:=c.
Вычисление площади S:

S:=SQRT(P*(P - a)*(P - b)*(Р - с)).

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

Начало
Задать(а,b,с);
(*вычислить полупериметр Р*)
Р:=(а+b+с)/2;
{*найти наибольшую из сторон а, b, с*}
d: =а;
если d если d<с, то d:=с;
если (*а, b, с - стороны треугольника*) P>d
то {(*вычислить площадь S*)
S:=SQRT(P*(P-а)*(Р-b)*(Р-с));
выдать(S)}
иначе выдать (а, b,с,' - не являются сторонами треугольника')
Конец.

Названия более крупных шагов внесены в конечный вид алгоритма на уровне комментариев для большей наглядности. Имея перед собой подобное описание алгоритма вместе с описанием данных, можно без труда выполнить следующий этап.
Программирование. На предыдущих этапах был детально разработан алгоритм решения задачи и описаны используемые в нем переменные. Теперь написание программы сводится к переводу этого алгоритма на язык программирования. Но если предыдущие этапы были выполнены некачественно, то алгоритм приходится дорабатывать уже на ходу. Это приводит к появлению дополнительных ошибок.
Одним из вопросов, с которым сталкиваются при программировании, является вопрос о выборе языка программирования. Для написания нашей программы мы выберем язык Паскаль. Теперь основная сложность заключается в том, чтобы учесть все правила и ограничения выбранного языка.
При создании программы, которая могла бы надежно работать, подавляющая часть времени уходит не на её написание, а на поиск ошибок и внесение исправлений. Поэтому уже при составлении программы нужно позаботиться о том, чтобы она была наглядной, легко читалась, и по выдаваемой ею информации можно было бы без труда обнаруживать ошибки. Вы уже познакомились с некоторыми приемами, используемыми при написании программ. Постарайтесь придерживаться еще и таких правил.
В каждой строчке программы размещайте по одному оператору, за исключением случаев, когда операторы небольшие и по смыслу тесно связаны друг с другом. Каждый следующий составной оператор размещайте со сдвигом на несколько позиций вправо. Метки лучше всего располагать в самых левых позициях, чтобы они "не загораживались" другими операторами. Соответствующие друг другу begin и end располагайте в одних и тех же колонках.
Понять смысл программы помогут и комментарии. С их помощью можно указать назначение программы, смысл используемых переменных, пояснить наиболее трудные для понимания участки.
Следуя перечисленным правилам, напишем программу решения рассматриваемой задачи:

program PLОСНАD;
{вычисление площади треугольника по трем сторонам)
var А,В,С:real; {стороны}
D:real; {большая из сторон}
Р:real; {полупериметр}
S:real; {площадь}
begin
writeln('Задайте стороны A,В,С:')
read(А,В,С);
{вычислить полупериметр}
Р:=(А + В + С)/2;
{найти наибольшую длину}
D:=A;
if D<B then D:=B;
if D<C then D:=C;
if {a,b,с - стороны треугольника} P>D
then
begin {вычислить площадь}
S:=SQRT(P*(P-A)*(P-B)*(P-C));
writeln{'ПЛОЩАДЬ:',S)
end
else writeln(A,B,С,
'- не являются сторонами треугольника')
end.

Итак, программа готова. Вы занесли ее текст в машину. Но придется приложить еще много усилий, прежде чем вы убедитесь в ее правильной работе.
Тестирование программы. Для начала попытайтесь проверить свою программу, как говорят, "вручную". Внимательно читая ее текст, испытайте себя в роли исполнителя этого алгоритма на конкретных числовых данных. Возможно, что таким образом будут обнаружены некоторые ошибки.
Текст исходной программы программист направляет транслятору, который переводит ее на язык низкого уровня - язык компьютера. Транслятор не человек, он понимает лишь то, что написано, а не то, что мы хотели бы написать. Необходимо, чтобы правильными были все запятые, тире, пробелы, а также команды и программа в целом. Первым делом транслятор проверяет синтаксические ошибки. Если они есть, то программа отвергается с сообщением о том, что в таком-то месте программы найдена ошибка такого-то типа.
Первая цель программиста - добиться безошибочной трансляции. Но вот синтаксические ошибки устранены. Можно ли сказать, что, выполнив программу с заданными исходными данными, мы получим правильные результаты? Конечно, нет. Ведь в ней, помимо синтаксических ошибок, могут быть логические. Их-то транслятор не замечает. Чтобы выявить такие ошибки, программа проходит этап испытаний или тестирования.
Тестирование - это процесс исполнения программы с целью обнаружения ошибок. Для проведения этого этапа заранее, обычно еще до написания программы, подготавливается специальная система примеров, просчитанных вручную или каким-либо другим способом, с тем, чтобы сравнить их с результатами работы программы. Такие примеры называются тестами. Желательно, чтобы тесты были простыми и позволяли легко проверить получаемые результаты, а также разнообразными, чтобы программа вынуждена была пройти по всем ветвям алгоритма.
Протестируем нашу программу.
1. На вход подаем числа 3, 4, 5, являющиеся, как известно, сторонами треугольника с площадью 6. Что дает счет по программе? То же самое! При тестировании нужно проверять не только правильные, но и неверные и граничные ситуации. При этом следует уделять им внимания не меньше, чем работе с правильными данными. А поэтому рассмотрим и такие тесты.
2. Если (А, В, С) = (1, 1, 2), треугольник вырождается в отрезок.
3. Если (А, В, С) = (0,0,0) - это точка.
4. (А, В, С) = (1, 1, 3). Треугольник с такими сторонами построить нельзя.
5. А что, если на вход подать отрицательное число: 2, 1, -3?
6. Пусть все числа будут отрицательными: - 4, - 4, - 4.
Для тестов 2-6 в качестве результата должно быть получено сообщение: "А, В, С не являются сторонами треугольника". Далее проверим, все ли ветви алгоритма будут пройдены хотя бы по одному разу при выполнении этих тестов. Оказывается, да. Но если бы этого не случилось, пришлось бы добавлять новые примеры. Для каждого теста нужно выписывать не только входные данные, но и результаты, которые им соответствуют. Иначе, получив правдоподобные, но неверные результаты, вы можете не заметить ошибку. Ошибка обнаружится позже, и тогда для ее исправления потребуется больше усилий. Помните, чем раньше обнаружится ошибка, тем легче ее устранить. А потому тщательно изучайте итоги каждого тестового выполнения программы.
Отладка программы. Но вот вы получили результаты работы некоторого теста, и они оказались совсем не такими, какие вы ожидали. Что делать? Теперь начинается работа по выяснению того, какая ошибка или ошибки дали такой эффект, а также устранению этих ошибок. Эта работа называется отладкой. Проведение отладки роднит работу программиста с деятельностью врача, который по некоторым симптомам (выдаваемым сообщениям и результатам) пытается установить болезнь (в данном случае - ошибки в программе). Постановка диагноза, в том числе и в программировании, как известно, требует большого искусства. Однако и здесь можно рекомендовать некоторые приемы для облегчения этой работы.
Прежде всего, внимательно просмотрите текст. Возможно, ошибки связаны с синтаксисом программы. Например, если при вычислении полупериметра вместо знака " / " был поставлен знак "*", ошибка такого рода, не замеченная транслятором, будет обнаружена лишь в результате просмотра.
Чтобы выявить логические ошибки, попытайтесь выполнить программу или подозреваемую ее часть в отладчике, просматривая необходимые промежуточные результаты. Попробуйте объяснить каждый оператор своей программы, просматривая ее с конца.
Итак, вы каким-то образом нашли и исправили ошибку. Теперь все тесты нужно повторить заново, чтобы убедиться, не повлекло ли за собой это исправление других ошибок. Поэтому не спешите выбрасывать тесты, чтобы вам не пришлось изобретать их заново.
В процессе тестирования выявляются ошибки, допущенные на более ранних этапах, например при разработке алгоритма и постановке задачи. А поэтому большой объем работы приходится повторять, снова и снова возвращаясь к более ранним этапам. Таким образом, описываемая последовательность действий при решении задачи не является очень уж строгой. Только простейшие программы проходят все шаги без каких-либо повторений.
Документирование. Если после проверки программы у вас не возникает сомнений по поводу правильности выдаваемых ею результатов, ее можно использовать в дальнейшем для проведения необходимых расчетов. Но, не имея описания программы, в ней будет трудно разобраться уже через некоторое время. Описание в еще большей степени потребуется тому, кто захочет воспользоваться вашей программой или усовершенствовать ее. А потому разработка программы заканчивается ее описанием, или документированием.
В состав описания входит:
Во-первых, инструкция по использованию программы. Опишите, что делает программа, каким образом задавать исходные данные и какие действия выполнить, чтобы, ничего не зная о ее структуре, пользователь мог бы применить программу для своих расчетов.
Во-вторых, в документацию следует включить краткое описание того, что было сделано на каждом этапе, начиная от постановки задачи и заканчивая набором тестов. Это более подробное описание потребуется тому, кто захочет усовершенствовать вашу программу. Подготовка документации не составит большого труда, если о ней позаботиться заранее еще в период разработки программы. В частности, полезно описание логической структуры программы включать в ее текст в качестве комментариев. Следует также прокомментировать смысл каждой используемой переменной, а иногда и отдельных их значений. В хорошо документированных программах комментарии могут составлять до 3/4 всего текста.

Вопросы для самоконтроля

1. Моделирование как метод познания.

2. Формы представления моделей.

3. Формализация.

4. Системный подход в моделировании.

5. Типы информационных моделей.

6. Основные этапы разработки и исследования моделей на компьютере.

7. Исследование физических моделей.

8. Исследование математических моделей.

9. Биологические модели развития популяций.

10. Геоинформационные модели.

11. Оптимизационное моделирование в экономике.

12. Экспертные системы распознавания химических веществ.

13. Модели логических устройств.

14. Информационные модели управления объектами.

 

 

Date: 2015-07-17; view: 1038; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию