Файл: Е. Г. Крушель, А. Э. Панфилов осваиваем mathcad.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.03.2024

Просмотров: 104

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

– о числе значащих разрядов (если дробь представима точно, то часть разрядов справа будет нулями). В примере, рассмотренном выше, числ зультатами пе- рево ся простыми переменными, другая часть (x) – массив с ин- декс зы- ваются структурами.
тап 1
завершен. ятичной дроби в нов оби дет получен остаток, равный нулю, либо
(б)
не будут исчерпаны позиции, отведенные для хранения числа.
Нужно составить примеры для обоих вариантов окончания работы алго ставлено неточно: (0.1 1
Проверка
: о значащих разрядов равно 3.
Таким образом, определяем перечень переменных, которые должна возвратить функция Z(osnovanie, n_bit, fraction):
ƒ
Число значащих разрядов N
r
;
ƒ
Массив-строку x из n_bit элементов (столбцов) с ре да дроби в новую систему счисления;
ƒ
Погрешность
ε от перевода десятичной дроби fraction в новую систему счисления.
Состав возвращаемых переменных неоднороден: часть переменных
(N
r
,
ε) являют ом j
∈{0, .., n_bit-1}. Как известно, смешанные типы данных на
Позиция 10.1.2
завершена.
Э
10.2. Выполнение этапа 2 «Разбор способа получения результата.
Расчет примеров»
Алгоритм перевода дес ую систему счисления состоит из последовательности умножения др на новое основание,
выд
и
елен я целой части
(она записывается в очередную позицию слова- ответа), вычисления остатка и повторного умножения его на основание
– до тех пор, пока (а) либо не бу ритма.
Пример 1
. Пусть число разрядов в слове n_bit = 8. В результате вы- числ ок на чи дв ений, п азанных рис. 3.3,
сло 0.78 10
в оичной системе пред-
0 0 0 1 1 1
)
2
. Его дробная часть читается «сверху вниз» в ходе последовательных умножений остатка от вычитания целой части на 2.
77734375 0
256 1
1 128 1
1 64 1
1 32 1
0 16 1
0 8
1 0
4 1
1 2
1 1
=

+

+

+

+

+

+

+

Погрешность
ε = (0.78-0.77734375) = 0.00265625
Это же значение можно прочесть и при выводе результата: остаток после последнего шага равен 0.68, номер последнего разряда равен 8, то- гда погрешн ость равна:
ε = 0.68 × 2
–8
= 0.00265625.
93

Число значащих разрядов получи- лось равным числу разрядов слова (в при- мере 8).
, которая предста- в новой системе счисления без по-
5
× 2 = 1.25, остаток 0.25 × 2
Ответ имеет вид: (0.10100000), число зна-
Пример2.
Перевод правильной де- сятичной дроби к такой вима грешности. Переводим 0.625 в двоичную систему. 0.62
= 0.5, остаток 0.5
× 2 = 1, остаток равен 0. чащих разрядов равно 3, погрешность равна 0.
Проверка
:
625 0
=
8 1
1 4
1 0
2 1
1

+

+

схематичной форме»
(Исполнитель по представления результата задано.
ƒ
fraction – правильная десятичная дробь, подлежащая переводу в новую сис- тему счисления.
ПОЛУЧИТЬ
: функция Z(osnovanie,
n_b
– 1.00 0.78
×2 =
1.56
10.3. Выполнение этапа 3 «Состав-
ление алгоритма и представление его в
акад. А. П. Ершову).
При разборе алгоритма полезно сле- дить за операциями по примеру (этап 2).
ДАНО
: создать функцию, переводя- щую заданную десятичную правильную дробь в новую систему счисления с за- данным основанием. Число позиций для
Идентификаторы аргументов:
ƒ
osnovanie – основание новой сис- темы счисления;
ƒ
n_bit – число позиций для пред- ставления результата;
it, fraction
) возвращает СТРУКТУРУ {N
r
x
ε}
Комментарии
:
ƒ
N
r
– число значащих разрядов (позиций) в слове длиной n_bit.
Рис. 3.3. Пр ер евода десятич- ной дроби в двоичную систему. им пер
1
0.56 остаток
≠ 0
×2 =
1.12
– 1.00 0.12 остаток
≠ 0
×2 =
0.24
– 0.00 0.24 остаток
≠ 0
×2 =
0.48
– 0.00
≠ 0 0.48 остаток
×2 =
0.96
– 0.00 0.96 остаток
≠ 0
×2 =
1.92
– 1.00 0.92 остаток
≠ 0
×2 =
1.84
– 1.
00 0.84 остаток
≠ 0
×2 =
1.68
– 1.00 0.68 остаток
≠ 0
1
0
0
0
1
1
1
94


ƒ
x – матрица-строка с числом является сомножителем входит в формулу расче ия дроби; j = 0,…,n_bit – 1 (ну- мерация элементов матрицы – с нуля, как это принято в Mathcad);
ƒ
ε – погрешность представл
fraction
в системе счис числом позиций n_bit.
Для ОБРАЩЕНИЯ к функции словые значения аргументо
АЛГОРИТМ вычисления функц
НАЧАЛО расчета значения фун
ПРИСВОИТЬ начальное значе
ПРИСВОИТЬ начальное знач
ction
) переменной c, обозначаю- щей остаток;
ЦИКЛ ПОКА значение числа значащих разрядов N
r
< n_bit
ВЫПОЛ-
НЯТЬ
ВЫЧИСЛИТЬ c
*
osnovanie
;
ПРИСВОИТЬ результат вычисле
ПРИСВОИТЬ элементу мас
ВЫЧИСЛИТЬ ostatok как Р
ПРИСВОИТЬ переменной c
tatok
;
УВЕЛИЧИТЬ на 1 значение счет
ЕСЛИ ostatok = 0 ТО ПРЕ
за ск
ПРИСВОИТЬ новое значени
КОНЕЦ ЦИКЛА ПОКА…
ЕСЛИ число значащих разря
bit
раз- рядов ТО
Комментарий:
разряды, оставш
ЦИКЛ ДЛЯ КАЖДОГО j =
ВЫПОЛНЯТЬ
ПРИСВОИТЬ нуль j-му элем
КОНЕЦ ЦИКЛА ДЛЯ КАЖ
КОНЕЦ ЕСЛИ
ε з
– n_bit
ПРИСВОИТЬ возвращаемые знач элементов, равным n_bit. Элемент x
j
, с которым слагаемое x
j
× (osnovanie)
-(j+1)
та значен ения правильной десятичной дроби ления с основанием osnovanie в слове с
Z
(osnovanie, n_bit, fraction) ЗАДАТЬ чи- в (osnovanie, n_bit, fraction); ии Z(osnovanie, n_bit, fraction) кции Z(osnovanie, n_bit, fraction). ние (нуль) счетчику значащих разрядов N
r
ение (fra
ния переменной d; сива-строки
r
N
x
,
0
[целую часть d];
АЗНОСТЬ между d и [целой частью d]; значение переменой os
чика значащих разрядов N
r
;
РВАТЬ ЦИКЛ и ПЕРЕЙТИ к КОМАНДЕ
обкой КОНЕЦ ЦИКЛА е ostatok переменной c; дов N меньше заданного числа n_
r
иеся свободными, заполнить нулями.
N
r
+ 1, …, n_bit - 1
енту массива-строки x
0,j
;
ДОГО…
ПРИСВОИТЬ переменной начение ostatok osn
*
ovanie
ения структуре
{N ×
r .
ε
}
КОН
А
ЕЦ АЛГОРИТМ
Этап 3
завершен.
95

10.4. Выполнение этапа 4 «Расчет контрольных примеров при-
ельно к алгоритму»
качестве контрольных примеров используем примеры, рассчитан- этапе 2.
менит
В ные на
osnova
счис ную дробь
1000111) (дробная часть числа 0.78 в двоичной сис-
.78)
0,2
= 0.00265625 (погрешность) в новую систему и
дробь
0.6
нт
0
г за шагом.
Удоб по Исполнителю (этап 3). идентификатор функции, в скобках перечисляем аргу- м
ится так:
Пусть число разрядов n_bit = 8, основание новой системы счисления
nie
= 2.
Пример 1
(для проверки правильности перевода в новую систему ления с погрешностью): перевести десятичную правиль
0.78 в двоичную систему счисления.
ФУНКЦИЯ Z(2,8,0.78) должна возвратить:
Z
(2,8,0.78)
0,0
= 8 (число значащих разрядов)
Z
(2,8,0.78)
0,1
= (1
теме счисления)
Z
(2,8,0
Пример 2
(для проверки правильности перевода сления без погрешности): перевести десятичную правильную сч
5 в двоичную систему счисления.
ФУНКЦИЯ 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 (погре
Этап 4
завершен.
10.5. Выполнение этапа 5 «Составление программы, отладка на
рольных примерах»
ко
.5.1. Составление программы
будем проводить ша
1
но следить за реализацией алгоритма
Шаг 1
. Вводим енты, нажимаем знак присваивания (вводится двоеточием). Получ
Шаг 2.
На панели «
вите из Меню View – Tool
Программирование» (если ее нет на экране – вызо-
bars – Programming
) найдите иконку Add Line
(«до елкните по ней левой кнопкой мыши. Введется опе- бавить линию») и щ
96

раторная скобка «начало программы – конец программы». Получится так:
Шаг 3.
Установите указатель мыши на верхний слот и щелкните ле- вой кнопкой. Получится так:
Шаг 4
. Щелчком левой кнопки мыши введите с панели программи- рования знак присваивания. Получится так:
Шаг 5
. Пользуясь мышью, присвойте начальное значение (нуль) счетчику числа значащих разрядов N
r
(он же будет использован и как счетчик циклов). Получится так:
Шаг 6
. Аналогичными действиями присвойте исходное значение пе- реме гласно алгоритму будем в цикле умножать на ос- нова ления. Исходное значение равно той десятичной дроб нной c, которую со ие системы счис н
и, которую мы переводим в новую систему счисления. Получится так:
Шаг 7
. Длина вертикальной линии (операторной скобки), установ- ленная по умолчанию, исчерпана. Нужно ее увеличить. Предварительная операция: охватите синим контуром нижнюю строку программы. Полу- чится так:
97

Шаг 8
. Теперь щелчком левой кнопки мыши по иконке Add Line на па- нели «Программирование» удлините операторную скобку. Получится так:
Шаг 9
. Оформляем условие цикла: делать вычисления, пока не бу- дут исчерпаны разряды слова (записаны в составе аргументов функции,
n_bit
). Для этого щелкните левой кнопкой мыши по оператору while на па- нели «Программирование» (НЕЛЬЗЯ набирать от руки!). Получится так:
Шаг 10.
Введите условие вхождения в цикл. Получится так:
Шаг 11
. Образуйте операторную скобку оператора цикла while
(щелчком в слоте оператора while введите скобку с панели «Программи- рование», иконка Add Line), установите указатель в верхнем слоте внут- ри операторной скобки цикла. Получится так:
Шаг 12
. Согласно алгоритму перевода десятичной дроби в другую систему счисления присвойте переменной d значение прои дро- би на основание, выделите целую часть произведения и присвойте его N
r
зведения
98

-му
- цы). При первом входе в цикл значение индекса N
r
равно 0.
Подготовьтесь к удлинению операторной скобки (охватите нижнюю строку программы целиком синим контуром). Получится так: элементу строки x, т. е. элементу с индексами x
0,s
(напоминание: ну- мерация элементов массива в Mathcad начинается с нуля, а не с едини
Шаг 13
. Чтобы каждый раз не тратить время на удлинение ой скобки, «нащелкайте» с помощью иконки Add Line
опера- торн
(панель
«Программирование») сразу несколько слотов. Не бойтесь образовать лишние слоты – их легко будет удалить. Получится так:
Шаг 14
. Согласно алгоритму следует вычислить остаток (разность между результатом умножения дроби и его целой частью, присваивается переменной ostatok) и подготовиться к новому циклу (присвоить цикло-
99

вой переменной значение N
r
+1). Получится так:
Шаг 15
. Оформление досрочного выхода из цикла. Для этого введ щел ем чком кнопки мыши оператор условия if (иконка if на панели «Про- граммирование»). Получится так:
100

Шаг 16
. Вводим условие досрочного прекращения цикла: ЕСЛИ
ostatok
= 0. Условие вводится справа от оператора if – вот так:
Шаг 17
. Показываем, что должно быть сделано, если ostatok = 0. В данном случае должен быть прерван цикл (оператор break, вводится щелчком по соответствующей иконке на панели «Программирование»).
Получится так:
101

Шаг 18
. Если досрочный выход из цикла не произошел, нужно при- своить новое значение остатка ostatok переменной c. Получится так:
Шаг 19
. Дальше текст программы должен записываться вне опера- торной скобки while. Чтобы выйти из нее, охватите синим контуром часть программы до оператора цикла while включительно. Угол контура должен быть справа (иначе слот для ввода продолжения программы появится вы- ше while). Переброску угла синего контура удобно делать клавишей <In-
sert>
, а увеличение охвата – клавишей <Пробел>. Получится так:
102

Шаг 20
. Теперь, если щелкать левой кнопкой мыши по иконке Add
Line
, то появятся слоты для продолжения программы вне цикла. Заго- товьте несколько таких слотов. Получится так:
103

Шаг 21
. Теперь нужно циклически присвоить нули тем разрядам, которые остались незаполненными (если цикл while оказался прерван- ным досрочно, т. е. если для представления дроби fraction достаточно меньшего, чем n_bit числа разрядов). Вводим условный оператор и спра- ва указываем условие, при котором следует дописывать незаполненные позиции. Получится так:
104

Шаг 22
. Показываем, что должно быть сделано, если N
r
< n_bit.
Согласно алгоритму следует циклически присваивать нулевые значения разрядам числа, начиная с N
r
+1 –го до последнего разряда (его номер
n_bit
-1, учитывая Mathcad-нумерацию с нуля, а не с единицы). Оператор
for
введем с соответствующей иконки щелчком мыши в слот слева от оператора if. Внутреннюю операторную скобку цикла for Mathcad офор- мит сам. Получится так:
В этом случае в цикле – только один оператор, поэтому Mathcad не вводит линию-границу операторной скобки (считает, что и так поймем).
105


Шаг 23
. В ходе вычислений получены данные для определения по- грешности (если данная дробь fraction не может быть представлена в но- вой системе точно), см. пример 1. Присваиваем значение погрешности переменной
ε, входящей в состав структуры, возвращаемой функцией
Z
(osnovanie, n_bit, fraction). Получится так:
Шаг 24
(последний). Все составляющие структуры (N
r
x
ε), которы долж
n_b
Значащие разряды – такие, за которыми: либо следуют все нули, если заданная дробь fraction может быть представлена без потерь точности меньшим, чем n_bit, числом разрядов; либо число разрядов окажется исчерпанным с потерей точности представления дроби fraction. В этом случае число значащих разрядов равн n_bit. ассчитаны также элементы матрицы-строки x с результатом пере- вода в новую систему счисления и погрешность
ε, возникающая при реводе. Осталось записать структуру, возвращаемую функцией. е ны возвращаться функцией Z(osnovanie, n_bit, fraction), получены.
После окончания цикла или после его досрочного прерывания значение пере енной N
r
окажется равным числу значащих разрядов в слове длины м
it
ƒ
ƒ
о
Р
дроби пе
106

Оформляем перечень значений, возвращаемых функцией Z(osnovanie,
n_bit
, fraction). Согласно заданию функция должна возвращать:
ƒ
Число значащих разрядов (в обозначениях программы N
r
);
ƒ
Массив значений из 8-ми элементов (матрица-строка x), содержа- щий перечень значений в разрядах числа.
ƒ
Погрешность
εот представления заданной дроби fraction в новой системе счисления с основанием osnovanie.
В данном случае нужно, чтобы функция возвратила разнородную структуру данных (в ней и простые переменные, и массив). Такая струк- тура данных так и называется – структура (в отличие от простой пере- менной или массива).
Для ввода перечня возвращаемых значений в слот программы ис- пользуем шаблон матрицы. Можно использовать меню InsertMatrix, но лучше запомнить сочетание клавиш <Ctrl>+<M> (мнемоника M от matrix). Указываем число строк (rows) 1, число столбцов (columns) 3 по числу выводимых элементов структуры. В каждый из слотов матрицы вводим идентификаторы переменных. Если остались лишние слоты – удалите их. Получится так:
Разработка программы завершена. Мы получили функцию в форме матрицы-строки, первый элемент которой – число значащих разрядов,
107