Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перевод из одной системы счисления в другую систему

15K
10 января 2006 года
$_ToxaP
1 / / 10.01.2006
Драствуйте!

Вот такое дело...
Мне нужно фунуция которая переводит с двоичной в десятеричную и обратно..

Но вся проблема в том что нужно что бы минусовые и дробные сичла сщетало!

Если кто-то поможет буду рад!
С мя пиво :)
929
11 января 2006 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by $_ToxaP
Драствуйте!

Вот такое дело...
Мне нужно фунуция которая переводит с двоичной в десятеричную и обратно..

Но вся проблема в том что нужно что бы минусовые и дробные сичла сщетало!

Если кто-то поможет буду рад!
С мя пиво :)


писать прогу лениво, а вот алгоритм подсказать могу...
из дес. в двоич.
1) запоминаешь знак
2) делишь число на целую часть и дробную
3) переводишь целую часть следующим путем:
s := '';
while (N > 1) do begin
s := inttostr(N mod 2) + s;
N := N div 2;
end;
s := inttostr(N)+s;
4) переводишь дробную часть следующим путем:
s := '';
while (дробная часть не исчезнет или не достигнется нужная точность) do begin
D := D * 2;
C := Trunc(D);
s := s + inttostr(C);
D := D - C;
end;
5) склеиваешь все.

из двоич. в дес. ваще элементарно.
каждый знак (1 или 0) двоичного числа в целой части умножаешь на 2 в степени (позиция этого знака в целой части справа - 1).
каждый знак (1 или 0) двоичного числа в дробной части умножаешь на (1/2) в степени (позиция этого знака в дробной части слева).
все сложить.

Удачи!

15K
13 января 2006 года
Squier
5 / / 10.01.2006
Вот... Переводит из любой в любую, учитывает дробную часть, а с минусом это уж давай сам...:}
Код:
program notation;

{$APPTYPE CONSOLE}

uses
  SysUtils,Windows;

Var
  st:Set of Char;

Function F(a,b:Integer):Integer;
Var
  i:Integer;
Begin
Result:=a;

  For i:=1 To b-1 Do
    Result:=Result*a;

  IF b=0 Then Result:=1;

End;

Function ConvertDec(n:ShortString; q:Integer):Integer;
Var
  p,j,i:Integer;
Begin
j:=Length(n)-1;
Result:=0;

  For i:=1 To Length(n) Do
    Begin

        IF n in [#48..#58] Then
          Begin
            Result:=Result+F(q,j)*StrToInt(n);
            Dec(j);
          End

                               Else
            IF n in st Then
          Begin
            Result:=Result+F(q,j)*(Ord(n)-55);
            Dec(j);
          End

    End;
End;

Function ConvertSS(d,q:Integer):ShortString;
Begin
Result:='';

  While d<>0 Do
    Begin

        IF d mod q>9 Then
          Result:=Chr(d mod q+55)+Result
                     Else
          Result:=IntToStr(d mod q)+Result;

      d:=d div q;
    End;
End;

Function ConvertEx(n:Extended; acc,q:Integer):ShortString;
Begin
Result:=',';

  IF acc=0 Then
    Begin
      Result:=Result+'0';
      Exit;
    End;

  While Length(Result)<acc+1 Do
    Begin
      n:=n*q;
      Result:=Result+IntToStr(Trunc(n));
      n:=n-Trunc(n);
    End;

End;

Var
  eps,i,tmp,qin,qout:Integer;
  t,nin:ShortString;
  buf:_Input_Record;
  n:Cardinal;
  r:Extended;
Label cont;
begin
st:=['A'..'Z','a'..'z'];
cont:
eps:=0;
WriteLn('Input data{');
WriteLn;
Write('Enter N: ');
ReadLn(nin);
Write('Enter Q: ');
ReadLn(qin);
Write('Enter Q: ');
ReadLn(qout);

  IF Pos(',',nin)<>0 Then
    Begin
      Write('Enter accuracy: ');
      ReadLn(eps);
      t:='0,'+IntToStr(ConvertDec(Copy(nin,Pos(',',nin)+1,Length(nin)),qin));
      r:=StrToFloat(t);
    End;

WriteLn('}');
WriteLn('Output data{');
Write('N=');

  IF qin=qout Then Write(nin)
              Else
                Begin
    IF eps<>0 Then tmp:=ConvertDec(Copy(nin,1,Pos(',',nin)-1),qin)
              Else tmp:=ConvertDec(nin,qin);
      Write(ConvertSS(tmp,qout)+ConvertEx(r,eps,qout));
                End;

WriteLn;
WriteLn('}');
WriteLn('Press ''q'' for quit or ''enter'' for continue...');
WriteLn;

  Repeat
    ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),buf,1,n);

      Case buf.Event.KeyEvent.AsciiChar of
        #81,#113:Break;
        #13:GoTo cont;
      End;

  Until False;

end.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог