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

Функции стандартной библиотеки для отображения одной системы счисления в другую - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Произвести математические операции над матрицами http://www.cyberforum.ru/cpp-beginners/thread715806.html
Помогите пожалуйста! Дано квадратную матрицу А порядка n и вектор b с n елементами. Получить: а) (А^2) x b б) (A-E) × b Где Е - единичная матрица порядка n. Зарание спасибо!
C++ что здесь не так? (из промежутка [n; m] вывести число, которое имеет наибольшее делителей) из промежутка вывести число, которое имеет наибольше делителей код: # include <iostream> # include <conio.h> using namespace std; void f (int, int, int); void main () { int m, n, k=0; cout<<"m"; cin>>m; cout<<"n"; cin>>n; http://www.cyberforum.ru/cpp-beginners/thread715794.html
C++ Присвоение значения переменной в классе
возможно ли присвоение значения переменной в классе? class xxx { public : void rrr(); public : int x=5; // ??? };
задача (строки, вывод на экран) C++
Дан текст на русском языке, нормально оканчивающийся точкой. Вывести на экран все гласные буквы которые встречаются хотя бы в одном слове не менее двух раз;все звонкие согласные,которые входят только в одно слово.
C++ Линейный список - вставить пару новых элементов перед последним http://www.cyberforum.ru/cpp-beginners/thread715752.html
#include <conio.h> #include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <string.h> #include <iomanip.h> const int len_f=15, //Длина фамилии len_i=15, //длина имени len_o=15; //длина отчества
C++ Проблемы с Сортировка линейной вставки Ниже рабочий код сортировка линейной вставки для одномерного массива: #include<conio.h> #include<stdio.h> #include<math.h> int main(){ int *A,*B,N,i,j,k,l,o,p; A=new int; B=new int; o=0;p=0; подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 22:15  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую
Написал для себя, но может кому ещё окажется полезным: файл bodh.h который содержит 2 функции 1-я bodh(), прототип которой unsigned long bodh( const char s[], const unsigned p ); функция принимает 2 аргумента, указатель на строку(служит для символьного эквивалента преобразуемой системы счисления) и код самой системы счисления (2, 8, 10, 16 ), и возвращает функция преобразуемый в десятичную систему счисления результат. 2-я функция bodh_b(), прототип которой unsigned long bodh_b( unsigned v ), возвращает десятичное значение - визуальное подобие десятичного значения в двоичной системе( т.е. если функция в качестве параметра имеет значение 254, то возвратит 11111110). Примечание, функции работают только с положительными не дробными аргументами. Для 8-16-ричной системы на подобии функции bodh_b не писал, так как для этого есть стандартные функции ( например printf( "%o %x") ).
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
71
72
73
74
75
76
77
78
79
80
81
82
/* bodh.h
   "bin-oct-dec-hex converting functions from string
   and visually converation".
   contains:
   bodh() function.
   bodh_b() function.
*/
 
unsigned long bodh( const char s[], const unsigned p );
unsigned long bodh_b( unsigned v );
 
/* Convert string to value */
unsigned long bodh( const char s[], const unsigned p )
{
    unsigned long n;
    int i;
    
    n = 0;
    switch( p ) {
    case 2:
    for( i = 0; s[i] >= '0' && s[i] <= '1'; ++i )
        n = n * 2 + (s[i] - '0');
    return n;
    break;
    case 8:
    i = 0;
    if( s[i] == 'o' )
        ++i;
    for( ; s[i] >= '0' && s[i] <= '7'; ++i )
        n = n * 8 + (s[i] - '0');
    return n;
    break;
    case 10:  // aka atoi() from stdlib.h
    for( i = 0; s[i] >= '0' && s[i] <= '9'; ++i )
        n = n * 10 + (s[i] - '0');
    return n;
    break;
    case 16:
    i = 0;
    if( s[i] == '0' && (s[++i] == 'x' || s[i] == 'X'))
        ++i;
    else
        i = 0;
    for( ; (s[i] >= '0' && s[i] <= '9') ||
         (s[i] >= 'A' && s[i] <= 'F') ||
         (s[i] >= 'a' && s[i] <= 'f'); ++i ) {
        if( s[i] >= '0' && s[i] <= '9' )
        n = n * 16 + ( s[i] - '0' );
        else if (s[i] >= 'A' && s[i] <= 'F')
        n = n * 16 + ( s[i] - 'A' + 10 );
        else
        n = n * 16 + ( s[i] - 'a' + 10 );
    }
    return n;
    break;
    default:
    break;
    }
    return 0;
}
 
/* convert decimal to visually binary */
unsigned long bodh_b( unsigned v )
{
    unsigned long n;
    int i, arr_size;
    n = v;
    for( i = 0; v; ++i ) {
    v = v / 2;
    }
    arr_size = i--;
    int result[arr_size];
    v = n;
    for( ; v; --i ) {
    result[i] = (v % 2);
    v = v / 2;
    }
    for(i = n = 0; i != arr_size; ++i ) {
    n = n * 10 + result[i];
    }
    return n;
}
Добавлено через 10 минут
Результат применения функции:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include "bodh.h"
 
int main( void )
{
    printf( "%d\n", bodh_b( 19 ) );
    printf( "%d\n", bodh( "0xff3b", 16 ) );
    printf( "%d\n", bodh( "AF14", 16 ) );
    return 0;
}
Bash
1
2
3
4
5
6
[ilyuha21st@coldshoot currents]$ gcc -o test test.c
[ilyuha21st@coldshoot currents]$ ./test
10011
65339
44820
[ilyuha21st@coldshoot currents]$
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru