Составьте программу ** паскале переводящую дробное не десятичное число с основанием...

0 голосов
41 просмотров

Составьте программу на паскале переводящую дробное не десятичное число с основанием р(2-9) в десятичную систему счисления


Информатика (15 баллов) | 41 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Const
  k = 50;

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)


(142k баллов)