Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.46 KB | None | 0 0
  1. # Словарь сопоставляющий каждой тетраде, записанной в обратном порядке, её шестнадцатеричный эквивалент
  2. tetra = {'0000':'0', '1000':'1','0100':'2','1100':'3','0010':'4','1010':'5','0110':'6','1110':'7',
  3.          '0001':'8', '1001':'9','0101':'A','1101':'B','0011':'C','1011':'D','0111':'E','1111':'F',}
  4.  
  5. # Функция, переводящая строку в число
  6. def parseInt(line):
  7.   dig = 0
  8.   for c in line: dig = dig*10 + ord(c)-48
  9.   return dig
  10.  
  11. # Функция переводит из -10 сс. в 10 сс.
  12. def negaDecToDec(ndecnum):
  13.   # разворачиваем строковое представление числа
  14.   ndecnum = ndecnum[::-1]
  15.   dec = 1
  16.   buffer = 0
  17.   for c in ndecnum:
  18.     n = parseInt(c)
  19.     buffer = buffer * dec + n
  20.     dec *= -10
  21.   return str(buffer)
  22.  
  23. # Функция, переводящая из двоичной в шестнадцатеричной по упрощённому алгоритму
  24. def binToHex(binum):
  25.   # разворачиваем строковое представление двоичного числа
  26.   binum = binum[::-1]
  27.   # дополняем строку нулями до длины кратной 4 с избытком
  28.   if len(binum) % 4 > 0: binum = binum + '0' * ((len(binum) % 4)+4)
  29.   hexnum = ''
  30.   for i in range(len(binum)//4):
  31.     # последовательно срезаем по 4 цифры и переводим
  32.     hexnum = tetra[binum[4*i:4*(i + 1)]] + hexnum
  33.   # убираем лидирующий нуль
  34.   if hexnum[0] == '0': hexnum = hexnum[1:]
  35.   return hexnum
  36.  
  37. infile = open('input29.txt')
  38. outfile = open('output29.txt', 'w')
  39. # проходясь по каждой строке входного файла параллельно осуществляем перевод и форматированный вывод в выходной файл
  40. for line in infile:
  41.   arr = line.split(' ')
  42.   arr[len(arr)-1] = arr[len(arr)-1][0:-1]
  43.   if arr[0] == '-10':
  44.     outfile.write('-10 -> 10: ')
  45.     for i in range(len(arr)-3): outfile.write(arr[i + 2] + ' -> ' + negaDecToDec(arr[i + 2]) + ' | ');
  46.     outfile.write(arr[-1] + ' -> ' + negaDecToDec(arr[-1]) + '\n')
  47.   else:
  48.     outfile.write('2 -> 16: ')
  49.     for i in range(len(arr)-3): outfile.write(arr[i + 2] + ' -> ' + binToHex(arr[i + 2]) + ' | ');
  50.     outfile.write(arr[-1] + ' -> ' + binToHex(arr[-1]) + '\n')
  51. outfile.close()
  52. infile.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement