Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[С/C++] Перевод чисел из системы счисления Х в сс Y

13K
28 февраля 2006 года
Sabbath
14 / / 28.02.2006
Привет народ! Можете помочь с алгоритмом или программой перевода чисел из P-итой системы счисления в Q-итую. Пожалуйста, очень нужно!
Страницы:
252
07 марта 2006 года
koderAlex
1.4K / / 07.09.2005
Цитата:
Originally posted by OlgaKr
Ну если очень хочеться ты не тормози, можешь попробовать. Я всегдa готова перенять опыт от профессионалов дела, а не слова. ;)
Тут на форуме integral написал задачу "биты числа" ну очень интересно посмотреть как такую задачу решит настоящий програмист а не шумеры не... .


Шумеры - это древние люди , подозреваемые в связях с инопланетянами .Занимались , очевидно , контробандай звёздных компов из за чего получили привычку вести счёт в 64ричной системе :D .
вариант с указателями вам показали ,а это вариант с peekb() - прямой доступ к байту по адресу .
void main(){
unsigned char bit;
double real=16;
for( int i=0;i<8;i++){
bit=peekb(FP_SEG((void far *)&real), FP_OFF((void far *)&real)+7-i);
for(unsigned char j=0;j<8;j++){printf("%1d", (bit>>(7-j))&0x01); };
};
}
Поздравляю с 8 марта нашу новую ученицу Оленьку.:)

7.9K
07 марта 2006 года
uki_
122 / / 26.01.2006
Цитата:
Originally posted by koderAlex
void main(){
unsigned char bit;
double real=16;
for( int i=0;i<8;i++){
bit=peekb(FP_SEG((void far *)&real), FP_OFF((void far *)&real)+7-i);
for(unsigned char j=0;j<8;j++){printf("%1d", (bit>>(7-j))&0x01); };
};
}

Этот код ты случайно не из Гилгамеша выкопал?
Из за FP_SEG, FP_OFF, peekb - Visual C++/CBuilder не может откомпилировать программу. Предполагаю, что это DOS-ская прога для 16-битовых машин.

В наше время вместо
bit=peekb(FP_SEG((void far *)&real), FP_OFF((void far *)&real)+7-i);

пишут

bit=*((unsigned char *)&real+7-i);

хотя бы потому, чтоб программу можно было откомпилировать.

1.9K
01 мая 2006 года
Nigger
71 / / 09.04.2005
Вопрос к знатокам систем счисления :)
Нужно перевести 64-х разрядное число из двоичн. в десятичное представление средствами Borland C++ 3.1
Вот мой вариант :
Код:
#define MaxBinLen 64
/* Функция осуществляет перевод из двоичного кода
в десятичный. Число в двоичном коде задается в виде строки.
Длина двоичного числа ограничивается 64 разрядами.*/
char* Bin2Dec(char *str)
{
    int len=0,i=0;
    long double s=0,k=1;
    char    res[21];

    /*Если длина числа больше 64 разрядов,
    оставляем только старшие 64 разряда */
    len = strlen(str);
    if( len>MaxBinLen)
    {
        str[MaxBinLen] = 0;
        len = MaxBinLen;
    }
    for(i=len-1;i>=0;i--)
    {
        if(str == '1')
            s = s + k ;
        k=k*2;
    }
    gcvt(s,21,res);
    return res;
}

Это правильно работает только с числами до 59-х разрядов. А когда k достигает значения 576460752303423488 умножение на 2 даёт неверный результат. Я так понимаю это особенности работы процессора с типом double (long double), но большего типа для хранения 64-го числа в BC++ 3.1 я не нашел. Поскажите выход из этой ситуации =>
324
02 мая 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Nigger
Вопрос к знатокам систем счисления :)
Нужно перевести 64-х разрядное число из двоичн. в десятичное представление средствами Borland C++ 3.1
Вот мой вариант :
Код:
#define MaxBinLen 64
/* Функция осуществляет перевод из двоичного кода
в десятичный. Число в двоичном коде задается в виде строки.
Длина двоичного числа ограничивается 64 разрядами.*/
char* Bin2Dec(char *str)
{
    int len=0,i=0;
    long double s=0,k=1;
    char    res[21];

    /*Если длина числа больше 64 разрядов,
    оставляем только старшие 64 разряда */
    len = strlen(str);
    if( len>MaxBinLen)
    {
        str[MaxBinLen] = 0;
        len = MaxBinLen;
    }
    for(i=len-1;i>=0;i--)
    {
        if(str == '1')
            s = s + k ;
        k=k*2;
    }
    gcvt(s,21,res);
    return res;
}

Это правильно работает только с числами до 59-х разрядов. А когда k достигает значения 576460752303423488 умножение на 2 даёт неверный результат. Я так понимаю это особенности работы процессора с типом double (long double), но большего типа для хранения 64-го числа в BC++ 3.1 я не нашел. Поскажите выход из этой ситуации =>



Выход из этой ситуации это использование строк.

19K
28 января 2007 года
Timurovic
11 / / 02.12.2006
Помогите,кто как может.
Немогу перевести число из 4ой системы в 16ую.
Пытался сделать по примеру перевода из 2ой в 10ую.
сирано не идет.
Буду рад любой помощи.
Вот тут помозговав надумал:
Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
void main()
{
char m[5];
long int k=0;
int i,v,t;
printf("BBeDuTe 4-oe 4uc/lo:\n");
scanf("%s",&m);
for(v=0;v<i;v++)
{for(i=strlen(m)-1;i>=0;i--)
{t=pow(4,v);
k+=m*t-48;
}
}
printf("%i",k);
getch();
}

это пока в десятичную
дальше не идет..

[COLOR=red]читай правила форума Студентам[/COLOR]
20K
29 января 2007 года
lnkgyv3
17 / / 12.01.2007
Цитата: Timurovic
Помогите,кто как может.
Немогу перевести число из 4ой системы в 16ую.
Пытался сделать по примеру перевода из 2ой в 10ую.
сирано не идет.
Буду рад любой помощи.
Вот тут помозговав надумал:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
void main()
{
char m[5];
long int k=0;
int i,v,t;
printf("BBeDuTe 4-oe 4uc/lo:\n");
scanf("%s",&m);
for(v=0;v<i;v++)
{for(i=strlen(m)-1;i>=0;i--)
{t=pow(4,v);
k+=m*t-48;
}
}
printf("%i",k);
getch();
}
это пока в десятичную
дальше не идет..



Ну я могу только сказать, что число из 4-й сс в 16 сс можно получить последовательным делением числа в 4-й сс на 16 и результат записать в обратном порядке, учитывая, что числа болше 9 это знаки. Вообщем элементарщина. :-)
int digit4ss=.....;
char digit16ss[5]="";
while(digit4ss>16)
digit16ss=digit4ss/16
Вообщем набросок понятен. Там типа в символ перведодиш, если символ больше десить то символы а, б, с... Короче дерзай.:)

242
29 января 2007 года
Оlga
2.2K / / 04.02.2006
FAQ
Полезные ссылки
30K
05 июня 2007 года
SlavaRnic
1 / / 04.06.2007
Задача:Составить процедуру вычисления значения целого числа за заданной строкой символов, что является записью этого числа в десятичной, 16-ричной и двоичной системах исчисления. В случае ввода числа в 16-ричной и двоичной системах счислення необходимо составить функцию их перевода в десятичную систему.
Я только начинаю писать на с++,по этому не могу справится с этой задачей.ПОМОГИТЕ!

[COLOR="Red"]Замечание: название темы должно отражать суть вопроса и быть более лаконичным.[/COLOR] OlgaKr.
23K
05 июня 2007 года
HumanAPI
18 / / 07.03.2007
Перевод строк в числа осуществляет функция sscanf(данная функция работает с паметью)

пример
char s[256];
int i;

sscanf(s, "%d", &i); считавает из строки целое десятичное число
эта функция может считовать числа 16-ричной и двоичной системах исчисления
смотри в хелпах
26K
05 июня 2007 года
Enotus
13 / / 04.06.2007
Задача : "Написать и протестировать функцию, которая преобразует строку восьмеричных цифр в эквивалентное ей целое десятичное число."

Заглянул сюда, не всё понял в коде. К тому же программа отказывается компилироваться, ссылаясь на неизвестную <vcl.h> в MVS 6. Можно как-нибудь попроще, без "byte", vcl и параметров командной строки функции main ? Так же непонятен смысл существования "#pragma hdrstop" и "#pragma argsused".
242
05 июня 2007 года
Оlga
2.2K / / 04.02.2006
Цитата:
не всё понял в коде


задавай конкретные вопросы, что не понял

Цитата:
К тому же программа отказывается компилироваться, ссылаясь на неизвестную <vcl.h> в MVS 6. Можно как-нибудь попроще, без "byte", vcl и параметров командной строки функции main


Можешь все это спокойно убрать, только с byte не поняла, это ты о чем? фрагмент кода приведи.

26K
05 июня 2007 года
Enotus
13 / / 04.06.2007
Всё получилось )
28K
05 июня 2007 года
Idealnuy_neznakomec
5 / / 05.06.2007
Уважаемая OlgaKr,я студент ы еще только начал учить с++,поэтому я попросилбы вас обьяснить мне следующее:1).Что делает програма (http://forum.codenet.ru/showpost.php?p=112590&postcount=19). 2).Она у меня не запускается потомучто пишет :Unable to open includ file vcl.h
Undefinded simvol "byte"
Undefinded simvol j
Statement missing ;
Буду вам очень благодарен!С уважением Петр.:)
9
05 июня 2007 года
Lerkin
3.0K / / 25.03.2003
Посмотри название темы, и попробуй соотнести его с приведенным примером.

P.S. Я не пойму - вы специально, что ли, так уродуете предложение, что его с первого раза прочитать невозможно?
242
05 июня 2007 года
Оlga
2.2K / / 04.02.2006
Петр, а зачем несколько аккаунтов создавать? Надеюсь у вас это в реальной жизни не проявляется ;-) А насчет того, что делает программа, то Леркин тебе объяснил, в топике, где написана программа есть задания и объяснения...

Ответ на ваши вопросы: http://forum.codenet.ru/showpost.php?p=196050&postcount=53
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог