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

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

Войти
Регистрация
Восстановить пароль
 
Kostyas13994
2 / 2 / 0
Регистрация: 14.12.2012
Сообщений: 22
#1

Перевод римских чисел в арабские - C++

27.12.2012, 22:50. Просмотров 969. Ответов 6
Метки нет (Все метки)

Доброй ночи всем.
Нужны наиболее рациональные и простые в реализации идеи для решения задачи.
Дан текст из заглавных латинских букв за которым следует пробел. Требуется определить, является ли этот текст правильной записью римскими цифрами числа от 1 до 999, и, если является, распечатать его арабскими цифрами.

Была мысль сделать 1000 строк case, но, сами понимаете.
Как реализовать?
Понимаю, что первый символ строки должен быть X/I/M/D/C/V/L - ничего не пропустил?
А вот дальше как? Каждый символ проверять?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 22:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод римских чисел в арабские (C++):

Перевод римских чисел в арабские и наоборот - C++
Я в Си программирую недавно, помогите пожалуйста решить.... Разработать программу для перевода чисел, записанных римскими цифрами в...

Перевод римских цифр в арабские - C++
Нужно написать программу перевода римских чисел в арабские. Есть эта программа на c#, но нужна на c++. Помогите пожалуйста, горю! Вот эта...

Из римских чисел в арабские в файле - C++
Здравствуйте. Дана задача - в данном тексте заменить все римские числа на арабские. Вот я и не могу понять, каким образом в файловом потоке...

Перевод римские цифры в арабские и обратно - C++
Помогите решить задачу на C++ перевод римские цифры в арабские и обратно. PLEASE.

Проверрка ввода римских чисел - C++
Нужна проверка ввода римских чисел в калькуляторе Калькулятор готов, а вот как проверку ввода организовать не знаю

Арабские в римские - C++
Нужно написать прогу которая будет переводить арабские числа в римские В ходе поисков по форуму нашёл такую информацию #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 543
27.12.2012, 22:59 #2
не совсем понял. Дана строка и в ней только римские цифры? Или могут быть слова и пр?
0
Kostyas13994
2 / 2 / 0
Регистрация: 14.12.2012
Сообщений: 22
27.12.2012, 23:03  [ТС] #3
Afflicted, в строке буквы латинского алфавита в произвольном порядке, без разделителей, только пробел в конце. Нужно определить, является ли этот произвольный порядок букв числом в римской записи
Примеры:
1. XII //вот строка, она является записью числа 12
2. XIIO //и вот строка, но она уже не будет являться записью числа, т.к. О не входит в запись римских чисел
0
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 543
27.12.2012, 23:15 #4
ну вот так:

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
#include <iostream>
using namespace std;
 
int const  arab_[]   = {  1,   4,    5,   9,    10,  40,  50,   90,  100, 400,  500, 900,  1000};
char const *roman_[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
 
inline size_t translate(char *roman)
{
    const int m = countof(arab_)-1;
    size_t arab = 0;
    int len = strlen(roman), n = m, i = 0, pir;
 
    while(n >= 0 && i < len)
    {
        pir = n & 1;
        if( (roman[i] == roman_[n][0]) && (!pir || roman[i+1] == roman_[n][1]))
        {
            arab += arab_[n];
            i    += 1 + pir;
        }
        else n--;
    }
 
    return arab;
}
 
int main()
{
    char *str1 = "XII", *str2 = "XIO";
    cout << translate(str1) << endl << translate(str2) << endl;
 
    system("pause");
    return 0;
}
0
Kostyas13994
2 / 2 / 0
Регистрация: 14.12.2012
Сообщений: 22
27.12.2012, 23:29  [ТС] #5
Afflicted, ругается на const int m = countof(arab_)-1;
что подключить нужно?
0
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 543
27.12.2012, 23:30 #6
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
 
#ifndef countof
    #define countof(array) (sizeof(array) / sizeof((array)[0]))
#endif
 
int const  arab_[]   = {  1,   4,    5,   9,    10,  40,  50,   90,  100, 400,  500, 900,  1000};
char const *roman_[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
 
//...
1
Kostyas13994
2 / 2 / 0
Регистрация: 14.12.2012
Сообщений: 22
27.12.2012, 23:32  [ТС] #7
Afflicted, работает, спасибо. Завтра додумаю, а сейчас собираюсь вспомнить, что такое сон. Большое спасибо за помощь!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2012, 23:32
Привет! Вот еще темы с ответами:

Перевод чисел из строки в массив чисел - C++
Задача: Ввод: Во входном файле содержится несколько (до 1000) строк, в каждой строке задается одно целое число от 6 до 1000000. Конец...

преобразовать арабские числа в римские - C++
Ниже дан код, чтоб преобразовать арабские числа в римские! Не могли бы вы помочь и добавить сюда обратное преобразование? то есть если...

Печать римских цифр - C++
Друзья, помогите, пожалуйста. Второе задания

Нужно перевести римские цифры в арабские - C++
Дан текст из заглавных латинских букв, за которым следует пробел. Определить, является ли этот текст правильной записью римскими цифрами...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.12.2012, 23:32
Ответ Создать тему
Опции темы

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