НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

Лабораторная работа 3. Решение задач с использованием разветвляющихся алгоритмов

На предыдущих уроках вы составили несколько разветвляющихся алгоритмов для ЧЕРТЕЖНИКА и ВЫЧИСЛИТЕЛЯ. Сейчас вы посмотрите, как ЭВМ будет их исполнять. А заодно проверите, насколько точно вам удалось выразить в алгоритме то, что задумали. Ведь человеку свойственно ошибаться: обычно человек думает, что составил правильную и совершенно точную инструкцию, а эта инструкция оказывается неточной и неправильной. Машина - лучший контролер. Она не ищет скрытый смысл программы, не читает между строк, а четко и педантично выполняет то, что ей предписано.

Пока ассистент настраивает ЭВМ на работу в роли ЧЕРТЕЖНИКА, найдите в своих тетрадях алгоритм, выполнив который ЧЕРТЕЖНИК отойдет от края листа.

Допустимые действия ЧЕРТЕЖНИКА, которые вы изучили, для ЭВМ записываются точно так же: СДЕЛАТЬ ШАГ, ПОВЕРНУТЬ НАЛЕВО, ПРЫГНУТЬ. В развилках можно писать ЕСЛИ ВПЕРЕДИ КРАЙ, ТО: или ЕСЛИ ВПЕРЕДИ НЕ КРАЙ, ТО:

Кроме того, при имитации ЧЕРТЕЖНИКА на ЭВМ оказалось необходимым добавить ему еще одно допустимое действие - НАЧАТЬ РАБОТУ. По этой команде ЭВМ рисует на экране лист бумаги и просит вас установить ЧЕРТЕЖНИКА в исходное положение (нужно подвести ЧЕРТЕЖНИКА к выбранной вами точке листа, задать его направление и нажать клавишу "ПЕРЕВОД СТРОКИ").

Итак, запишите в начале вашего алгоритма действие НАЧАТЬ РАБОТУ, занумеруйте строки алгоритма и введите получившуюся программу в ЭВМ. Вы еще не забыли, как это делается?

Запустите программу несколько раз при разных начальных положениях ЧЕРТЕЖНИКА. Всегда ли, выполнив вашу программу, ЧЕРТЕЖНИК отходит от края листа? Уверены ли вы, что проведенных испытаний достаточно? Можно ли теперь с чистой совестью утверждать, что программа написана верно? Для каких начальных положений ЧЕРТЕЖНИКА надо запустить программу, чтобы убедиться в ее правильности?

Теперь посмотрим, как ВЫЧИСЛИТЕЛЬ выполняет программы с ветвлениями. Помните "дорожно-транспортную" задачу? Вот она:

Задача. На узкой улице заклинило тормоза у "Волги". Шофер грузовика предложил помочь убрать "Волгу" с проезжей части дороги, оттащив ее на обочину с помощью троса. Удастся ли оттащить "Волгу"?

В свое время вы составили математическую модель и алгоритм решения этой задачи. Исходными данными в ней являются масса "Волги" М, коэффициент трения К, максимальная сила тяги F, максимальная нагрузка R на трос. Алгоритм решения этой задачи выглядит так:

 Запросить М, К, F, R. 
 Если R<F, то: 
 Присвоить Z значение R. 
 Иначе: 
 Присвоить Z значение F. 
 Конец ветвления. 
 Присвоить Q значение 9,8 · К · М. 
 Если Q<Z, то: 
 Сообщить "Сдвинется с места". 
 Иначе: 
 Сообщить "Не сдвинется с места". 
 Конец ветвления.

Запишите программу, соответствующую этому алгоритму. На язык Бейсик этот алгоритм переводится так:

 1 INPUT M,K,F,R 
 2 IF R<F THEN LET Z = R ELSE LET Z = F 
 3 LET Q = 9.8 ∗ K ∗ M 
 4 IF Q<Z THEN PRINT "Сдвинется с места" ELSE PRINT "He сдвинется с места"

Введите в ЭВМ программу и запустите ее, приняв массу "Волги" равной 2000 кг; коэффициент трения резины по асфальту равным 0,7; силу тяги грузовика равной 25000 Н; максимальное усилие, которое выдерживает трос, равным 13000 Н. Если программа и данные введены правильно, то ВЫЧИСЛИТЕЛЬ сообщит, что "Волга" не сдвинется с места. Почему же она не сдвинется? Потому ли, что мощности грузовика не хватит, или потому, что трос лопнет? ВЫЧИСЛИТЕЛЬ ответа не дает. Впрочем, мы его и "не просим". Так давайте "попросим"! Для этого придется дополнить математическую модель. Можно, скажем, предусмотреть в ней еще один результат - сообщение о том, что трос порвется. Это сообщение должно появляться, если сила трения Q окажется больше максимального усилия R, выдерживаемого тросом. Изменения модели всегда приводят к изменениям в алгоритме. В данной ситуации надо дополнить алгоритм ветвлением.

 Если Q>R, то: 
 Сообщить "Трос порвется". 
 Конец ветвления.

Ясно, что это ветвление надо записать после сообщения о том, что "Волга" останется на месте. Можно, например, просто дописать его в конце прежнего алгоритма:

 Запросить М, К, F, R. 
 Если R<F, то: 
 Присвоить Z значение R. 
 Иначе: 
 Присвоить Z значение F. 
 Конец ветвления. 
 Присвоить Q значение 9,8 ⋅ К ⋅ М. 
 Если Q<Z, то: 
 Сообщить "Сдвинется с места". 
 Иначе: 
 Сообщить "Не сдвинется с места". 
 Конец ветвления. 
 Если Q>R, то: 
 Сообщить "Трос порвется". 
 Конец ветвления.

Теперь если по расчетам ВЫЧИСЛИТЕЛЯ трос не выдержит нагрузки, то ВЫЧИСЛИТЕЛЬ не станет об этом умалчивать. Если же ВЫЧИСЛИТЕЛЬ сообщит, что "Волга" останется на месте, и больше ничего не скажет, то все ясно - не хватает мощности грузовика.

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

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

Только что выполненные расчеты демонстрируют одно из основных преимуществ использования ЭВМ: по сути дела, физический эксперимент вы заменили вычислительным экспериментом. Одно дело - тянуть "Волгу" по асфальту и смотреть, лопнет ли дефицитный трос, и совсем другое дело - запускать программу на исполнение. Для физического эксперимента вам нужно брать разные автомобили и разные тросы (где их столько взять?) и каждый раз с новой силой тянуть машины по дорогам с разными типами покрытия. А на ЭВМ вы можете имитировать эксперимент при любых значениях М, K, F, R.

Важно и другое: вычислительные эксперименты позволяют определить границы применимости построенной математической модели, т. е. выяснить, для каких значений исходных данных результаты согласуются с физической реальностью. Посмотрим еще раз на нашу модель. Как вы думаете, любые ли числа можно подставлять вместо М, K, F, R? Введите-ка в качестве F отрицательное число. Какое бы отрицательное число вы ни подставили, "Волга" не сдвинется с места. Не правда ли, странный результат? Выходит, что если тянуть "Волгу" в одну сторону, то она движется, а если с такой же силой тянуть ее в противоположном направлении, то стоит на месте. Каждый скажет: такого быть не может. А все дело в том, что наша модель отражает реальный процесс далеко не при всех значениях аргументов. Так, при ее построении мы молчаливо предполагали, что сила F не может быть отрицательной. Для остальных переменных М, К, R также есть естественные границы: их значения должны быть положительными, а K к тому же не может превосходить 1.

Итак, наш вычислительный эксперимент показал необходимость уточнения математической модели. В нее надо внести следующие ограничения на исходные данные: F>0, M>0, K>0, K<1,R>0.

Соответствующим образом надо изменить алгоритм решения задачи: после запроса начальных данных надо проверить, удовлетворяют ли они указанным ограничениям. Если данные не удовлетворяют ограничениям, то ВЫЧИСЛИТЕЛЬ должен прекратить выполнение алгоритма. Для этого у него есть допустимое действие "Стоп".

 Запросить М, K, F, R. 
 Если M≤0, то: 
 Сообщить "Масса должна быть положительной". 
 Стоп. 
 Пользуйтесь вычислительным экспериментом - он не загрязняет окружающую среду! 
 Конец ветвления. 
 Если F<0 то: 
 Сообщить "Нельзя вводить отрицательные значения силы". 
 Стоп. 
 Конец ветвления. 
 Если K≤0, то: 
 Сообщить "Коэффициент трения должен быть положительным". 
 Стоп. 
 Конец ветвления. 
 Если K>1, то: 
 Сообщить "Коэффициент трения не может превосходить 1". 
 Стоп. 
 Конец ветвления. 
 Если R≤0, то: 
 Сообщить "Нагрузка на трос не может быть отрицательной". 
 Стоп. 
 Конец ветвления. 
 Если R≤F то: 
 Присвоить Z значение R. 
 Иначе: 
 Присвоить Z значение F. 
 Конец ветвления. 
 Присвоить Q значение 9,8 ⋅ К ⋅ М. 
 Если Q<Z, то: 
 Сообщить "Сдвинется с места". 
 Иначе: 
 Сообщить "Не сдвинется с места". 
 Конец ветвления. 
 Если Q>R то: 
 Сообщить "Трос порвется". 
 Конец ветвления.

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

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь