Перевести десятичную дробь в двоичную систему счисления - Turbo Pascal

  1. Перевести десятичную дробь в двоичную систему счисления while или repeat


textual

Код к задаче: «Перевести десятичную дробь в двоичную систему счисления - Turbo Pascal»

program Project1;
 
(*Переводит десятичную запись вещественного числа в двоичную.
Точность перевода дробной части - до aPrecision цифр после запятой.*)
function DecToBin(const aStr : String; const aPrecision : Byte) : String;
const
  BaseIn = 10;
  BaseOut = 2;
var
  i, PosDot : Integer;
  StrRes, vStr, StrSign, StrDot : String;
  Num, TmpNum, Weight : Extended;
begin
  DecToBin := '';
  if aStr = '' then Exit;
 
  (*Перевод десятичной записи в число.*)
 
  (*Определяем знак и десятичную запись числа без знака.*)
  if aStr[1] = '-' then begin
    StrSign := '-';
    vStr := Copy(aStr, 2, Length(aStr) - 1);
  end else begin
    StrSign := '';
    vStr := aStr;
  end;
 
  (*Ищем дробную точку.*)
  PosDot := Length(vStr) + 1;
  for i := 1 to Length(vStr) do begin
    if vStr[i] in ['.', ','] then begin
      PosDot := i;
      StrDot := vStr[i];
      Break;
    end;
  end;
 
  Num := 0;
 
  (*Переводим в число запись целой части.*)
  (*Движемся от младших разрядов - к старшим.*)
  (*Вес младшего разряда в целой части.*)
  Weight := 1;
  for i := PosDot - 1 downto 1 do begin
    case vStr[i] of
      '0'  : Num := Num + 0 * Weight; (*Эту строку можно закоментовать.*)
      '1'  : Num := Num + 1 * Weight;
      '2'  : Num := Num + 2 * Weight;
      '3'  : Num := Num + 3 * Weight;
      '4'  : Num := Num + 4 * Weight;
      '5'  : Num := Num + 5 * Weight;
      '6'  : Num := Num + 6 * Weight;
      '7'  : Num := Num + 7 * Weight;
      '8'  : Num := Num + 8 * Weight;
      '9'  : Num := Num + 9 * Weight;
    else
      Writeln('Ошибка! Незарегистрированная цифра.');
    end;
    (*Вес следующего разряда.*)
    Weight := Weight * BaseIn;
  end;
 
  (*Переводим в число запись дробной части.*)
  (*Движемся от старших разрядов - к младшим.*)
  (*Вес старшего разряда в дробной части.*)
  Weight := 1 / BaseIn;
  for i := PosDot + 1 to Length(vStr) do begin
    case vStr[i] of
      '0'  : Num := Num + 0 * Weight; (*Эту строку можно закоментовать.*)
      '1'  : Num := Num + 1 * Weight;
      '2'  : Num := Num + 2 * Weight;
      '3'  : Num := Num + 3 * Weight;
      '4'  : Num := Num + 4 * Weight;
      '5'  : Num := Num + 5 * Weight;
      '6'  : Num := Num + 6 * Weight;
      '7'  : Num := Num + 7 * Weight;
      '8'  : Num := Num + 8 * Weight;
      '9'  : Num := Num + 9 * Weight;
    else
      Writeln('Ошибка! Незарегистрированная цифра.');
    end;
    (*Вес следующего разряда.*)
    Weight := Weight / BaseIn;
  end;
 
  (*Переводим число в двоичную запись.*)
 
  StrRes := '';
 
  (*Перевод целой части.*)
  TmpNum := Int(Num);
  repeat
    (*Определяем очередную двоичную цифру.*)
    (*Аналог (TmpNum mod BaseOut) для случая вещественных операндов.*)
    case Round( TmpNum - Int(TmpNum / BaseOut) * BaseOut ) of
      0 :  StrRes := '0' + StrRes;
      1 :  StrRes := '1' + StrRes;
    end;
    (*Удаляем из числа текущий разряд.*)
    TmpNum := Int(TmpNum / BaseOut);
  until TmpNum = 0;
 
  (*Перевод дробной части с точностью до aPrecision знаков после запятой.*)
  i := 0;
  TmpNum := Frac(Num);
  while (TmpNum <> 0) and (aPrecision > i) do begin
    if i = 0 then StrRes := StrRes + StrDot;
    (*Определяем очередную двоичную цифру.*)
    TmpNum := TmpNum * BaseOut;
    case Round(Int(TmpNum)) of
      0 :  StrRes := StrRes + '0';
      1 :  StrRes := StrRes + '1';
    end;
    (*Удаляем из числа текущий старший разряд.*)
    TmpNum := Frac(TmpNum);
    Inc(i);
  end;
 
  DecToBin := StrSign + StrRes;
end;
 
const
  Precision = 10;
var
  S : String;
begin
  repeat
    Writeln('Введите запись вещественного числа в десятичной системе счисления:');
    Readln(S);
    S := DecToBin(S, Precision);
    Writeln('Запись этого же числа в двоичной системе счисления');
    Writeln('с точностью до ', Precision, ' цифр после запятой:');
    Writeln(S);
    Writeln('Повторить - Enter, выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.

СДЕЛАЙТЕ РЕПОСТ

10   голосов, оценка 3.700 из 5



Похожие ответы
  1. Здравствуйте! помогите пожалуйста написать программу, переводящую целые числа из системы шестнадцатеричной счисления в двоичную... Если можно, с пошаговым описанием действий

  1. Вывести на экран все цифры, не входящие в десятичную запись натурального числа N. Помогите пожалуйста с программой

  1. C++ (Qt)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include   2    #include    3    #define size 100    4    int main()    5    {    6    char str[size];    7       printf("vvedi symvoly: ");    8    gets(str);    9 10       int i;    11 12       for(i = 0;i < strlen(str); i++)    13 14 15 16 17   return 0;    18    }

  1. Составить программу, которая переводит число А с десятичной системы счисления в двоичную, используя метод деления в столбик. Промежуточные и окончательные результаты перевода отобразить на экране. Число А вводится с клавиатуры в десятичном формате.

  1. Помогите перевести код на паскаль.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include   int isprime(int);   int main(void) {     int number;     int i;     int first, second, third;       for (i=10; i*i<1000; ++i) {         if (isprime(i)) {             number = i * i;             first = number / 100;             second = (number - first*100) / 10;             third = number % 10;             if (first1 && (n%i) == 0)             return 1;     return 0; }

  1. Вводится строка символов. Если она является изображением целого числа в двоичной системе счисления, то перевести ее в целое число в восьмеричной системе счисления, иначе выдать сообщение о некорректном вводе. Промежуточный перевод в десятичную систему запрещен. Заготовка есть, но у меня не получается даже проверить делимость числа на триады, что бы если что, добавить в конце 0. Помогите пожалуйста. Пока все, что есть.

  1. помогите перекинуть код из паскаля в делфи