ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.03.2024
Просмотров: 116
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
втор
ных примерах.
ой – строка представления заданной дроби в новой системе счисле- ния, третий – погрешность этого представления.
Позиция 10.5.1
завершена.
10.5.2. Тестирование программы на контроль
Сначала посмотрим, что возвратит функция при обращении к ней.
Набираем:
Z(2,8,0.78) =
Выведется структура:
Чтобы прочесть позиции в массиве {1,8}, нужно обратиться к соот- ветствующему элементу структуры. Сделаем это в ходе тестирования программы, для чего используем заранее рассчитанные примеры. Для удобства чтения скопируем результаты, которые должна показать про- грамма.
Пример 1
(для проверки правильности перевода в новую систему счисления с погрешностью): перевести десятичную правильную дробь
0.78 в двоичную систему счисления.
ФУНКЦИЯ Z(2,8,0.78) должна возвратить:
Z(2,8,0.78)
0,0
= 8 (число значащих разрядов)
Z(2,8,0.78)
0,1
= (11000111) (дробная часть числа 0.78 в двоичной сис- теме счисления)
Z(2,8,0.78)
0,2
= 0.00265625 (погрешность)
108
ных примерах.
ой – строка представления заданной дроби в новой системе счисле- ния, третий – погрешность этого представления.
Позиция 10.5.1
завершена.
10.5.2. Тестирование программы на контроль
Сначала посмотрим, что возвратит функция при обращении к ней.
Набираем:
Z(2,8,0.78) =
Выведется структура:
Чтобы прочесть позиции в массиве {1,8}, нужно обратиться к соот- ветствующему элементу структуры. Сделаем это в ходе тестирования программы, для чего используем заранее рассчитанные примеры. Для удобства чтения скопируем результаты, которые должна показать про- грамма.
Пример 1
(для проверки правильности перевода в новую систему счисления с погрешностью): перевести десятичную правильную дробь
0.78 в двоичную систему счисления.
ФУНКЦИЯ Z(2,8,0.78) должна возвратить:
Z(2,8,0.78)
0,0
= 8 (число значащих разрядов)
Z(2,8,0.78)
0,1
= (11000111) (дробная часть числа 0.78 в двоичной сис- теме счисления)
Z(2,8,0.78)
0,2
= 0.00265625 (погрешность)
108
Тестируем программу. Набираем
Пример 2
(для проверки правильности перевода в новую систему счисления без погрешности): перевести десятичную правильную дробь
0.625 в двоичную систему счисления.
ФУНКЦИЯ Z(2,8,0.625) должна возвратить:
Z(2,8,0.625)
0,0
= 3 (число значащих разрядов)
Z(2,8,0.625)
0,1
= (10100000) (дробная часть числа 0.625 в двоичной системе счисления)
Z(2,8,0.625)
0,2
= 0 (погрешность)
Тестируем программу. Набираем:
После успешного прохождения тестов позиция 10.5.2 завершена.
Этап 5
завершен.
азработка программы
закончен
Р
а. в си ным льная десятичная дробь не обяз ограмма «съест» и такое –
р
10.6. Экспе именты с программой
о,
Любопытн что программа позволяет переводить десятичные дроби стемы счисления с нецелыми основаниями (не только положитель- и, но и отрицательными). И сама прави тельно должна быть положительной (пр а
109
кто так всегда и бывает: с помощью программы почти всегда удается сделать больше, чем предусмотрено за- данием.
Например, переведите десятичную дробь 0.625 в систему счисления с основанием
π. Получим: бы мог подумать заранее!). Почти
Оформление паспорта программы
. Проведите еще какие-либо экс- ты (например, попыт перимен айтесь перевести отрицательную дробь, не- прав ательные основания системы счис- лени ). На основании эксперимента оформите паспорт программы, га- рант результата при соблюдении огра- ничений, указанных в нем. В паспорте укажите:
Число, подлежащее переводу, должно быть
……………….………… ильную дробь, используйте отриц я
ирующий получение правильного
(например: правильной десятичной дробью, правильной положительной десятичной дробью…)
Максимальное число позиций, отводимых для выдачи результата
:
……………………………………………………..…………………….…
(например: не ограничивается или ограничивается возможностями ЭВ ,
М
или ь, равно какому-то конкретному числу – в этом случае нужно указат какому …)
Основание новой системы счисления должно быть
(нап
, любым…) ример, целым, целым положительным
110
Например, переведите десятичную дробь 0.625 в систему счисления с основанием
π. Получим: бы мог подумать заранее!). Почти
Оформление паспорта программы
. Проведите еще какие-либо экс- ты (например, попыт перимен айтесь перевести отрицательную дробь, не- прав ательные основания системы счис- лени ). На основании эксперимента оформите паспорт программы, га- рант результата при соблюдении огра- ничений, указанных в нем. В паспорте укажите:
Число, подлежащее переводу, должно быть
……………….………… ильную дробь, используйте отриц я
ирующий получение правильного
(например: правильной десятичной дробью, правильной положительной десятичной дробью…)
Максимальное число позиций, отводимых для выдачи результата
:
……………………………………………………..…………………….…
(например: не ограничивается или ограничивается возможностями ЭВ ,
М
или ь, равно какому-то конкретному числу – в этом случае нужно указат какому …)
Основание новой системы счисления должно быть
(нап
, любым…) ример, целым, целым положительным
110
1 2 3 4 5 6 7 8 9 10 11
§11. Задания для самостоятельной разработки программы
Ниже приводятся два задания на самостоятельную разработку програм- мы.
11.1
. Задание 1 (более простое) для тех, кто не очень уверенно
программирует
Переработайте программу, разработанную после выполнения п. 8.5 так, чтобы она переводила правильную десятичную дробь в новую сис- тему счисления с минимальным числом позиций так, чтобы число было переведено с погрешностью не выше заданной. Если максимального чис- ла позиций, предусмотренных для выдачи результата, не достаточно для перевода числа с погрешностью не выше заданной – перевести десятич- ную дробь в новую систему счисления с максимальным числом позиций.
Переделка окажется очень малой и простой.
ДАНО
:
action
– десятичная правильная дробь, подлежащая переводу в но- вую ция Z(osnovanie, pogreshnost, n_bit
max
, fraction
), возвра и от максимально допустимого числа позиций);
– погрешность представления дроби fraction в новой системе счис- лени . Может быть выше требуемо pogreshnost, если числа разрядов
n_bit
max
недостаточно для представления дроби с требуемой точностью.
Не обязательно выполнять оба задания, достаточно одного (любого).
osnovanie
– основание новой системы счисления;
pogreshnost
– желательная погрешность перевода дроби в новую систему счисления
(желательно, чтобы погрешность перевода была не выше значения
pogreshnost
. Это «желание» не всегда выполнимо: для некоторых десятичных дробей точ- ное представление в новой системе при конечном числе позиций окажется невозможным)
;
n_bit
max
– максимально допустимое число позиций для выдачи ре- зультата;
fr
систему счисления.
ПОЛУЧИТЬ
: функ щает СТРУКТУРУ (N
r
x
ε) с элементами:
N
– число позиций, либо достаточных для представления дроб
r
и
tion
с погрешностью не выше заданной pogreshnost (при этом полу-
frac
чится N
r
≤ n_bit
max
), либо (если при максимально допустимом числе раз- рядов n_bit
max
требуемая точность не достигается) N
r
получится равным
_bit
n
max
;
x
– матрица-строка с числом элементов, равным N
r
(в этой програм- роке x будет раз- ме, в отличие от разработанной, число элементов в ст личным в зависимости от требований к погрешности
ε
я й
111
1
ых в
свои силах
ха- ракт изуется четверкой параметров: {продолжительность импульса;
верх
ы, показанные на рис. 3.4, должны принимать зна- чени
1.2. Задание 2 (более сложное) для программистов, уверенн
х
11.2.1. Постановка задачи.
Разработайте функцию, генерирующую импульсы прямоугольной формы (рис. 3.4). Прямоугольный импульс ер
ний уровень
(максимум); нижний уровень (минимум); начальное зна-
чение
}. Эти параметр я, указанные пользователем. Им же задается максимальная продол- жительность серии импульсов (на рис. 3.4 – максимальное число тактов отсчета дискретного времени).
Рис. 3.4. Иллюстрация к содержательной постановке задачи.
ДАНО
: и
д
X
max
– максимальное значен е импульса ( ействительное число);
X
min
– минимальное значение импульса (действительное число);
Δs – продолжительность импульса (число тактов дискретного време- ни, в течение которого значение импульса не изменяется (целое число);
N
– число тактов дискретного времени, для которого должна быть получена серия импульсов.
X
start
– начальное состояние (стартовое значение), задается для пер- вого импульса серии.
ПОЛУЧИТЬ
: функция X(X
max
, X
min
,
Δs, N, X
start
)
, возвращает вектор
X
с элементами X , показываю
s
щими значение импульса в s-м такте, s =
0,...,N
. Значение элемента вектора X
0
должно быть равно заданному ар- гументу функции X
start
112
11.2.2. Help для программистов, не совсем уверенных в своих силах.
Позиция
1: нахождение идеи алгоритма
Зададим себе вопрос – чем отличается номер такта дискретного вре- мени, в который происходит «переброска» импульса с минимума на мак- симум и наоборот, от других номеров тактов, в которых импульс не из- меняет своего значения? Пусть, например, заданная пользователем про- должительность импульса составляет 11 тактов, а номер текущего такта 28.
Ясно, что число 28 не удается представить как целое число продолжи- тельностей. Поэтому в текущем такте импульс будет иметь то же значе- ние, что и в предшествующем, 27-м.
Если же номер текущего такта равен, например, 44, то (поскольку в
44 такта укладывается целое число 11-тактных продолжительностей) нужно изменять импульс с выполнением следующего правила:
1. Если на предшествующем такте импульс имел максимальное зна- чение, то его значение нужно заменить на минимальное;
2. Если же на предшествующем такте импульс имел минимальное значение, то его значение нужно заменить на максимальное.
Отсюда следует, что можно использовать такой «ключ» переброски импульса с минимума на максимум и наоборот:
Пусть имеет место s-й такт дискретного времени. Тогда, если
s
s
Δ
– целое число, значение импульса нужно «перебросить», а в противном случае – сохранить прежнее значение.
Позиция
1 закончена.
Позиция
2: подбор встроенных Mathcad-функций.
Полный с помощью иконки f(x) на строке Standard (есл эта строка на мониторе не показана
– вк из меню View – Toolbars – Standard). Подходящие функ- ции зу
floo
ия мом список функций Mathcad’а можно просмотреть и лючите ее
– округление до целого числа сверху ceil( ) («до потолка») или сни н
r( )
(«от пола»). Обе они могут быть использованы для определе ента переброски значения импульса. Остановимся на функции округ- ления снизу floor( ). Ее действие легко понять на примере:
0 4
;
4 44
;
3 43
;
1 11 18
=
⎟
⎞
⎜
⎛
=
⎟
⎞
⎜
⎛
=
⎟
⎞
⎜
⎛
=
⎟
⎠
⎞
⎜
⎝
⎛
floor
floor
floor
floor
11 11 11
⎠
⎝
⎠
⎝
⎠
⎝
Мы видим, что если номер такта кратен
Δs, то
⎟
⎠
⎞
⎜
⎛
=
s
floor
s
,
⎝
например,
Δ
Δ
s
s
11 44 11 44 =
⎟
⎠
⎞
⎜
⎝
⎛
floor
. Для номеров тактов, не кратных
Δs,
s
s
s
s
floor
Δ
<
⎟
⎞
⎜
⎛
Δ
, напр
⎠
⎝
имер,
11 43 43
⎞
⎛
3 11
<
=
⎟
⎠
⎜
⎝
floor
113
Это свойство можно использовать как ключ для изменения импульса с минимума на максимум и наоборот.
Позиция
2 закончена.
Позиция
3. К разработке алгоритма: фрагмент Исполнителя для
переключения значений импульса.
ЕСЛИ
⎟
⎠
⎞
⎜
⎝
⎛
Δ
=
Δ
s
s
floor
s
s
И значение импульса X
s
-1
в
(s-1)-м такте
было меньше или равно
(
≤) минимальному значению X
min
ТО
присвоить импульсу X
s
в s-м такте максимальное значение;
ЕСЛИ
⎟
⎠
⎞
⎜
⎝
⎛
Δ
=
Δ
s
s
floor
s
s
И значение импульса X
s
-1
в
(s-1)-м такте
было больше или равно
(
≥) максимальному значению X
max
ТО
присвоить импульсу X
s
в s-м такте минимальное значение;
В ОСТАЛЬНЫХ СЛУЧАЯХ присвоить импульсу X
s
в s-м такте то
же значение
X
s
-1
, что и в предыдущем,
(s-1)-м такте.
КОНЕЦ ЕСЛИ
Позиция
3 закончена.
Позиция
4. Некоторые детали.
1. Запись условий с логическим оператором И делается с испо
- ванием знака умножения (*).
2. В записи условий нужно испол льзо ьзовать жирный знак равенства. овия (рис.3.5):
3. Пример записи усл
Рис. 3.5. Пояснения к записи условий переключения им
Позици
правильно
пульсов.
я
4 закончена.
Позиция
5. Так будут выглядеть графики (рис. 3.6), если программа
будет работать
114
Рис. 3.6. Вывод результата работы программы на график.
Позиция
5 закончена.
Help
закончен.
§12. Учебная задача
12.1.
Введение
В замечательной книге Дж. Пойа «Как решать задачи» указываются следующие
тельно-
сти развито
во задачи. ь решения, а также его потенциал в качест- ве средства для решения других задач. этапы, выполнение которых (при наличии изобрета
го мышления
) может привести к успеху:
и
Фаза 1
. Понять сущест
Фаза 2
. Разработать план решения задачи.
Фаза 3
. Выполнить план.
Фаза 4
. Оценить точност а) Импульсы стартуют с максимального значения в) Импульсы стартуют со значения, есовпадающего ни с минимальным г) Две сериии, показанные на одном графике. Параметры импульсов раз- н
личны импульсы:
Trace – Type - Step минимального значения
Опция графика, выводящего прямоугольные б) Импульсы стартуют с ни с максимальным
115