Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.41 KB | None | 0 0
  1. var
  2.   y:real;
  3.   ss:integer;
  4.  
  5. function Reverse(inp: string): string;
  6. var
  7.   i, c: integer;
  8.   n: char;
  9. begin
  10.   c := length(inp) div 2;
  11.   for i := 1 to c do
  12.   begin
  13.     n := inp[i];
  14.     inp[i] := inp[length(inp) - i + 1];
  15.     inp[length(inp) - i + 1] := n;
  16.   end;
  17.   Reverse := inp;
  18. end;
  19.  
  20. function IntBin(x: integer): string;
  21. var
  22.   inp: string;
  23. begin
  24.   inp := '';
  25.   while x > 0 do
  26.   begin
  27.     if x mod 2 = 0 then
  28.       insert('0', inp, 1)
  29.     else
  30.       insert('1', inp, 1);
  31.     x := x div 2;
  32.   end;
  33.   intBin := inp;
  34. end;
  35.  
  36. function FracBin(x: real; n: integer): string;
  37. var
  38.   inp: string;
  39.   i: integer;
  40. begin
  41.   inp := '';
  42.   // точность до n знаков
  43.   for i := 1 to n do
  44.   begin
  45.     x := frac(x) * 2;
  46.     inp := inp + FloatToStr(int(x));
  47.   end;
  48.   fracBin := inp;
  49. end;
  50.  
  51. function IntDec(x: integer): string;
  52. var
  53.   inp: string;
  54.   out, i: integer;
  55. begin
  56.   inp := IntToStr(x);
  57.   out := 0;
  58.   for i := 1 to length(inp) do
  59.   begin
  60.     out := out + StrToInt(inp[i]) * round(exp(ln(2) * (length(inp) - i)));  
  61.   end;
  62.   intDec := IntToStr(out);
  63. end;
  64.  
  65. function FracDec(x: real): string;
  66. var
  67.   inp,buff: string;
  68.   k,i: integer;
  69.   out: real;
  70. begin
  71.   // удаляем первые два символа
  72.   inp := FloatToStr(x);
  73.   for i:=1 to length(inp) do
  74.     begin
  75.       if inp[i+1] = '.' then begin
  76.         k:=i+1;
  77.         break;
  78.       end;
  79.     end;
  80.   delete(inp,1,k);
  81.   // проходимся по элементам
  82.   out := 0;
  83.   inp := Reverse(inp);
  84.   for i := 1 to length(inp) do
  85.   begin
  86.     out := out + StrToInt(inp[i]) * exp(ln(2) * ((- i)));
  87.   end;
  88.   buff:=FloatToStr(out);
  89.   delete(buff,1,1);
  90.   fracDec := buff;
  91. end;
  92.  
  93. function DecToBin(x: real): string;
  94. var out:string;
  95. begin
  96.   out:='';
  97.   if frac(x) = 0 then
  98.     out := IntBin(round(x))
  99.   else
  100.     out:=IntBin(round(int(x)))+','+FracBin(x,10); // 10 после запятой
  101.   DecToBin:=out;
  102. end;
  103.  
  104. function BinToDec(x:real):string;
  105. var out:string;
  106. begin
  107.   out:='';
  108.   if frac(x) = 0 then
  109.     out := IntDec(round(x))
  110.   else
  111.     out := IntDec(round(x))+FracDec(x);
  112.   BinToDec:=out;
  113. end;
  114.  
  115. begin
  116.   write('Введите число: ');
  117.   read(y);
  118.   write('Введите систему счисления,в которую нужно перевести: ');
  119.   read(ss);
  120.   case ss of
  121.     2: writeln(DecToBin(y));
  122.     10: writeln(BinToDec(y))
  123.     else writeln('Ошибка');
  124.   end;
  125. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement