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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Перевод из 10-ой в 16-ную систему исчисления, Системы счисления 
V
    Опции темы
deadlegolas
Дата 9.2.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день,столкнулся с задачей перевода из 10ой системы счисления в 16ичную.. не знаю как реализовать.. Помогите,буду благодарен!
PM MAIL   Вверх
Rodman
Дата 9.2.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



PM MAIL WWW Skype GTalk YIM MSN   Вверх
deadlegolas
Дата 10.2.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Rodman @ 9.2.2009,  21:44)
http://forum.ixbt.com/topic.cgi?id=40:670

выбирай

проблема в том,что программа должна работать с десятичными дробями.. кто-нибудь знает как это осуществить?
PM MAIL   Вверх
deadlegolas
Дата 11.2.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



никто не знает?(
PM MAIL   Вверх
anatox91
Дата 14.2.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



насколько я знаю отдельно переводится целая часть, и отдельно дробная, так что дерзай


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

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
ИванМ
Дата 19.2.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я например даже не знаю как дробное число должно выглядеть в 16 СС. Ни один язык программирования и ни одна команда не работает с такими числами. Если просто нужно к виду X.X то действительно можно отдельно перевести целую часть, отдельно дробную, переведя ее в целую, и потом их склеить в виде строки.
PM MAIL   Вверх
deadlegolas
Дата 20.2.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а кто-то может подсказать сам алгоритм перевода дробной части в 16 ? именно кодом.. а то я не совсем понимаю как это сделать
PM MAIL   Вверх
ИванМ
Дата 20.2.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Исходное число val
На выходе строка res

 
Код

   double val=123.456;
    char str[]="0";
    char left[256]="0";
    char right[256]="0";
    char res[256];

    sprintf(str, "%f", val);

    for(int i=0;i<strlen(str);i++)
    {
        if(str[i]=='.')
        {
            strcpy(right, str+i+1);
            str[i]=0;
            strcpy(left, str);
        }
    }

    for(int i=strlen(right)-1;i>=0;i--)
    {
        if(right[i]=='0')
            right[i]=0;
        else
            break;
    }

    int rv=atoi(right);
    int lv=atoi(left);
    sprintf(res, "%X.%X", lv, rv);


Правда это не правильно потому что точка ставится с учетом 10й СС. Я че-нить подумаю над этим напишу.

Это сообщение отредактировал(а) ИванМ - 20.2.2009, 00:57
PM MAIL   Вверх
ИванМ
Дата 20.2.2009, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Посмотри ссылку: http://gurulev.telebit.ru/sistschislenia.htm. Тут все написано
PM MAIL   Вверх
deadlegolas
Дата 20.2.2009, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ИванМ @  20.2.2009,  00:40 Найти цитируемый пост)
Исходное число val
На выходе строка res

Ого,крутой код,пока что самое лучшее , что я видел по этому вопросу) зачет.)
но у меня почему-то не выводит результат,хотя вотчем все переменные имеют свои значения.. странно.. тупо ничего не выводит..
Цитата

Я че-нить подумаю над этим напишу.

буду очень благодарен!
PM MAIL   Вверх
mrbrooks
Дата 20.2.2009, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Можно представить вещественное число в виде массива символов. Этот массив привести к 16-ной системе не сложно.
PM MAIL   Вверх
deadlegolas
Дата 20.2.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mrbrooks @  20.2.2009,  08:43 Найти цитируемый пост)
Можно представить вещественное число в виде массива символов. Этот массив привести к 16-ной системе не сложно. 

это как?О_о
а какая разница в переводе числа и набора чисел?
PM MAIL   Вверх
deadlegolas
Дата 20.2.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вроде бы работает такое преобразование в 16
Код

void dvoi(int x, int a[50])
{
int i=-1,j;
do{
i++;
a[i]=x%16;
x=x>>4;
if(x<16)
    {a[i+1]=x;
    i++;}
}
while(x>15);
for (j=i;j>=0;j--)
    {
    if(a[j]==10)
        cout<<"A";
    else
    if(a[j]==11)
        cout<<"B";
    else
    if(a[j]==12)
        cout<<"C";
    else
    if(a[j]==13)
        cout<<"D";
    else
    if(a[j]==14)
        cout<<"E";
    else
    if(a[j]==15)
        cout<<"F";
    else

    cout<<a[j];}
}



это перевод целого числа,а как перевести дробное число? множить на 16 и сдвигать биты влево? а то я побитовых операциях не очень)
PM MAIL   Вверх
mrbrooks
Дата 20.2.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(deadlegolas @  20.2.2009,  11:32 Найти цитируемый пост)
а какая разница в переводе числа и набора чисел? 

поясни  smile 
Цитата(deadlegolas @  20.2.2009,  11:49 Найти цитируемый пост)
вроде бы работает такое преобразование в 16

мало того что велосипед изобретаешь, да еще к тому же и корявый  smile 
Цитата(deadlegolas @  20.2.2009,  11:49 Найти цитируемый пост)
это перевод целого числа,а как перевести дробное число? 

я вижу выход только через массив символов (для решения проблемы почитай про union). иначе потеряешь значения после запятой . 
PM MAIL   Вверх
deadlegolas
Дата 20.2.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




Цитата(mrbrooks @  20.2.2009,  11:59 Найти цитируемый пост)
мало того что велосипед изобретаешь, да еще к тому же и корявый  smile 

а почему корявый?)
Цитата

(для решения проблемы почитай про union)

сейчас почитаю..сенкс..
а ты не знаешь,как тот "корявый велосипед" заставить работать с алгоритмом перевода дробной части в 16ную?) 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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