Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 21.12.2019
Сообщений: 7
1

Подскажите с решением задания, пожалуйста!

21.01.2020, 22:41. Показов 393. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Вкратце, у меня есть программа, которая принимает с консоли арабское число, и переводит его в римское. В программе используется перечисление и switch/case. И мне нужно заменить перечисления на массивы указателей на строки. Подскажите, пожалуйста, что мне нужно сделать? я пробовал создать char-массив, в котором были римские цифры, и в каждом case использовать указатели, но C++ не предусматривает использование указателей в кейсах(((( Уже мозг сломал, не могу ничего придумать...

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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#include <iostream>
using namespace std;
 
void qw1() {
    enum rimsk_arabsk { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000 };
 
    /*const char* rimsk_arabsk[] = { 1 = 'I', 5 = "V", X = 10, L = 50, C = 100, D = 500, M = 1000 };  не получилось */
 
 
    int k, a, b, c, d;
    cin >> k;
 
    if ((k < 0) || (k > 3999)) { //проверка, возможно ли вообще перевести число в римскую систему
        cout << "Невозможно преобразовать число" << endl;
        system("pause");
    }
 
 
    if (k < 10 && k>0) { //для однозначных чисел
        switch (k) {
            case I : cout << "I";
                break;
            case I + I: cout << "II";
                break;
            case I + I + I: cout << "III";
                break;
            case V - I: cout << "IV";
                break;
            case V: cout << "V";
                break;
            case V + I: cout << "VI";
                break;
            case V + I + I: cout << "VII";
                break;
            case V + I + I + I: cout << "VIII";
                break;
            case X - I: cout << "IX";
                break;
        }
    }
    else if (k > 9 && k < 100) { //для двузначных чисел
        a = k / 10; //первая цифра в числе
        b = k % 10; //вторая цифра в числе
        switch (a) {
        case I: cout << "X";
            break;
        case I + I: cout << "XX";
            break;
        case I + I + I: cout << "XXX";
            break;
        case V - I: cout << "XL";
            break;
        case V: cout << "L";
            break;
        case V + I: cout << "LX";
            break;
        case V + I + I: cout << "LXX";
            break;
        case V + I + I + I: cout << "LXXX";
            break;
        case X - I: cout << "XC";
            break;
        };
        switch (b) {
        case I: cout << "I";
            break;
        case I + I: cout << "II";
            break;
        case I + I + I: cout << "III";
            break;
        case V - I: cout << "IV";
            break;
        case V: cout << "V";
            break;
        case V + I: cout << "VI";
            break;
        case V + I + I: cout << "VII";
            break;
        case V + I + I + I: cout << "VIII";
            break;
        case X - I: cout << "IX";
            break;
        };
    }
    else if ((k > 99) && (k < 1000)) { //для трёхзначных чисел
        a = (k / 100); //первая цифра в числе
        b = (k - (a * 100)) / 10; //вторая цифра в числе
        c = (k - (a * 100)) % 10; //третья цифра в числе
        switch (a) {
        case I: cout << "C";
            break;
        case I + I: cout << "CC";
            break;
        case I + I + I: cout << "CCC";
            break;
        case V - I: cout << "CD";
            break;
        case V: cout << "D";
            break;
        case V + I: cout << "DC";
            break;
        case V + I + I: cout << "DCC";
            break;
        case V + I + I + I: cout << "DCCC";
            break;
        case X - I: cout << "CM";
            break;
        };
        switch (b) {
        case I: cout << "X";
            break;
        case I + I: cout << "XX";
            break;
        case I + I + I: cout << "XXX";
            break;
        case V - I: cout << "XL";
            break;
        case V: cout << "L";
            break;
        case V + I: cout << "LX";
            break;
        case V + I + I: cout << "LXX";
            break;
        case V + I + I + I: cout << "LXXX";
            break;
        case X - I: cout << "XC";
            break;
        };
        switch (c) {
        case I: cout << "I";
            break;
        case I + I: cout << "II";
            break;
        case I + I + I: cout << "III";
            break;
        case V - I: cout << "IV";
            break;
        case V: cout << "V";
            break;
        case V + I: cout << "VI";
            break;
        case V + I + I: cout << "VII";
            break;
        case V + I + I + I: cout << "VIII";
            break;
        case X - I: cout << "IX";
            break;
        };
    }
    else if (k > 999 && k < 4000) { //для четырёхзначных чисел
        a = k / 1000; //первая цифра в числе
        b = (k - (a * 1000)) / 100; //вторая цифра в числе
        c = (k % 100) / 10; //третья цифра в числе
        d = k % 10; //четвёртая цифра в числе
        switch (a) {
        case I: cout << "M";
            break;
        case I + I: cout << "MM";
            break;
        case I + I + I: cout << "MMM";
            break;
        };
        switch (b) {
        case I: cout << "C";
            break;
        case I + I: cout << "CC";
            break;
        case I + I + I: cout << "CCC";
            break;
        case V - I: cout << "CD";
            break;
        case V: cout << "D";
            break;
        case V + I: cout << "DC";
            break;
        case V + I + I: cout << "DCC";
            break;
        case V + I + I + I: cout << "DCCC";
            break;
        case X - I: cout << "CM";
            break;
        };
        switch (c) {
        case I: cout << "X";
            break;
        case I + I: cout << "XX";
            break;
        case I + I + I: cout << "XXX";
            break;
        case V - I: cout << "XL";
            break;
        case V: cout << "L";
            break;
        case V + I: cout << "LX";
            break;
        case V + I + I: cout << "LXX";
            break;
        case V + I + I + I: cout << "LXXX";
            break;
        case X - I: cout << "XC";
            break;
        };
        switch (d) {
        case I: cout << "I";
            break;
        case I + I: cout << "II";
            break;
        case I + I + I: cout << "III";
            break;
        case V - I: cout << "IV";
            break;
        case V: cout << "V";
            break;
        case V + I: cout << "VI";
            break;
        case V + I + I: cout << "VII";
            break;
        case V + I + I + I: cout << "VIII";
            break;
        case X - I: cout << "IX";
            break;
        };
    };
}
 
 
int main() {
    int k;
    setlocale(LC_ALL, "rus");
    cout << "Введите число в арабской системе счисления: ";
    qw1();
    cout << " - ваше число в римской системе счисления";
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2020, 22:41
Ответы с готовыми решениями:

Подскажите пожалуйста, как правильно вывести,сформировать массив из задания
Дан массив С из 16 элементов.Нужно:проинициализировать массив С, вывод промежуточных данных и...

Трабл с решением задания, условные операторы
Здраствуйте, возникла определенная проблема при решении задания. Полагаю, не суть, что за задание,...

Подскажите с решением задачи меню ресторана
Заказ в ресторане Написать программу, которая: 1. Предлагает пользователю меню блюд в...

Найти значение выражения по заданной формуле (подскажите с решением)
Здание достаточно простое, но я не уверен. Надо найти F=(i=10∑100)(j=5∑50)cos(i-j). Тут...

1
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
21.01.2020, 23:13 2
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
uint32_t RomToDec(std::string str) {
    uint32_t num(0), prev(0);
    std::string::reverse_iterator strit;
    for (strit = str.rbegin(); strit != str.rend(); ++strit) {
        uint32_t dig;
        switch (*strit) {
        case 'M': dig = 1000; break;
        case 'D': dig = 500; break;
        case 'C': dig = 100; break;
        case 'L': dig = 50; break;
        case 'X': dig = 10; break;
        case 'V': dig = 5; break;
        case 'I': dig = 1; break;
        default: return NULL;
        }
        dig < prev ? num -= dig : num += dig;
        prev = dig;
    }
    return num;
}
 
std::string DecToRom(uint32_t num) {
    static std::string I[] = { "","I","II","III","IV","V","VI","VII","VIII","IX" };
    static std::string X[] = { "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC" };
    static std::string C[] = { "","C","CC","CCC","CD","D","DC","DCC","DCCC","CM" };
    static std::string M[] = { "","M","MM","MMM" };
    return M[num / 1000] + C[(num % 1000) / 100] + X[(num % 100) / 10] + I[(num % 10)];
}
?
1
21.01.2020, 23:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2020, 23:13
Помогаю со студенческими работами здесь

Объясните решение задания, пожалуйста!
Написать программу, которая позволяет осуществить сложение, вычитание, умножение и деление для...

Дайте,пожалуйста, совет по поводу задания
Есть односвязный список, нужно в і-ую позицию вставить элемент, как лучше бы это сделать? Создать...

Подскажите пожалуйста с решением
Дана формула рис1 которая высчитывает вероятность, рис2 раскрывает смысл Ctn. t = 2 n = 12 Pe...

Пожалуйста подскажите с решением проблемы с окнами ошибки на Windows при выполнении скриптов
Пожалуйста посоветуйте какой командой системного администрирования(bat) можно скрывать сообщения...

Подскажите с решением.
Задача на Паскаль. Дана непустая последовательность из строчных букв, между соседними словами...

Подскажите с решением
помогите с решением 7,8. 12или 13


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru