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

Перевод с арабской на римскую сс и наоборот - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Qukish
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 10
06.12.2012, 17:40     Перевод с арабской на римскую сс и наоборот #1
не могу составить программу перевода с арабской на римскую сс.
Помогите плиз.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Qukish
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 10
06.12.2012, 17:48  [ТС]     Перевод с арабской на римскую сс и наоборот #2
Только нужно что бы любое число переводило до 500
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
06.12.2012, 18:48     Перевод с арабской на римскую сс и наоборот #3
Блин, пришлось повозиться.

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
#include <sstream>
#include <iostream>
using namespace std;
 
 
ostringstream translate(int _m)
{
    ostringstream os;
    bool m_b90 = false;
 
    if (_m > 100 && _m < 500)
    {
        for (int i=0; i < (_m - 100); i+100)
        {
            os << "C";
            _m -= 100;
        }
    }
 
    if (_m > 90 && _m < 100)
    {
        m_b90 = true;
        _m -= 90;
    }
 
    if (_m > 50 && _m < 90)
    {
        os << "L";
        _m -= 50;
    }
 
    if (_m > 10 &&_m < 40)
    {
        for (int i=0; i < (_m - 10); i+10)
        {
            os << "X";
            _m -= 10;
        }
    }
 
    if (_m > 40 && _m < 50)
    {
        os << "XL";
        _m -= 40;
    }
 
    if (_m < 0)
        _m += 10;
 
    switch(_m)
    {
        case 1:     os << "I";      break;
        case 2:     os << "II";     break;
        case 3:     os << "III";    break;
        case 4:     os << "IV";     break;
        case 5:     os << "V";      break;
        case 6:     os << "VI";     break;
        case 7:     os << "VII";    break;
        case 8:     os << "VIII";   break;
        case 9:     os << "IX";     break;
        case 10:    os << "X";      break;
        case 40:    os << "XL";     break;
        case 50:    os << "L";      break;
        case 90:    os << "XC";     break;
        case 100:   os << "C";      break;
 
        default: os << "Value not found"; break;
    }
 
    if (m_b90)
        os << "C";
 
    return os;
}
 
int main()
{
    int _m;
    cin >> _m;
 
    cout << translate(_m).str() << endl;
 
    system("pause");
    return 0;
}
Qukish
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 10
06.12.2012, 19:12  [ТС]     Перевод с арабской на римскую сс и наоборот #4
Прога не запускается на dev c++
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
06.12.2012, 19:13     Перевод с арабской на римскую сс и наоборот #5
Писал на MVS 10 Ultimate - все отлично работает.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 08:13     Перевод с арабской на римскую сс и наоборот #6
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
#include <string.h>
#include <stdio.h>
 
const int   arabar[]  = {  1,   4,    5,   9,    10,  40,  50,   90,  100, 400,  500, 900,  1000};
const char *romanar[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
 
char *arab2roman(unsigned short int arab) {
        static char roman[80];
        const int m = sizeof(arabar)/sizeof(int)-1, arabmax=arabar[m];
        const char romanmax=romanar[m][0];
        int i, n;
        if(!arab) {
                *roman=0;
                return roman;
        }
        i=0;
        while(arab>arabmax) {
                roman[i++] = romanmax;
                arab      -= arabmax;
        }
        n=m;
        while(arab > 0) {
                if(arab >= arabar[n]) {
                        roman[i++] = romanar[n][0];
                        if(n&1)
                                roman[i++] = romanar[n][1];
                        arab -= arabar[n];
                } else
                        n--;
        }
        roman[i]=0;
        return roman;
}
 
unsigned short int roman2arab(char *roman) {
        const int m = sizeof(arabar)/sizeof(int)-1;
        unsigned short int arab;
        int len, n, i, pir;
        len=strlen(roman);
 
        arab=0;
        n=m;
        i=0;
        while(n >= 0 && i < len) {
                pir=n&1;
                if(roman[i] == romanar[n][0] && (!pir || roman[i+1] == romanar[n][1])) {
                        arab += arabar[n];
                        i    += 1+pir;
                } else
                        n--;
        }
        return arab;
}
 
int main() {
    printf(arab2roman(8000));
}
Нашел такой код)))
Yandex
Объявления
07.12.2012, 08:13     Перевод с арабской на римскую сс и наоборот
Ответ Создать тему

Метки
арабской, наоборот, перевод, римскую
Опции темы

Текущее время: 06:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru