Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Перевод программы из Pascal в C++


Автор: GoodSpirit 1.2.2010, 12:40
Есть программа перевода числес из одной системы счисления в другую.
Pascal
Код

program Perevod; {Nazvanie programmi}
function RtoDec (s: string; R: word): string; {ob`yavlenie funkcii}
var A,  i, n, z: integer; B,C,D,E,F: string; res,res1,res2: real; {obyavlenie peremennih}
begin
    n:=0;
    A:=0;
    A:=pos('.',S);
    B:=copy(S,0,length(S)-A);
    C:=copy(S,A,8);
    A:=POS('.',C);
    delete(C,1,A);
    res1:=0;
    res2:=0;
    z:=0;
    for i:=length (B) downto 1 do
    begin
        B[i]:=(B[i]);
        if B[i] in ['0'..'9'] then
            n:=ord (B[i]) - ord ('0');
        if B[i] in ['A'..'Z'] then
            n:=10+ord(B[i])-ord('A');
        res1:=res1+(n*(exp(z*ln(r))));
        z:=z+1;
    end;
    n:=0;
    z:=0;
    for i:=length (C) downto 1 do
    begin
        C[i]:= (C[i]);
        if C[i] in ['0'..'9'] then
            n:=ord (C[i]) - ord ('0');
        if C[i] in ['A'..'Z'] then
            n:=10+ord(C[i])-ord('A');
        z:=z-1;
        res2:=res2+(n*(exp(z*ln(r))));

    end;
    res2:=abs(res2);
    str(res1:0:0,D);
    str(res2:0:8,E);
A:=pos('.',E);
    delete(E,1,A);
    F:=D+'.'+E;
    RtoDec := f;
end; {konec funkcii}
var B,C,S,F:string; {obyavlenie peremennih}
r: word;
a: integer;
begin
    writeln('Vvedite chislo i nagmite Enter'); {zapros chisla}
    readln(s); {prisvoenie peremennoy "S" chisla}
    writeln('Vvedite osnovanie i nagmite Enter'); {zapros vvoda osnovaniya}
    readln(r); {prisvoenie peremennoy "R" znacheniya osnovaniya}
    F:=RtoDec(s,r); {vipolnenie funkcii perevoda}
    write('Chislo ',s,' v sisteme schisleniya s osnovaniem ',r, ' ravno ', F); {vivod resultata}
    read(s); {ogidania nagatiya luboy klavishi}
end. {konec programmi}



Необходимо ее перевести в C++

Помогите новичку C++

Автор: bsa 1.2.2010, 13:52
Код
#include <iostream>
#include <string>
#include <clocale>
#include <stdexcept>
#include <cctype>
#include <string>

unsigned numFromChar(char c, unsigned base)
{
   if (base < 10) {
       if ( (c >= ('0' +  base)) || ( c < '0') )
           throw std::runtime_error("Invalid digit");
       return c - '0';
   }
   if ( (c >= '0') && (c <= '9') )
        return c - '0';
   c = toupper(c);
   if ( (c < 'A') || (c >= ('A' + base)) )
           throw std::runtime_error("Invalid digit");
   return c - 'A' + 10;
}

unsigned numFromString(const std::string &s, unsigned base)
{
   if (s.empty())
     return 0;
   unsigned n = 0;
   for(int i = s.size()-1, mul = 1; i >= 0; mul*=base, --i)
      n += mul * numFromChar(s[i], base);
   return n;
}

int main()
{
   std::setlocale(LC_ALL, "");
   std::wcout << L"Введите число: " << std::flush;
   std::string s;
   std::cin >> s;
   unsigned base;
   std::wcout << L"Введите основание: " << std::flush;
   std::cin >> base;
   if (base < 2)
      throw std::runtime_error("Invalid base");
   std::string::size_type pos = s.find('.');
   if (pos == std::string::npos)
      std::wcout << L"В десятичной системе: " << numFromString(s, base) << std::endl;
   else {
      std::wcout << L"В десятичной системе: " << numFromString(s.substr(0, pos), base) << L'.' << numFromString(s.substr(pos+1), base) << std::endl;
   }
   return 0;
}

Автор: bsa 1.2.2010, 13:53
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)