var s, si, sf: string; powm, n10i: longint; i, j, m, ls, err, ni, nf: integer; a: double;
begin Write('Введите основание системы счисления (2..9): '); Readln(m); if not (m in [2..9]) then Writeln('Ну-ну...') else begin Write('Введите положительное число в этой системе счисления: '); Readln(s); ls := Length(Trim(s)); i := pos('.', s); if i > 0 then begin ni := i - 1; si := Copy(s, 1, ni); nf := ls - i; sf := Copy(s, i + 1, nf) end else begin si := s; ni := ls; sf := ''; nf := 0 end; powm := 1; n10i := 0; for i := ni downto 1 do begin Val(si[i], j, err); n10i := n10i + j * powm; powm := powm * m end; powm := m; a := 0; for i := 1 to nf do begin Val(sf[i], j, err); a := a + j / powm; powm := powm * m end; a := a + n10i; Writeln(s, '(', m, ')=', a, '(10)') end; end.
Тестовое решение:
Введите основание системы счисления (2..9): 8 Введите положительное число в этой системе счисления: 23532.5034 23532.5034(8)=10074.6318359375(10)
2483,51(10) - отдельно переводим в восьмеричную с/с целую и дробную части. Целую часть переводим целочисленным последовательным делением на 8 с выписыванием остатков. 2483/8=310, остаток 3 310/8=38, остаток 6 38/8=4, остаток 6 Теперь записываем частное и приписываем остатки от последней строчки к первой. Получаем 4663(8) - это и есть 2483(10) Дробную часть переводим, производя последовательное умножение на 8 и отбрасывая целые части результата. Прекращаем операцию, если получаем при умножении ноль или не видно дальнейшего смысла продолжать. Отброшенные по порядку целые части образуют искомые цифры восьмеричного представления дробной части. 0.51x8=4.08 (4) 0.08x8=0.64 (0) 0.64x8=5.12 (5) 0.12x8=0.96 (0) 0.96x8=7.68 (7) 0.68x8=5.44 (5) Достаточно. 0.51(10)≈0.405075(8)
Чтобы перейти к двоичной системе счисления, достаточно каждую восьмеричную цифру заменить эквивалентной двоичной триадой 4663.405075(8)=100 110 110 011.100 000 101 000 111 101(2)
Для перехода от двоичной системе к шестнадцатиричной достаточно разделить двоичное число тетрадами, начиная от десятичной точки в обе стороны, а затем каждую тетраду заменить шестнадцатиричной цифрой. 1001 1011 0011.1000 0010 1000 1111 0100(2)=9B3.824F4(16)
Для перехода к десятичной системе записываем число в расширенном представлении по степеням 16 и выполняем арифметические операции.
273,1
Объяснение:
0,2731е3 = 0,2731 * 10^3 = 0,2731 * 1000 = 273,1