Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Перевод программы из Pascal в C++, Необходяма помощь 
:(
    Опции темы
GoodSpirit
  Дата 1.2.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 1.2.2010

Репутация: нет
Всего: нет



Есть программа перевода числес из одной системы счисления в другую.
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++
PM MAIL   Вверх
bsa
Дата 1.2.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Код
#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;
}

PM   Вверх
bsa
Дата 1.2.2010, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



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

Тема перенесена! 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.