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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Pro_Kesha
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 6
#1

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

20.02.2014, 08:01. Просмотров 1429. Ответов 5
Метки нет (Все метки)

Всем привет. Не получается решить задачу в С++ Кто может помогите если не сложно;.

Для записи римскими цифрами используются символы I, V, X, L, C, D, M, обозначающие соответственно числа 1, 5, 10, 50, 100, 500, 1000. Составить программу, которая запись любого данного числа n ( n ≤ 3999 ) арабскими цифрами переводила бы в запись римскими цифрами.

Всем спасибо заранее!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 08:01     Перевод арабских чисел в римские
Посмотрите здесь:

Перевод арабских чисел в римские - C++
вообщем задание такое: написать код который из простых чисел преобразовал бы в римские, и потом можно было бы с ними делать простые...

Перевод чисел из арабских в римские. Пределы int - C++
Есть программа: #include <stdio.h>; #include <conio.h>; int roman(int,int,char); main() { int a,z; clrscr(); while (z!=1){ ...

Перевод арабских цифр в римские с++ - C++
Подскажите как перевести арабские цифры в римские... Например 12345 -> I II III IV V Заранее спасибо

Из арабских чисел в римские - C++
Функция для перевода из арабских чисел в римские. Как можно заменить устаревший sprintf? string _func_arab_to_roman(int arab){ ...

Из арабских чисел в римские Visual C++ - C++
Здравствуйте! =) Знаю, что тема заезжена до дыр, но ничего стоящего на с++ я не нашел. В основном все написано либо на паскале с делфи,...

Преобразование арабских чисел в римские - C++
2. Программа для преобразования числа, введённого арабскими цифрами в римское число, и наоборот.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
20.02.2014, 09:34     Перевод арабских чисел в римские #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
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
#include<iostream>
#include<string>
using std::string;
string func(int num, string, string, string);
int main(int argc, char argv[]) {
    system("chcp 1251>0");
    std::cout << "Введите число не большее 3999: ";
 
    int arabien_num;
 
    if (!(std::cin >> arabien_num) || (arabien_num > 3999)) {
        std::cerr << "Невозможно инициализировать число!" << std::endl;
        exit(1);
    }
 
    std::string rome_num;
 
    rome_num += func(arabien_num / 1000, "", "", "M");
    arabien_num %= 1000;
    rome_num += func(arabien_num / 100, "M", "D", "C");
    arabien_num %= 100;
    rome_num += func(arabien_num / 10,  "C", "L", "X");
    arabien_num %= 10;
    rome_num += func(arabien_num ,   "X", "V", "I");
    std::cout << rome_num << std::endl;
    return 0;
}
string func(int num, string hi, string re, string lo)
{
    switch(num)
    {
        case 9:
            return lo + hi;
        case 8:
            return re + lo + lo + lo;
        case 7:
            return re + lo + lo;
        case 6:
            return re + lo;
        case 5:
            return re;
        case 4:
            return lo + re;
        case 3:
            return lo + lo + lo;
        case 2:
            return lo + lo;
        case 1:
            return lo;
        case 0:
            return "";
    }
}
Pro_Kesha
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 6
21.02.2014, 11:41  [ТС]     Перевод арабских чисел в римские #3
а по проще сделать можно как нибудь? я там половину тегов не знаю. мы их не проходили ещё. Преподаватель поймет что я не сам сделал. ч/з массивы
SatanaXIII
Супер-модератор
Эксперт С++
5603 / 2637 / 242
Регистрация: 01.11.2011
Сообщений: 6,497
Завершенные тесты: 1
21.02.2014, 11:53     Перевод арабских чисел в римские #4
Ilot, а наоборот можете?
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
21.02.2014, 16:10     Перевод арабских чисел в римские #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ilot, а наоборот можете?
Да как два пальца
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<string>
#include<algorithm>
using std::string;
 
/**
*       Parser - функция для анализа строки символов
*/
 
    int Parser(string&);
 
/**
*       func - функция возвращает величину соответствующую символу в римской системе
*/
 
    int func(char);
 
int main(int argc, char argv[]) {
    system("chcp 1251>0");
    std::cout << "Введите число в римской системе: ";
 
    string word;
    string metrics("MDCLXVI");
 
    std::cin >> word;
 
    if(word.end() == std::find_first_of(word.begin(), word.end(), metrics.begin(), metrics.end(), std::not_equal_to<char>())) {
        std::cerr << "Невозможно построить выражение для анализа!" << std::endl;
        exit(1);
    }
 
    std::cout << Parser(word) << std::endl;
 
    return 0;
}
int Parser(string& word)
{
    int result = 0;
    string::reverse_iterator iter = word.rbegin();
    int msg, current_msg = func(*iter);
    while(iter != word.rend()) {
        msg = func(*iter);
        /*  В этом месте необходима проверка на корректность положения символа в числе */
        result += (msg < current_msg)? - func(*iter): func(*iter);
        std::cout << result <<std::endl;    //Отладка
        if(msg > current_msg)
            current_msg = msg;
        ++iter;
    }
    return result;
}
int func(char msg)
{
    switch(msg)
    {
        case 'I':
            return 1;
        case 'V':
            return 5;
        case 'X':
            return 10;
        case 'L':
            return 50;
        case 'C':
            return 100;
        case 'D':
            return 500;
        case 'M':
            return 1000;
    }
}

Однако здесь отсутствует проверка на корректность порядка символов в римском числе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 21:04     Перевод арабских чисел в римские
Еще ссылки по теме:

Программа перевода арабских чисел в римские - C++
Написать программу, которая переводит положительное число введено в десятичном виде в римские числа и наоборот. Объясните пожалуйста как...

Составить программы для перевода арабских чисел в римские и для обратной операции - C++
Составить программы для перевода арабских чисел в римские и для обратной операции. Например, 255 = CCLV = сто + сто + пятьдесят + пять...

Составить программу для перевода арабских чисел в римские и для зворотньох операции. Например 255 = ССЛВ = СТО + СТО + Пятьдесят + Пять - C++
Составить программу для перевода арабских чисел в римские и для зворотньох операции. Например 255 = ССЛВ = СТО + СТО + Пятьдесят + Пять ...

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

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

Рекурсивно определить количество арабских цифр в строке - C++
Описать рекурсивную подпрограмму, определяющую количество арабских цифр в данной строке.


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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5603 / 2637 / 242
Регистрация: 01.11.2011
Сообщений: 6,497
Завершенные тесты: 1
21.02.2014, 21:04     Перевод арабских чисел в римские #6
Цитата Сообщение от Ilot Посмотреть сообщение
отсутствует проверка на корректность порядка символов в римском числе
Но если он генерирует последовательность правильно, то и шут с ней, master_Ilot. Х)
Yandex
Объявления
21.02.2014, 21:04     Перевод арабских чисел в римские
Ответ Создать тему
Опции темы

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