Отнимание в троичной системе счисления (Delphi Console Application)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by traveller6, 1 Feb 2012.

  1. traveller6

    traveller6 New Member

    Joined:
    10 Jan 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Вычитание в троичной системе счисления (Delphi Console Application)

    Даны два числа в троичной системе счисления (не больше чем 40 знаков) нужно отнять от первого числа второе и перевести ответ в десятичную.

    Помогите пожалуйста, я не знаю как это осуществить в консольном приложении в Delphi. :confused:
     
    #1 traveller6, 1 Feb 2012
    Last edited: 1 Feb 2012
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    Короче,так как в болталке одни хацкеры и математики,то помогаю.
    Code:
    // троичное вычитание
    program Project2;
    
    {$APPTYPE CONSOLE}
    uses
      sysutils;
    
    function in_extent(a,b:extended):extended;
    begin
    result:=exp(b*ln(a));
    end;
    
    function Three_to_dec(s:string;q:word):extended;
    var param,i:integer;
    m,n:extended;
    begin
         m:=0;
         for i:=1 to length(s) do
         begin
              val(s[i],n,param);
              if param<>0 then
              n:=10+ord(upcase(s[i]))-ord('A');
              m:=m+in_extent(q,length(s)-i)*n;
         end;
         Three_to_dec:=m;
    end;
    
    function is_three(a:extended):integer;
    var i:integer;
    c:set of char;
    s:string;
    begin
    c:=['0'..'2'];
    s:=floattostr(a);
    for i:=1 to length(s) do
    if not(s[i] in c) then result:=1;
    if result=1 then
    writeln('error');
    end;
    
    
    procedure calculate;
    var a,b,c,d,e,f,g:extended;
    begin
    writeln('vvedite #1');
    readln(a);
    b:=is_three(a);
    if b=1 then exit;
    c:=three_to_dec(floattostr(a),3);
    
    writeln('vvedite #2');
    readln(d);
    e:=is_three(d);
    if e=1 then exit;
    f:=three_to_dec(floattostr(d),3);
    
    g:=abs(c-f);
    writeln('raznost =',g:4:2);
    end;
    
    begin
    calculate;
    readln;
    
    end.
    вычитает из 1-го числа второе,по модулю.Таблицу чисел троичной системы можешь посмотреть на вики,за одно протестируешь программу.
     
    1 person likes this.