3 ЗАДАНИЕ:
info = "1010"
pos = 1
d = [int(x) for x in info]
r1 = d[0] ^ d[1] ^ d[3]
r2 = d[0] ^ d[2] ^ d[3]
r4 = d[1] ^ d[2] ^ d[3]
h = [0, r1, r2, d[0], r4, d[1], d[2], d[3]]
print(f"Сформированное кодовое слово: {''.join(map(str, h[1:]))}")
r = list(h)
r[pos] = 1 - r[pos]
print(f"Код с ошибкой в позиции {pos}: {''.join(map(str, r[1:]))}")
s1 = r[1] ^ r[3] ^ r[5] ^ r[7]
s2 = r[2] ^ r[3] ^ r[6] ^ r[7]
s4 = r[4] ^ r[5] ^ r[6] ^ r[7]
err = s4 * 4 + s2 * 2 + s1
print(f"Вычисленный синдром (s4 s2 s1): {s4}{s2}{s1}")
print(f"Определенная позиция ошибки: {err}")
c = list(r)
if err != 0:
c[err] = 1 - c[err]
print(f"Исправленное кодовое слово: {''.join(map(str, c[1:]))}")
out = f"{c[3]}{c[5]}{c[6]}{c[7]}"
print(f"Извлеченное инфо-слово: {out}")
print(f"Совпадение с исходным: {out == info}")
4 ЗАДАНИЕ:
n = -73
b = 8
m = abs(n)
bin_m = bin(m)[2:].zfill(b - 1)
pk = "1" + bin_m
ok = "1" + "".join("1" if x == "0" else "0" for x in bin_m)
dk = bin((1 << b) + n)[2:]
print(f"Число: {n} (Разрядность: {b} bit)")
print(f"Прямой код: {pk}")
print(f"Обратный код: {ok}")
print(f"Дополнительный код: {dk}")
print("\n--- Обратное восстановление ---")
res_pk = -int(pk[1:], 2)
print(f"Из прямого кода: {res_pk}")
inv_m = "".join("1" if x == "0" else "0" for x in ok[1:])
res_ok = -int(inv_m, 2)
print(f"Из обратного кода: {res_ok}")
if dk == "1" + "0" * (b - 1):
res_dk = int(dk, 2) - (1 << b)
else:
res_dk = int(dk, 2)
print(f"Из дополнительного кода: {res_dk}")
5 ЗАДАНИЕ:
n = 6.35
opts = [2, 4, 6, 8]
res = {}
print(f"Исследуемое число: {n}\n")
for f in opts:
scaled = round(n * (2**f))
restored = scaled / (2**f)
err = abs(n - restored)
res[f] = err
print(f"При дробных битах = {f}:")
print(f" Восстановленное число: {restored}")
print(f" Абсолютная погрешность: {err:.6f}")
print("-" * 35)
best = min(res, key=res.get)
print(f"\nНаименьшая погрешность ({res[best]:.6f}) достигается при количестве дробных битов: {best}")