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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dec to 17ную, Перевести из десятичной в 17чную систему 
:(
    Опции темы
densa
Дата 24.7.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите как можно конвертировать число из десятичной системы исчисления в 17чную.
Если я понял правильно, то нужно создать массив, который будет содержать 1, 2, ..., G и по алгоритму деления на основание?
PM MAIL   Вверх
Gordon
Дата 24.7.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(densa @  24.7.2009,  18:31 Найти цитируемый пост)
Подскажите как можно конвертировать число из десятичной системы исчисления в 17чную.Если я понял правильно, то нужно создать массив, который будет содержать 1, 2, ..., G и по алгоритму деления на основание?


Примерно так же как и в 16 - ю, 2 - ю...

Скажи, а зачем тебе 17 - я СС? 


--------------------

  
     
PM MAIL WWW   Вверх
mes
Дата 24.7.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Gordon, ну тогда бы пример конвертирования в 16ричную привели бы  smile 


--------------------
PM MAIL WWW   Вверх
Gordon
Дата 24.7.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  24.7.2009,  20:50 Найти цитируемый пост)
Gordon, ну тогда бы пример конвертирования в 16ричную привели бы   


 smile 

Вот, кривова-то (сильно не ругайте, лучше дайте конструктивный совет), но для понимания принципа думаю хватит:

Код

char dig[17] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G'};

//dec - число в 10-й СС, N - основоние СС (естественно разумное, проверка не осуществляется)
string conv(int dec, int N)
{
    string s = "";
    int q = dec / N;

    while(q)
    {
        s = dig[dec % N] + s;
        dec = q;
        q = dec / N;
    }
    s = dig[dec % N] + s;
    
    return s;
}




Это сообщение отредактировал(а) Gordon - 24.7.2009, 21:11


--------------------

  
     
PM MAIL WWW   Вверх
Леопольд
Дата 24.7.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



С Вашего позволения, немного модифицирую smile

Код

#include <stdexcept>
#include <string>
#include <algorithm>

std::string IntToString(int value, const size_t base = 10)
{
    static char const dig[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    if(base > 16)
        throw std::range_error("IntToString: base exceed 16");
    bool negative = false;
    if(value < 0){
        negative = true;
        value = -value;
    }
    std::string s;
    int q = value / base;
    while(q)
    {
        s += dig[value % base];
        value = q;
        q = value / base;
    }
    s += dig[value % base] ;
    if(negative)
        s += '-' ;
    std::reverse(s.begin(), s.end());
    return s;
}


Это сообщение отредактировал(а) Леопольд - 25.7.2009, 02:40


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Gordon
Дата 24.7.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В принципе можно и без массива сделать, вроде...

Код

string convert(int dec, int N)
{
    string s = "";
    int q = dec / N, n;
    char c;

    while(q)
    {
        n = dec % N;
        if(n < 10)
        {
            c = '0' + n;
        }else
        {
            c = 'A' + n - 10;
        }
        
        s = c + s;
        dec = q;
        q = dec / N;
    }
    
    n = dec % N;
    if(n < 10)
    {
        c = '0' + n;
    }else
    {
        c = 'A' + n - 10;
    }
        
    s = c + s;
    
    return s;
}



--------------------

  
     
PM MAIL WWW   Вверх
azesmcar
Дата 24.7.2009, 21:41 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Леопольд @  24.7.2009,  21:15 Найти цитируемый пост)
std::string IntToString(int value, size_t base = 10) throw (std::range_error)

Уберите эту гадость (я о спецификации исключений).
А функция itoa не подходит? smile
Код

char buffer[20];
itoa(454, buffer, 17);


Это сообщение отредактировал(а) azesmcar - 24.7.2009, 21:41
PM   Вверх
Gordon
Дата 24.7.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @  24.7.2009,  22:41 Найти цитируемый пост)
А функция itoa не подходит? 


Может просто хочется мозг поиметь потренировать...  smile 



--------------------

  
     
PM MAIL WWW   Вверх
azesmcar
Дата 24.7.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Gordon @  24.7.2009,  21:59 Найти цитируемый пост)
Может просто хочется мозг поиметь потренировать...  smile 

да, иногда мозг требует плотских утех smile 
PM   Вверх
densa
Дата 24.7.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Gordon @ 24.7.2009,  19:45)
Скажи, а зачем тебе 17 - я СС?

Начал учить Си и вот решил поломать голову smile

Не пойму, что мы делаем вот этим
Код

string convert(int dec, int N)
{
    string s = "";

PM MAIL   Вверх
Леопольд
Дата 25.7.2009, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @ 24.7.2009,  21:41)
А функция itoa не подходит? smile

Я тоже сначала о ней подумал, но вот беда...
(с) cplusplus.com
Portability
This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.

g++ 4.3.3 (linux) не знает такой функции.

Спецификацию исключений убрал почти сразу, но не потому что считаю её гадостью, а потому что не знаю какие исключения порождает std::string smile На самом деле я обычно её не использую. Но мне интересно узнать, почему именно гадость? Вроде бы иногда, глядя на объявление функции, неплохо было бы знать, какие исключения она может порождать.

P.S. Оказалось, забыл убрать, но хотел, да так, что думал что убрал smile

Это сообщение отредактировал(а) Леопольд - 25.7.2009, 02:25


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
azesmcar
Дата 25.7.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Леопольд @  25.7.2009,  02:19 Найти цитируемый пост)

Я тоже сначала о ней подумал, но вот беда...
(с) cplusplus.com
Portability
This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.
g++ 4.3.3 (linux) не знает такой функции.

Ну это уже автору решать, использовать нестандартные функции или нет. Я как вариант предложил.

Цитата(Леопольд @  25.7.2009,  02:19 Найти цитируемый пост)
Спецификацию исключений убрал почти сразу, но не потому что считаю её гадостью

А зря..самая натуральная гадость (это я мягко выражаюсь) smile 
Не надо их вообще использовать, почитайте доклад Герба Саттера по поводу спецификации исключений http://www.gotw.ca/publications/mill22.htm или посмотрите в книге more exceptional C++, Задача 13. Прагматичный взгляд на спецификации исключений.


Это сообщение отредактировал(а) azesmcar - 25.7.2009, 09:34
PM   Вверх
Gordon
Дата 25.7.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Леопольд @  25.7.2009,  03:19 Найти цитируемый пост)
Вроде бы иногда, глядя на объявление функции, неплохо было бы знать, какие исключения она может порождать.


С одной стороны да, но с другой, реально функция может породить и другие исключения, не указанные в спецификации!


densa, 

Код

//dec и N - параметры, первый число в десятичной СС, 
//второй - основание СС в которую нужно перевести число dec
string convert(int dec, int N) 
{
    string s = ""; //Пустая строка, в неё будет записано число (уже переведенное)

Функция возвращает в виде строки число в СС с основанием N.
Или что ты не понял?

Это сообщение отредактировал(а) Gordon - 25.7.2009, 10:08


--------------------

  
     
PM MAIL WWW   Вверх
Леопольд
Дата 25.7.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @ 25.7.2009,  09:14)
Не надо их вообще использовать

Если подумать, то пользы от них действительно никакой, а вот вред может быть - например, callback функция порождает исключение, которого нет в спецификации той функции, которая её вызывает. Хотя, пустую спецификацию, я иногда использовал, в специфичных случаях, например, при наследовании от std::exception надо переопределить what с пустой спецификацией, иначе g++ не компилит smile Или что-бы показать что своя функция, вызываемая в деструкторе (иногда в конструкторе), не должна порождать исключений.

Добавлено @ 10:09
Цитата(Gordon @ 25.7.2009,  10:05)
densa, 
Код

    string s = ""; //Пустая строка, в нею будет записано число (уже переведенное)

или что ты не понял?

Присваивание лишнее, конструктор по умолчанию делает пустую строку. Т.е. так:
Код

std::string s; // пустая строка



Это сообщение отредактировал(а) Леопольд - 25.7.2009, 10:28


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
zim22
Дата 25.7.2009, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Леопольд @  25.7.2009,  10:05 Найти цитируемый пост)
Если подумать, то пользы от них действительно никакой

польза есть. иначе пустую спецификацию исключений не использовали бы в бусте.

Это сообщение отредактировал(а) zim22 - 25.7.2009, 10:12


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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