Перевод числа, заданного в любой системе счисления, во все остальные системы счисления

 

Алгоритм основной ветки программы

  1. В зависимости от указанной системы счисления записать в определенную переменную число.
  2. Если число двоичное, то перевести его в десятичную систему счисления. Полученное десятичное число перевести в восьмеричную и шестнадцатеричную системы счисления.
  3. Если число восьмеричное, то перевести его в десятичную систему счисления. Полученное десятичное число перевести в двоичную и шестнадцатеричную системы счисления.
  4. Если число десятичное, то перевести его в двоичную, восьмеричную и шестнадцатеричную системы счисления.
  5. Если число шестнадцатеричное, то перевести его в десятичную систему счисления. Полученное десятичное число перевести в восьмеричную и шестнадцатеричную системы счисления.
  6. Вывести данные на экран.

Алгоритмы перевода числа в иные системы счисления

См. перевод десятичного числа в двоичную и восьмеричную системы счисленияперевод десятичного числа в шестнадцатеричное числоперевод двоичного числа в десятичное,перевод шестнадцатеричного числа в десятичное число.

Перевод восьмеричного числа в десятичное почти аналогичен переводу двоичного.

Код программы

 

var
    notation: byte;
    decimal: integer; binary, octal, hexa: string;
 
function decimal_binary(decimal:integer): string;
begin
    decimal_binary := '';
    if decimal = 0 then decimal_binary := '0';
    while decimal > 0 do begin
        decimal_binary := chr(ord('0') + (decimal mod 2)) + decimal_binary;
        decimal := decimal div 2
    end;
end;
 
function decimal_octal(decimal:integer): string;
begin
    decimal_octal := '';
    if decimal = 0 then decimal_octal := '0';
    while decimal > 0 do begin
        decimal_octal := chr(ord('0') + (decimal mod 8)) + decimal_octal;
        decimal := decimal div 8
    end;
end;
 
function decimal_hexa(decimal:integer):string;
var digit:byte; ch:char;
begin
    decimal_hexa := '';
    if decimal = 0 then decimal_hexa := '0';
    while decimal > 0 do begin
        digit := decimal mod 16;
        if digit in [10..15] then
            case digit of
            10: ch := 'A';
            11: ch := 'B';
            12: ch := 'C';
            13: ch := 'D';
            14: ch := 'E';
            15: ch := 'F'
            end
        else
            ch := chr(ord('0') + digit);
        decimal_hexa := ch + decimal_hexa;
        decimal := decimal div 16
    end;
end;
 
function binary_decimal(binary:string):integer;
var n,m,i,j,digit:byte; pow:integer;
begin
    n := length(binary);
    binary_decimal := 0;
    m := n;
    for i:=1 to n do begin
        digit := ord(binary[i]) - ord('0');
        m := m - 1;
        if digit = 1 then begin
            pow := 1;
            for j:=1 to m do
                pow := pow * 2;
            binary_decimal := binary_decimal + pow;
        end;
    end;
end;
 
function octal_decimal(octal:string):integer;
var n,m,i,j,digit:byte; pow:integer;
begin
    n := length(octal);
    octal_decimal := 0;
    m := n;
    for i:=1 to n do begin
        digit := ord(octal[i]) - ord('0');
        m := m - 1;
        pow := 1;
        for j:=1 to m do
            pow := pow * 8;
        octal_decimal := octal_decimal + digit * pow;
    end;
end;
 
function hexa_decimal(hexa:string):integer;
var n,m,i,j,digit:byte; pow:integer; ch: char;
begin
    n := length(hexa);
    hexa_decimal := 0;
    m := n;
    for i:=1 to n do begin
        ch := hexa[i];
        if ch in ['A'..'F'] then
            case ch of
            'A': digit := 10;
            'B': digit := 11;
            'C': digit := 12;
            'D': digit := 13;
            'E': digit := 14;
            'F': digit := 15
            end
        else
            digit := ord(ch) - ord('0');
        m := m - 1;
        pow := 1;
        for j:=1 to m do
            pow := pow * 16;
        hexa_decimal := hexa_decimal + digit * pow;
    end;
end;
 
begin
    write('Notation: '); readln(notation);
    write('Number: ');
    if notation = 2 then begin
        readln(binary);
        decimal := binary_decimal(binary);
        octal := decimal_octal(decimal);
        hexa := decimal_hexa(decimal)
    end
    else
        if notation = 8 then begin
            readln(octal);
            decimal := octal_decimal(octal);
            binary := decimal_binary(decimal);
            hexa := decimal_hexa(decimal)
        end
        else
            if notation = 10 then begin
                readln(decimal);
                binary := decimal_binary(decimal);
                octal := decimal_octal(decimal);
                hexa := decimal_hexa(decimal)
            end
            else
                if notation = 16 then begin
                    readln(hexa);
                    decimal := hexa_decimal(hexa);
                    binary := decimal_binary(decimal);
                    octal := decimal_octal(decimal)
                end
                else
                    writeln('Must be goto end.');
 
    writeln('notation:':10,'2':10,'8':5,'10':5,'16':5);
    writeln('value:':10,binary:10,octal:5,decimal:5,hexa:5);
 
readln
end.