Рабочая тетрадь № 3
Для представления чисел в ЭВМ обычно используют битовые наборы – последовательности нулей и единиц фиксированной длины. Позиция в битовом наборе называется разрядом.
|
1. Теоретический материал
| Для представления целых чисел без знака удобен битовый набор, соответствующий записи в двоичной системе счисления. Для целых числе без знака как правило выделяютk = 8, 16, 32 или 64 разряда.
Для получения компьютернойзаписи целого числа без знака требуетсяего перевод в двоичную систему счисления, далеенеобходимо дополнить результат нулями слева до стандартной разрядностиk.
| 2. Пример
| Задача:
|
| Найти представление беззнаковогоцелого числа 2610 в восьмиразрядном битовом наборе
| Решение:
|
| Переведем число 26 в двоичную систему счисления. 26
| 2
|
|
|
|
| -26
| 13
| 2
|
|
|
| 0
| -12
| 6
| 2
|
|
|
| 1
| -6
| 3
| 2
|
|
|
| 0
| -2
| 1
|
|
|
|
| 1
|
|
| Результат перевода: 2610 = 110102
Дополним полученный результат слева нулями до восьми шестнадцати
2610 = 000 110102
| Ответ:
|
| 00011010
|
3. Задания
| 1.
| Задача:
|
| Найти представление беззнакового числа 13210 в шестнадцатиразрядном битовом наборе
| Решение:
|
|
| Ответ:
|
| 0000 0000 1000 0100
| 2.
| Задача:
|
| Найти минимальное и максимальное значения чисел для 16-ти разрядного беззнакового представления
| Решение:
|
|
| Ответ:
|
| 1111 1111 1111 1111/0000 0000 0000 0001
|
1. Теоретический материал
| Для целых чисел со знаком задействуют три варианта компьютерного представления:
представление в прямом коде; представление в обратном коде; представление в дополнительном коде.
Во всех этих способахстарший (левый) разряд равен нулю, если число положительное и единице, если число отрицательное. Остальные разряды числа (цифровая часть или мантисса) задействованы для представления модуля числа.
Положительные числа в дополнительном, обратном и прямом кодеидентичны – мантиссавключает двоичное представление числа, а в старшем разряде располагается ноль.
Для отображения отрицательного значения в прямом коде, в разряд знакаставиться единица, а в разряды мантиссы – двоичный код его модуля.
Обратный код отрицательного числа получается инверсией всех цифр двоичного представления абсолютной величины, включая знаковый разряд: нули инвертируются в единицы, а единицы в нули.
Дополнительный код чисел с отрицательным знаком рассчитывается путем прибавления единицы к его младшему разряду обратного кода числа.
|
2. Пример
| Задача:
|
| Перевести число 45 в прямой, обратный и дополнительный код (k = 8)
| Решение:
|
| Сначала переведем десятичное число 45 в двоичную систему счисления. 45
| 2
|
|
|
|
|
| -44
| 22
| 2
|
|
|
|
| 1
| -22
| 11
| 2
|
|
|
|
| 0
| -10
| 5
| 2
|
|
|
|
| 1
| -4
| 2
| 2
|
|
|
|
| 1
| -2
| 1
|
|
|
|
|
| 0
|
|
| Получилось:4510 = 1011012.
Запишем прямой код числа. Первый слева разряд 0 (знак «плюс»). Оставшиеся 7 разрядов занимает число в двоичном представлении. Если в числе меньше 7 разрядов, оставшиеся дополняются нулями слева. Таким образом, для числа 45 получаем прямой код в виде 0,0101101 (первый слева 0 соответствует знаку, затем следует 0, дополняющий число до 7 разрядов, затем следует само двоичное число). Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково.
| Ответ:
|
| 0,0101101
| Задача:
|
| Найти прямой, обратный и дополнительный коды в однобайтовом представлении для числа -5610.
| Решение:
|
| Выполним перевод положительного числа 56 в двоичную систему счисления, получим: 5610 = 1110002.
Запишем прямой код числа. Всего в однобайтовом представлении 8 двоичных разрядов. Первый слева разряд – знаковый: 1 – для отрицательного числа. Оставшиеся 7 разрядов занимает число в двоичном представлении. Если в числе меньше 7 разрядов, оставшиеся дополняются нулями слева. Таким образом, для числа -56 получаем прямой код в виде 1,0111000.
Обратный код отрицательного числа получается из прямого инверсией всех разрядов, за исключением знакового. Получаем: 1,1000111.
Дополнительный код отрицательного числа получается из обратного кода прибавлением к двоичному числу единицы (знаковый разряд в операции не участвует):
1000111
+ 1
_____________
1001000
Получаем: 1,1001000
| Ответ:
|
| Прямой код 1,0111000
Обратный код 1,1000111
Дополнительный код 1,1001000
|
3. Задания
| 1.
| Задача:
|
| Перевести число 12 в прямой, обратный и дополнительный код (k = 8)
| Решение:
|
|
| Ответ:
|
| 0,0001100
| 2.
| Задача:
|
| Найти прямой, обратный и дополнительный коды в однобайтовом представлении для числа -3510.
| Решение:
|
|
| Ответ:
|
| 1,0100011/1,1011100/1,011101
| 3.
| Задача:
|
| Задан дополнительный код числа в однобайтовом представлении: 1,1011100. Найти число в десятичной системе счисления.
| Решение:
|
|
| Ответ:
|
| -36
|
1. Теоретический материал
| Сложение и вычитание чисел без знака осуществляется по стандартным алгоритмам для позиционных систем счисления.
При сложении в обратном коде складываются все разряды (включая знаковый) по обычному алгоритму. Результат сложения для k-разрядных чиселв общем виде имеет длину k+1 (старший разряд единица, если при сложении старших разрядов операндов был перенос, иначе – ноль). Значение левого k+1-го разряда прибавляется к младшему разряду результата. В итоге получим k-разрядный битовый набор – сумму чисел в обратном коде. Разность чисел в обратном коде x – y можно свести к операции сложения x+ (–y).
В дополнительном коде для сложения сначала по обычному алгоритму складываются все разряды (включая знаковый), азатем единицу переноса в k+1-й разряд необходимо отбросить.
|
2. Пример
| Задача:
|
| Сложить два числа: А10 = 7, В10 = 16.
| Решение:
|
| Переведем числа в двоичную систему счисления
А2 = +111 = +0111; В2 = +10000.
Исходные числа имеют различную разрядность, необходимо провести выравнивание разрядной сетки:
[A2]п = [A2]ок = [A2]дк = 0|00111; [В2]п = [В2]ок = [В2]дк = 0|10000.
Сложение в обратном или дополнительном коде дает один и тот же результат: +
| 0|
| 00111
| 0|
| 10000
| С2 =
| 0|
| 10111
| С10 =
| 23
|
| Ответ:
|
| 23
| Задача:
|
| Сложить два числа: А10 = +16, В10 = -7 в ОК (обратный код) и ДК (дополнительный код).
| Решение:
|
| Требуется преобразование А+(-В), в котором второй член записывается с учетом его знака:
[A2]п = [A2]ок = [A2]дк = 0|10000;
[В2]п = 1|111 = 1|00111; [В2]ок = 1|11000; [В2]дк = 1|11001
При складывании чисел в обратном и дополнительном кодах получены переносы в знаковый разряд и из знакового разряда. В случае первом случае (обратный код)при переносе из знакового разряда необходимо дополнительно прибавить единицу младшего разряда. Во втором случае (дополнительный код) данный перенос игнорируется.
| Ответ:
|
| 9
|
3. Задания
| Задача:
|
|
| Дано два десятичных двузначных целых числа: А = 78, В = 56. Вычислить (А-В)ок, (В-А)дк.
|
| Решение:
|
|
|
|
| Ответ:
|
|
| 277/106
|
|
Тест 3
| 0.
| Задание:
|
| Для представления целого числа может применяться
| Ответ:
|
| A) нормализованный или ненормализованный код
B) прямой, обратный или дополнительный код
C) естественный или экспоненциальный код
D) логарифмический и показательный код
| 2.
| Задание:
|
| Положительное число
| Ответ:
|
| A) выглядит одинаково только в прямом и обратном кодах
B) выглядит одинаково только в обратном и дополнительном кодах C) выглядит одинаково в прямом, обратном и дополнительном кодах
D) выглядит различно в прямом, обратном и дополнительном кодах
| 3.
| Задание:
|
| Если взять отрицательное число и инвертировать разряды кроме знакового, то получится
| Ответ:
|
| A) обратный код
B) прямой код
C) дополнительный код
D) двоичный код
| 4.
| Задание:
|
| Дополнительный код числа получается
| Ответ:
|
| A) из обратного кода прибавлением единицы к младшему разряду без переноса в знаковый разряд
B) из обратного кода прибавлением единицы к младшему разряду с переносом в знаковый разряд
C) из прямого кода прибавлением единицы к младшему разряду без переноса в знаковый разряд
D) из прямого кода прибавлением единицы к младшему разряду с переносом в знаковый разряд
|
5.
| Задание:
|
| Если к двоичному числу без знака добавить знаковый разряд то получится
| Ответ:
|
| A) обратный код
B) прямой код
C) дополнительный код
D) двоичный код
| 6.
| Задание:
|
| Число Х = 1410 в восьми разрядном двоичном дополнительном коде равняется
| Ответ:
|
| A) 00001110 B) 0110010
C) 1110001 D) нет верного ответа
| 7.
| Задание:
|
| Восьми разрядное двоичное число Х = (10001010)2, заданное в дополнительном коде в десятичной системе равняется
| Ответ:
|
| A) –10 B) +10 C) –117 D) –118
| 8.
| Задание:
|
| Восьми разрядное двоичное число Х = (00100111)2 заданное в обратном коде в десятичной системе равняется
| Ответ:
|
| A) –39 B) +39 C) –88 D) +88
| 9.
| Задание:
|
| Число Х = -6310 в прямом коде будет представлено как
| Ответ:
|
| A) 10111111 B) 00111111 C) 10011111 D) 00011111
| 10.
| Задание:
|
| Укажите дополнительный код десятичного числа -103 (минус сто три) в 8 разрядном компьютерном представлении.
| Ответ:
|
|
| Реализация задач на языке программирования Python
При написании программ часто возникает ситуация, когда необходимо производить различные математические вычисления. Как и другие языки программирования, Python предоставляет разнообразные функции для выполнения вычислений.
|
1. Теоретический материал
| Для математических расчетов с использованием стандартных математических функцийтребуется импортировать соответствующую библиотеку:
importmath
После импорта к функциям библиотеки можно обращаться следующим образом:
math.имя_функции(…)
В таблице представлен синтаксис и описание ключевых математических функций библиотеки mathязыка Python
Функция
Назначение
ceil(x)
Округляет число xдо ближайшего большего целого (округление "вверх").
floor(x)
Округляет число x до ближайшего меньшего целого (округление "вниз").
fabs(x)
Принимает абсолютное значение (модуль) числа x.
exp(x)
Принимает значениеex.
log(x[, b])
Если у функции один аргумент x, то функция принимает значение натурального логарифмаx. При передаче двух аргументов, второй выступает в качестве основания логарифма.
pow(x, y)
Принимает значение x в степени y.
sqrt(x)
Принимает значение квадратного корня из x.
acos(x)
Принимает значение арккосинусаx в радианах.
asi
(x)
Принимает значение арксинусаx в радиан
х.
atan(x)
Принимает значение арктангенсаx в радианах.
cos(x)
Принимает значение косинусаx, где xвыражен в радианах.
sin(x)
Принимает значение синусаx, где xвыражен в радианах.
tan(x)
Принимает значение тангенсаx, где x выражен в радианах.
|
2. Пример
| Задача:
|
| Для введенных чисел x и y найти значение функции
f(x,y) = 2yx+ ln|x+y3|
| Решение (код программы):
|
| import math
x = float(input('Введите x '))
y = float(input('Введите y '))
f = 2 * math.pow(y, x) + math.log(math.fabs(x + y ** 3))
print('f = ', f)
| Задача:
|
| Для введенных чисел x и y найти значение функции
| Решение (кодпрограммы):
|
| import math
x = float(input('Введите x '))
y = float(input('Введите y '))
if x * y <= -1:
f = math.sin(x * math.exp(y))
elif x * y >= 5:
f = x * x + math.tan(y)
else:
f = math.sqrt(math.fabs(math.cos(x * y)))
print('f = ', f)
| Задача:
|
| Вычислить значение функции f(x) = sin(x – e2) + 3x на отрезке [xn, xk] с шагом hx
|
Решение (кодпрограммы):
|
| import math
xn = float(input('Введитеxn '))
xk = float(input('Введитеxk '))
hx = float(input('Введитеhx '))
x = xn #устанавливаем x в начало отрезка в xn
whilex<= xk: #пока не дойдем до конца отрезка xk
f = math.sin(x + math.exp(2)) + math.pow(3, x)
print('x = ', x, ' f = ', f)
x = x + hx #прибавляем к аргументу шаг
| Задача*:
|
| Вычислить значения функции
При этом x изменяется в отрезке с шагом ; y изменяется в отрезке с шагом .
| Решение (кодпрограммы):
|
| import math
ax, bx, hx = 0.0, 1.0, 0.2
ay, by, hy = 1.0, 2.0, 0.5
x = ax #устанавливаем x в начало отрезка в xn
whilex<= bx: #пока не дойдем до xk
y = ay #устанавливаем y в начало отрезка в yn
whiley<= by: #пока не дойдем до yk
if x + y <= 2:
f = math.pow(x + y, 1.0 / 5.0)
else:
f = math.pow(math.fabs(math.sin(x)), y)
print('x: = ', x, 'y = ', y, 'f = ', f) # выводим результат
# или print('x = {:.3}, y = {:.3}, f = {:.3}'.format(x,y,f))
# или print(f'x = {x:.3}, y = {y:.3}, f = {f:.3}')
y = y + hy #прибавляем к y шаг
x = x + hx #прибавляем к x шаг
|
3. Задания
| 1.
| Задача:
|
| Для введенных чисел x и y найти значение функции
| Решение (кодпрограммы):
|
| import math
x=float(input())
y=float(input())
print('f=',math.log1p(math.fabs(math.sin(x+y))))
| 2.
| Задача:
|
| Для введенных чисел x и y найти значение функции
| Решение (код программы):
|
| import math
x=float(input())
y=float(input())
if math.sin(x+y)<=-0.5:
print('f=',math.atan(math.pow(math.fabs(x-y)),1/3)*(x*math.exp(y)))
elif math.sin(x+y)>-0.5 and math.sin(x+y)<0.5:
print('f=',3*math.log(math.fabs(x*y),3))
else:
print('f=',x**3+y**1.5)
| 3.
| Задача:
|
| Вычислить значение функции f(x) = cos3(e*x) + sin|x| на отрезке [a, b] с шагом hx
| Решение (код программы):
|
| import math
a=float(input())
b=float(input())
hx=float(input())
x=a
while x<=b:
print('f=',math.pow(math.cos(math.e*x),3)+math.sin(math.fabs(x)))
x+=hx
|
4.
| Задача:
|
| Вычислить значения функции
При этом x изменяется в отрезке с шагом ; y изменяется в отрезке с шагом .
| Решение (код программы):
|
| ax,bx,hx=1,2.5,0.5
ay,by,hy=1,4,1
x=ax
while x<=bx:
y=ay
while y<=by:
if x+y<=2:
print('f=',math.pow(math.sin(x*math.exp(0.1*y)),1\3))
else:
print('f=',math.fabs(math.log2(x+y)))
x+=hx
y+=hy
| |