Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mathcad_book.pdf
Скачиваний:
52
Добавлен:
23.02.2015
Размер:
3.8 Mб
Скачать

§11. Задания для самостоятельной разработки программы

Ниже приводятся два задания на самостоятельную разработку программы. Необязательновыполнятьобазадания, достаточноодного(любого).

11.1. Задание 1 (более простое) для тех, кто не очень уверенно

программирует

Переработайте программу, разработанную после выполнения п. 8.5 так, чтобы она переводила правильную десятичную дробь в новую систему счисления с минимальным числом позиций так, чтобы число было переведено с погрешностью не выше заданной. Если максимального числа позиций, предусмотренных для выдачи результата, не достаточно для перевода числа с погрешностью не выше заданной – перевести десятичную дробь в новую систему счисления с максимальным числом позиций.

Переделка окажется очень малой и простой.

ДАНО:

osnovanie – основание новой системы счисления;

pogreshnost – желательная погрешность перевода дроби в новую

систему счисления (желательно, чтобы погрешность перевода была не выше значения pogreshnost. Это «желание» не всегда выполнимо: для некоторых десятичных дробей точ-

ное представление в новой системе при конечном числе позиций окажется невозможным);

n_bitmax – максимально допустимое число позиций для выдачи результата;

fraction – десятичная правильная дробь, подлежащая переводу в новую систему счисления.

ПОЛУЧИТЬ: функция Z(osnovanie, pogreshnost, n_bitmax, fraction),

возвращает СТРУКТУРУ (Nr x ε) с элементами:

Nr – число позиций, либо достаточных для представления дроби fraction с погрешностью не выше заданной pogreshnost (при этом получится Nr n_bitmax), либо (если при максимально допустимом числе разрядов n_bitmax требуемая точность не достигается) Nr получится равным

n_bitmax;

x – матрица-строка с числом элементов, равным Nr (в этой программе, в отличие от разработанной, число элементов в строке x будет различным в зависимости от требований к погрешности и от максимально допустимого числа позиций);

ε – погрешность представления дроби fraction в новой системе счисления. Может быть выше требуемой pogreshnost, если числа разрядов n_bitmax недостаточно для представления дроби с требуемой точностью.

111

11.2. Задание 2 (более сложное) для программистов, уверенных в своих силах

11.2.1. Постановка задачи. Разработайте функцию, генерирующую импульсы прямоугольной формы (рис. 3.4). Прямоугольный импульс ха-

рактеризуется четверкой параметров: {продолжительность импульса; верхний уровень (максимум); нижний уровень (минимум); начальное зна-

чение}. Эти параметры, показанные на рис. 3.4, должны принимать значения, указанные пользователем. Им же задается максимальная продолжительность серии импульсов (на рис. 3.4 – максимальное число тактов отсчета дискретного времени).

Рис. 3.4. Иллюстрация к содержательной постановке задачи.

ДАНО:

Xmax – максимальное значение импульса (действительное число); Xmin – минимальное значение импульса (действительное число);

s – продолжительность импульса (число тактов дискретного времени, в течение которого значение импульса не изменяется (целое число);

N – число тактов дискретного времени, для которого должна быть получена серия импульсов.

Xstart – начальное состояние (стартовое значение), задается для первого импульса серии.

ПОЛУЧИТЬ: функция X(Xmax, Xmin, s, N, Xstart), возвращает вектор X с элементами Xs, показывающими значение импульса в s-м такте, s =

0,...,N. Значение элемента вектора X0 должно быть равно заданному аргументу функции Xstart.

112

11.2.2. Help для программистов, не совсем уверенных в своих силах.

Позиция 1: нахождение идеи алгоритма

Зададим себе вопрос – чем отличается номер такта дискретного времени, в который происходит «переброска» импульса с минимума на максимум и наоборот, от других номеров тактов, в которых импульс не изменяет своего значения? Пусть, например, заданная пользователем продолжительность импульса составляет 11 тактов, а номер текущего такта 28. Ясно, что число 28 не удается представить как целое число продолжительностей. Поэтому в текущем такте импульс будет иметь то же значение, что и в предшествующем, 27-м.

Если же номер текущего такта равен, например, 44, то (поскольку в 44 такта укладывается целое число 11-тактных продолжительностей) нужно изменять импульс с выполнением следующего правила:

1.Если на предшествующем такте импульс имел максимальное значение, то его значение нужно заменить на минимальное;

2.Если же на предшествующем такте импульс имел минимальное значение, то его значение нужно заменить на максимальное.

Отсюда следует, что можно использовать такой «ключ» переброски импульса с минимума на максимум и наоборот:

Пусть имеет место s-й такт дискретного времени. Тогда, если

s

s

целое число, значение импульса нужно «перебросить», а в противном случае – сохранить прежнее значение.

Позиция 1 закончена.

Позиция 2: подбор встроенных Mathcad-функций.

Полный список функций Mathcad’а можно просмотреть с помощью иконки f(x) на строке Standard (если эта строка на мониторе не показана

– включите ее из меню View Toolbars Standard). Подходящие функции – округление до целого числа сверху ceil( ) («до потолка») или снизу floor( ) («от пола»). Обе они могут быть использованы для определения момента переброски значения импульса. Остановимся на функции округления снизу floor( ). Ее действие легко понять на примере:

18

 

 

 

43

 

 

44

 

 

4

 

floor

11

 

=1;

floor

 

 

= 3;

floor

 

 

= 4;

floor

 

 

= 0.

11

11

11

 

 

 

 

 

 

 

 

 

 

 

 

Мы видим, что если номер такта кратен

s, то

s

 

 

s

,

 

=

floor

 

 

 

s

 

 

 

 

 

 

 

 

 

 

 

 

s

 

например,

 

44

 

 

44

. Для номеров тактов, не

кратных

 

s,

floor

 

 

=

 

 

11

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

 

s

, например,

 

43

 

43

.

floor

 

 

<

 

floor

 

 

= 3 <

 

 

s

11

11

 

s

 

 

 

 

 

 

113

Это свойство можно использовать как ключ для изменения импульса с минимума на максимум и наоборот.

Позиция 2 закончена.

Позиция 3. К разработке алгоритма: фрагмент Исполнителя для переключения значений импульса.

ЕСЛИ

s

 

 

s

И значение импульса Xs-1 в (s-1)-м такте

 

=

floor

 

 

s

 

 

 

 

s

 

было меньше или равно () минимальному значению Xmin ТО присвоить импульсу Xs в s-м такте максимальное значение;

ЕСЛИ

s

 

 

s

И значение импульса Xs-1 в (s-1)-м такте

 

=

floor

 

 

s

 

 

 

 

s

 

было больше или равно () максимальному значению Xmax ТО присвоить импульсу Xs в s-м такте минимальное значение;

В ОСТАЛЬНЫХ СЛУЧАЯХ присвоить импульсу Xs в s-м такте то же значение Xs-1, что и в предыдущем, (s-1)-м такте.

КОНЕЦ ЕСЛИ Позиция 3 закончена.

Позиция 4. Некоторые детали.

1.Запись условий с логическим оператором И делается с использованием знака умножения (*).

2.В записи условий нужно использовать жирный знак равенства.

3.Пример записи условия (рис.3.5):

Рис. 3.5. Пояснения к записи условий переключения импульсов.

Позиция 4 закончена.

Позиция 5. Так будут выглядеть графики (рис. 3.6), если программа будет работать правильно.

114

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]