Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
#1

написать функцию из 10 с.с в 16 - C++

15.12.2008, 00:59. Просмотров 925. Ответов 8
Метки нет (Все метки)

Напишите функцию, которая переводит заданное число из 10-ной системы
счисления в 16-ричную систему счисления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.12.2008, 02:19     написать функцию из 10 с.с в 16 #2
Код
 
#include <stdio.h>

/* переводит число из 10-ной в 16-ричную систему */
main()
{
    char *dectohex(long);
    
    printf("%s\n", dectohex(4000000000));
    return 0;
}

#define MAXNUMBER  100

/* dectohex:  переводит число из 10-ной системы счисления в 16-ричную */
char *dectohex(long n)
{
    static char number[MAXNUMBER];
    
    return sprintf(number, "%lx", n) > 0 ? number : NULL;
}
update:
заменил %x на %lx, терь правильно и на bc3.1
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
15.12.2008, 07:48  [ТС]     написать функцию из 10 с.с в 16 #3
Dev-C++ не запускает
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
15.12.2008, 22:35  [ТС]     написать функцию из 10 с.с в 16 #4
Код
#include <stdio.h>
#include <stdlib.h>
 
int hex(int n) //ввод шестнадцатиричной переменной
 
{ int i=0;
char str[255]="";
while(n!=0) //пока n не равен нулю
{
str[255]=n%16; //делим число 
i++; //инкрементируем
n/=16; // делим число на 16 до целого
}
for(i--;i>=0;i--)
return(str[255]);
}
 
int main()
{
char *v=NULL; //s - динамический массив
int n; //a-десятиричное число
v=(char*)malloc(sizeof(int)*50); //выделяем память под динамический массив
printf("Vvedite chislo v desyatichnoy sisteme schisleniya\n"); // вывод сообщения
scanf("%d",n); // ввод десятиричного числа
*v=hex(n); 
printf("%s",*v); // вывод ответа
printf("\n"); 
system("pause");//ждем нажатия любой клавиши
return 0;//завершение программы
}
А как будет выгледеть нормальный код? В принципе я написал, но блин что-то неверно. и не получаеться исправить
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.12.2008, 23:16     написать функцию из 10 с.с в 16 #5
Код
int hex(int n) //ввод шестнадцатиричной переменной

{ int i=0;
char str[255]="";
while(n!=0) //пока n не равен нулю
{
str[255]=n%16; //делим число
i++; //инкрементируем
n/=16; // делим число на 16 до целого
}
for(i--;i>=0;i--)
return(str[255]);
}
это выбрось

те нужен алгоритм перевода обязательно? я обёртку написал, т.к. она переносимая и простая
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
16.12.2008, 00:25     написать функцию из 10 с.с в 16 #6
Если можно на си++, то вот навскидку решение
Код
#include <iostream>
int main(){
    std::cout << "Enter decimal number: ";
    int num;
    std::cin >> num;
    std::cout << "In hexadecimal: " << std::hex << num << std::endl;
    return 0;
}
Если я под ночь ничего не напутал, то должно работать.
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
16.12.2008, 00:46  [ТС]     написать функцию из 10 с.с в 16 #7
Через стандартные функцию я тоже умею писать. Мне именно надо через функцию притом не стандартную. Ну все равно спасибо и за эту прогу
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.12.2008, 00:38     написать функцию из 10 с.с в 16 #8
Код
 
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

#define MAXNUMBER  100    /* максимальная длина числа */

/* переводит число из 10-ной в 16-ричную систему */
main()
{
    int dectohex(char *);
    char number[MAXNUMBER];
    
    sprintf(number, "125");
    if (dectohex(number) == 0)
        printf("%s\n", number);
    return 0;
}

//#include <ctype.h>
//#include <stdlib.h>

/* dectohex:  переводит число из 10-ной системы счисления в 16-ричную;
              число >0 и <2^31 */
int dectohex(char *s)
{
    char *p = s;
    long n, i;
    
    while (isdigit(*p))
        p++;
    if (*p != '\0')
        return 1;
    if ((n = atoi(s)) == 0) {    
        *s = '0';
        *(s+1) = '\0';
        return 0;
    }    
    for (i = n, p = s; i; p++, i >>= 4)
        ;
    *p = '\0';
    for (p-- ; n; n >>= 4, p--) {
        i = (n & 0xF);
        *p = (i < 10 ? '0' + i : 'A' + (i-10));
    }
    return 0;
}
через сдвиги, там ограничения на размер и зависимость от таблицы кодов символов (может быть не переносима между разными системами), сообщает об ошибке (если передаётся не десятичное положительное число)
т.к. надо возвращать 16ричное число, строка нужна обязательно (лучше бы вообще не использовать строки когда с числами работаешь)
алгоритм через деление может увеличить максимально допустимый размер числа, я пробовал через double нифига чо-то не получилось для сдвигов (пишет нелья такие операции применять к double оно и ясно там же вещественная часть вычисляется)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2008, 16:29     написать функцию из 10 с.с в 16
Еще ссылки по теме:

C++ Написать встроенную функцию min () и обычную функцию imin (), которые возвращают меньшее из двух целых значений
C++ рекурсия.написать функцию,принимающую указ. на другую функцию, осуществл. некую операцию с переданным х
Написать функцию на С++ C++
C++ Написать функцию, которая, в зависимости от выбора пользователя вызывает соответствующую функцию
Написать функцию "Факториал" и программу, использующую эту функцию для вывода таблицы факториалов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ElemeNT
1 / 1 / 0
Регистрация: 27.10.2008
Сообщений: 25
17.12.2008, 16:29  [ТС]     написать функцию из 10 с.с в 16 #9
странная прога щас буду ковыряться
Yandex
Объявления
17.12.2008, 16:29     написать функцию из 10 с.с в 16
Ответ Создать тему
Опции темы

Текущее время: 07:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru