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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> системы исчесления, разные системы исчесления 
:(
    Опции темы
DESert
Дата 29.12.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



помогите плиз написать функцию
Код

void number(int x,int base)

которая переводит число x в систему исчесления base

у меня никак не получается smile
или идею подскажите
Добавлено @ 12:39
язык обычный Си
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
pablo
Дата 29.12.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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





--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
chaos
Дата 29.12.2005, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Цитата(pablo @ 29.12.2005, 12:52)
вам вот сюда: http://msdn.microsoft.com/library/default....clrfHex_ios.asp

а если ему надо перевести в 7ую систему счисления smile
Добавлено @ 12:55
все что тебе надо:
понимать на пальцах как осуществляется перевод
Добавлено @ 12:56
это конечно если тебе надо переводить в нестандартную систему, а если только 10 8 и 16 то это раз плюнуть
PM WWW   Вверх
DESert
Дата 29.12.2005, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



проблема в том, что base < 201 !!!
то есть любое число до 201...
что с эти делать непонятно smile
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
Aleksandor
Дата 29.12.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

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



Ну не знаю smile Все данные для машины существуют в двоичной системе. Единственно различие что могут упакованными либо неупакованными, ну и порядок следования байтов может быть разный.

Если надо например перевести строку символов в память машины в виде числа то есть функция strtol. Обратное преобразование - ultoa

Или если переводим двоичное число х в систему кратную 2 то можно так-
в двоичную: если бит 0 пишем 0, если 1 то 1
в восьмеричную: соответственно каждые 3 бита это числа от 0 до 7
в 16ричную: каждые 4 бита - числа от 0 до F

Чтобы перевести в 10-ную нужно найти сумму произведений цифры на основание системы в степени на 1 меньшей порядка цифры.

например число 0101101 (двоичное) переводим в десятичное
2 в степени 0 = 1
2 в степени 2 = 4
2 в степени 3 = 8
2 в степени 5 = 32
итого 32+8+4+1 = 45 (десятичное)

А из десятичной можно перевести в любую другую-
Делишь с остатком число на основание нужной степени, потом результат ещё раз и т. д. пока не останется 0. Тогда все остатки записываешь в обратном порядке. Они и образуют число в нужной системе. Только нужно не забывать, что если основание больше 10, то цифра может быть больше 9, а значит заменяется на букву.



Это сообщение отредактировал(а) Aleksandor - 29.12.2005, 13:13


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
chaos
Дата 29.12.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



разберись как переводят 10->2 и 2->10
и ты сможешь написать функцию каторая переводит в любую систему!!!!
PM WWW   Вверх
DESert
Дата 29.12.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а можно ли из двоичной перевести в любую систему счсиления?
Добавлено @ 13:13
Цитата
разберись как переводят 10->2 и 2->10
и ты сможешь написать функцию каторая переводит в любую систему!!!!


так это понятно... но как из 2->n - ричную...
тут не могу сообразить
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
DESert
Дата 29.12.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскжите!! в чём ошибка!!! smile
Код

void print_number(int x,int base)
{
    int ostatok[50];
    int chastnoe=0,i=0;
    
    printf("Perevod chisla %d v %d chislenia\n", x, base);
    printf("Result:  ");
    
    if (x<base) putchar(x);
    
    else
    {    
        do
        {
            chastnoe = x / base;
            
            ostatok[i] = x - base*chastnoe;
            
            x = chastnoe;
            
            i++;
            
            printf("%d\n",x);
        
        } while (x > base);
        
    
    ostatok[i] = x;
    while (i<0)
    {
        putchar(ostatok[i]);
        i--;
    }
    
    }
}

--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
DESert
Дата 29.12.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

putchar(x);


не рабоает... smile((
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
Exekutor
Дата 29.12.2005, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

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



Цитата

chastnoe = x / base;


Цитата

int chastnoe=0


такого не может быть. Делай частное типа float


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
DESert
Дата 29.12.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
такого не может быть. Делай частное типа float

как так не может быть?... просто целочисленно разделит
меня больше волнует putchat() с printf() всё работает хорошо, но по условию задачи нужно с putchar()
Добавлено @ 15:10
а в том коде я нашел ошибку
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
Exekutor
Дата 29.12.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

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



что говорит?
Добавлено @ 15:14
Цитата

            chastnoe = x / base;
           
            ostatok[i] = x - base*chastnoe;


у тебя получится ноль. Используй float

Цитата

            ostatok[i] = x - base*chastnoe;
           
            x = chastnoe;


или поменяй строчки местами

Добавлено @ 15:20
И потом - зачем тебе массив?

Это сообщение отредактировал(а) Exekutor - 29.12.2005, 15:15


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
RomaRS
Дата 29.12.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Exekutor @ 29.12.2005, 15:12)
что говорит?
Добавлено @ 15:14
Цитата

            chastnoe = x / base;
           
            ostatok[i] = x - base*chastnoe;


у тебя получится ноль. Используй float

Цитата

            ostatok[i] = x - base*chastnoe;
           
            x = chastnoe;


или поменяй строчки местами

Добавлено @ 15:20
И потом - зачем тебе массив?

ИМХО
float в вычислениях использовать не стоит...
Лучше double, float только для хранения темповых данных.
PM MAIL   Вверх
Exekutor
Дата 29.12.2005, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

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



Интересно, а что DESert думает делать если массива в 50 элементов ему не хватит? Почему бы не использовать одно переменную? Неисповедимы пути...


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
DESert
Дата 29.12.2005, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



массив, чтобы там остатки от деления хранить, а потом в обратном порядке выводить...

Код

chastnoe = x / base;
ostatok[i] = x - base*chastnoe;


в chastnoe запишется результат целочисленного деления, что мне и надо
вторая трочка - остаток от деления x на base

кстати, эта функция переводит любое число в любую разрядность
вот что у меня работает:
Код

void print_number(int x,int base)
{
    int ostatok[50];
    int chastnoe=0,i=0,j=0;
    
    printf("Perevod chisla %d v %d chislenia\n", x, base);

    
    if (x<base) printf("%d",x);
    else
    {    
        do
        {
            chastnoe = x / base;
            ostatok[i] = x - base*chastnoe;
            printf("Ostatok:  %d\n",ostatok[i]);
            x = chastnoe;
            i++;
        } while (x > base);
        
    
    ostatok[i] = x;
    printf("REsult:  \n");
                for(j=i;j>=0;j--)
        printf("%d",ostatok[j]);
    }
}

а вот если поставить вместо printf() putchar(), то всё уже неправильно...
может быть знаете почему?
Добавлено @ 15:45
можно и одну переменную- не в этом вопрос совсем
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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