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

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

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

Рекурсивная функция... Очень надо... - C++

22.01.2011, 23:15. Просмотров 449. Ответов 5
Метки нет (Все метки)

Народ помогите плиз. Нужно написать рекурсивную функцию перевода из 16 сс в 10 сс....Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2011, 23:15     Рекурсивная функция... Очень надо...
Посмотрите здесь:

C++ Рекурсивная функция
Рекурсивная функция. C++
C++ Рекурсивная функция[]
Рекурсивная функция C++
Рекурсивная функция C++
Рекурсивная функция C++
Рекурсивная функция C++ C++
C++ Рекурсивная функция
Рекурсивная функция C++
C++ Рекурсивная функция
C++ Рекурсивная функция
Рекурсивная функция C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
23.01.2011, 01:03     Рекурсивная функция... Очень надо... #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cassert>
 
int HexToDec(const char *hex) {
  if (*hex == '\0')
    return 0;
  assert((*hex >= 'A' && *hex <= 'F') || (*hex >= '0' && *hex <= '9'));
  int digit = (*hex >= 'A' && *hex <= 'F') ? *hex - 'A' + 10 : *hex - '0';
  return digit * pow(16., strlen(hex) - 1) + HexToDec(hex+1);
}
 
int main(int argc, char *argv[]) {
  printf("%d\n", HexToDec("FFFF"));
  printf("%d\n", HexToDec("0F0F"));
  printf("%d\n", HexToDec("F0F0"));
  return 0;
}
Быстрее, но непонятней и без проверки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdio>
#include <cstring>
 
int HexToDec(const char *hex) {
  if (*hex == '\0') return 0;
  return (((*hex >= 'A' && *hex <= 'F') ? *hex - 'A' + 10 :
          ((*hex >= '0' && *hex <= '9') ? *hex - '0' : 0))
          << (4 * (strlen(hex) - 1))) + HexToDec(hex+1);
}
 
 
int main(int argc, char *argv[]) {
  printf("%d\n", HexToDec("FFFF"));
  printf("%d\n", HexToDec("0F0F"));
  printf("%d\n", HexToDec("F0F0"));
  return 0;
}
Aleks_Char
1 / 1 / 0
Регистрация: 22.01.2011
Сообщений: 10
23.01.2011, 01:37  [ТС]     Рекурсивная функция... Очень надо... #3
Спасибо большое ))

Добавлено через 25 минут
Только пишет что " 'digit' is assigned a value that is never used"
Что делать? ато я правил вроде ничерта не помогает.
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
23.01.2011, 13:16     Рекурсивная функция... Очень надо... #4
Что вы там направили, показывайте. Телепаты в отпуске.
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
23.01.2011, 16:39     Рекурсивная функция... Очень надо... #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//////////////////////////////////////////////////////////////////////////////////////
//написать рекурсивную функцию перевода из 16 сс в 10 сс
//////////////////////////////////////////////////////////////////////////////////////
#include <cctype>
#include <iostream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
typedef long long    T_num;
//////////////////////////////////////////////////////////////////////////////////////
bool  get_dec_val
    (
        char    hex_dig_symb,
        T_num&  dec_val
    )
{    
    if(   '0' <= hex_dig_symb
        && hex_dig_symb <= '9')
    {
        dec_val = hex_dig_symb - '0';
        return  true;
    }
    hex_dig_symb = tolower(hex_dig_symb);
    if(   'a' <= hex_dig_symb
       && hex_dig_symb <= 'f')
    {
        dec_val = hex_dig_symb - 'a' + 0xa;
        return  true;
    }    
    return  false;
}
//////////////////////////////////////////////////////////////////////////////////////
bool  get_dec_val
    (
        const T_str&  hex_str,
        T_num&        res_val
    )
{
    T_num   dig_dec_val   = 0;
    T_num   tail_dec_val  = 0;
 
    bool  bool_res =    hex_str.empty()
                     ||    get_dec_val  (*hex_str.rbegin(),                     dig_dec_val  )
                        && get_dec_val  (hex_str.substr(0, hex_str.size() - 1), tail_dec_val );
 
    res_val = dig_dec_val + 0x10 * tail_dec_val;
    return  bool_res;
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        std::cout <<     "Число в шестнадцатеричной системе счисления: ";
        T_str  hex_str;
        getline(std::cin, hex_str);
        if(hex_str.empty()) break;        
        T_num  dec_val;
        if(get_dec_val(hex_str, dec_val))
        {
            std::cout << "В десятичной системе счисления             : "
                      << dec_val
                      << std::endl
                      << std::endl
                      << std::endl
                      << std::endl;            
        }
    }
}
Aleks_Char
1 / 1 / 0
Регистрация: 22.01.2011
Сообщений: 10
23.01.2011, 17:11  [ТС]     Рекурсивная функция... Очень надо... #6
Я ничего не правил, т.к. у меня ещё больше варов выдавало. а такую ошибку выдавало в оригинальном варианте..
Yandex
Объявления
23.01.2011, 17:11     Рекурсивная функция... Очень надо...
Ответ Создать тему
Опции темы

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