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

Перевод в 9-чную систему счисления - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Квадратная Матрица http://www.cyberforum.ru/cpp-beginners/thread421418.html
Задание написать программу на языке С++, с пояснениями к программному коду Для заданного целого N (0 <= N <= 40) программа должна создавать квадратную матрицу размера N на N такую, что каждый недиагональный элемент матрицы представляет собой сумму индексов элемента (нумерация индексов начинается с единицы), а каждый диагональный элемент - сумму элементов, находящихся с ним в одной строке и одном...
C++ Упорядочить слова в алфавитном порядке на С ребят помогите с задачкой, а то препод озадачил. самому не получается сделать. требуется отсортировать слова в строке в алфавитном порядке. строка заносится в символьный массив. функцию strlen использовать нельзя. массив безразмерный. сортировку требуется занести в отдельную функцию. http://www.cyberforum.ru/cpp-beginners/thread421383.html
C++ Непонятная работа вывода
Почему при выводе переменной а выводится 1, хотя перед тем как вывести ее выполняется lol(а)? Причем, при следующем выводе а выводится правильное значение(2). int lol(int &a) { a++; return 0; } int main()
C++ как дописать в файл
Столкнулся со следующей задачей, не знаю как сделать. В процессе работы кода нужно периодически сохранять массив данных в текстовый файл. Вначале сделал просто - дописывается столбец в конец файл. Но это неудобно. Хочу сделать так, чтобы каждый раз в файл добавлялась колонка из данных. Т.е. например был файл 1 -1 2 -2 3 -3 4 -4 А на следующем шаге дописывается колонка: 1 ...
C++ Дан числовой массив,Дано предложение. http://www.cyberforum.ru/cpp-beginners/thread421340.html
Часть 1. Дан числовой массив. Реализовать алгоритм сортировки вставками. Часть 2. Дано предложение(ввод с клавиатуры). Удалить из неё все буквы «e» и «m»
C++ выводит не все пути #include <stdio.h> #include <conio.h> #include <stdlib.h> int a; int n; int sp,ep; int *was,*pom,*path,cpath; FILE *f1; подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
14.01.2012, 23:19     Перевод в 9-чную систему счисления
Цитата Сообщение от ValeryS Посмотреть сообщение
алгоритмически вроде нащупал но вывести закономерность не могу
Вот здесь я более ясно написал код функции int_to_my_9ary, из которого понятен алгоритм перевода:
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/////////////////////////////////////////////////////////////////////////////////////////
//Рассмотрим девятеричную позиционную систему счисления 
//с цифрами { B, A, 0, 1, 2, 3, 4, 5, 6 }, 
//где цифра A имеет значение -1, а цифра B – значение -2.
//Выполните
//следующие операции и представьте результат в этой же самой системе счисления:
//24+5A     = 1B3
//B5+61     = 46
//52*A6     = B23
//312+41B   = 1B20
//A1A*B2B   = 15552
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <cctype>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
const int   BASE_RADIX      = 9;
const int   A_DIG_VAL       = -1;
const int   B_DIG_VAL       = -2;
const int   MIN_DIG_VAL     = B_DIG_VAL;
const int   MAX_DIG_VAL     = MIN_DIG_VAL + BASE_RADIX - 1;
/////////////////////////////////////////////////////////////////////////////////////////
int  my_9ary_to_int(const T_str&  expr)
{
    int  int_res = 0;
 
    for(
        T_str::const_iterator  symb_it = expr.begin();
        symb_it != expr.end();
        ++symb_it
       )      
    {
        int_res *= BASE_RADIX;
 
        switch(*symb_it)
        {
        case 'A':
            int_res += A_DIG_VAL;
            break;
 
        case 'B':
            int_res += B_DIG_VAL;
            break;
 
        default:
            int_res += *symb_it - '0';
        }        
    }
    return  int_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
T_str  int_to_my_9ary(int  int_val)
{    
    T_str   res_str;
    if(int_val == 0)
    {
        res_str = "0";
    }
 
    bool    is_negative     = int_val < 0;
    int     abs_int_val     = abs(int_val);
 
    while(abs_int_val)
    {        
        int     abs_int_last_dig    = abs_int_val % BASE_RADIX;
        int     int_last_dig        = is_negative ? -abs_int_last_dig : abs_int_last_dig;
 
        abs_int_val /= BASE_RADIX;
 
        while(int_last_dig > MAX_DIG_VAL)
        {
            int_last_dig -= BASE_RADIX;
            is_negative
                ? --abs_int_val
                : ++abs_int_val;            
        }
 
        while(int_last_dig < MIN_DIG_VAL)
        {
            int_last_dig += BASE_RADIX;
            is_negative
                ? ++abs_int_val
                : --abs_int_val;
        }
        
        char  char_last_dig = 0;
 
        switch(int_last_dig)
        {
        case A_DIG_VAL:
            char_last_dig = 'A';
            break;
 
        case B_DIG_VAL:
            char_last_dig = 'B';
            break;
 
        default:
            char_last_dig = '0' + int_last_dig;
            break;
        }
        res_str.push_back(char_last_dig);
    }
    std::reverse
        (
            res_str.begin(),
            res_str.end()
        );
 
    return  res_str;
}
/////////////////////////////////////////////////////////////////////////////////////////
T_str  calc_expr(const T_str&  expr)
{
    T_str::size_type    op_pos  =   expr.find_first_of("+*");
 
    T_str   L                   =   expr.substr
                                        (
                                            0,
                                            op_pos
                                        ); 
 
    T_str   R       =   expr.substr(op_pos + 1); 
 
    int     L_int   =   my_9ary_to_int(L);
    int     R_int   =   my_9ary_to_int(R);
 
    int     int_res     =   0;
    switch( expr[op_pos] )
    {
    case '+':
        int_res = L_int + R_int;
        break;
 
    case '*':
        int_res = L_int * R_int;
        break;
    }
 
    return  int_to_my_9ary(int_res); 
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Ведите без пробелов пример сложения или умножения чисел"
              << std::endl
              << "в девятеричной системе счисления с цифрами { B, A, 0, 1, 2, 3, 4, 5, 6 }, "
              << std::endl
              << "где цифра A имеет значение -1, а цифра B – значение -2:";              
 
    for(;;)
    {
        std::cout << std::endl
                  << std::endl
                  << "-> ";
 
        T_str  expr;
        std::cin >> expr;
        std::cout << calc_expr(expr)
                  << std::endl;
    }
}
 
Текущее время: 01:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru