Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 18.09.2018
Сообщений: 12
1

Программа для перевода арабских цифр в римские

12.10.2018, 16:43. Просмотров 741. Ответов 1

Нужно перевести число, записанное римскими цифрами, в десятичную систему счисления, и наоборот.
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
#include <ctype.h>
#include <string.>
#include <locale.h>
#include <stdio.h>
int main()
{
    setlocale(LC_ALL, "");
    int x=1;
    while (x==1)
    {
    int choice;
    printf("Выберете желаемую операцию:\n\nПеревести десятичное число в римское - 1;\n\nПеревести римское число в десятичное - 2;\n");
    scanf("%i", &choice);
    if (choice == 1)
    {
        /*Сюда пойдет перевод из десятичной в римскую.*/
 
        getchar();
        getchar();
        return 0;
    }
    if (choice == 2)
    {
    char s[256];
        int n,c,c1,i,a,k;
 
        printf("Введите ваше число: ");
        scanf("%s", &s);
        k=strlen(s);
 
        for (i=0; i<k; i++)
        {
            if ((s[i] != 'I')  && (s[i] != 'V') && (s[i] != 'X') && (s[i] != 'L') && (s[i] != 'C') && (s[i] != 'D') && (s[i] != 'M') &&
                (s[i] != 'i')  && (s[i] != 'v')  && (s[i] != 'x')  && (s[i] != 'l')  && (s[i] != 'c')  && (s[i] != 'd')  && (s[i] != 'm')) 
            {
                printf("Некорректная запись числа. Перезапустите программу и попробуйте снова.");
                getchar();
                getchar();
                return(0);
            }
        }
        for (i = 0, c = 0, n = 0; i<k; i++)
        {
            c1 = c;
 
            if ((s[i] == 'I') || (s[i] == 'i'))
                c = 1;
            if ((s[i] == 'V') || (s[i] == 'v'))
                c = 5;
            if ((s[i] == 'X') || (s[i] == 'x'))
                c = 10;
            if ((s[i] == 'L') || (s[i] == 'l'))
                c = 50;
            if ((s[i] == 'C') || (s[i] == 'c'))
                c = 100;
            if ((s[i] == 'D') || (s[i] == 'd'))
                c = 500;
            if ((s[i] == 'M') || (s[i] == 'm'))
                c = 1000;
            if (c > c1)
                a = -2 * c1;
            else
                a = 0;
            n = n + a + c;
        }
        printf("Ваше число : %d\n", n);
        getchar();
    }
        printf("Хотите попробовать с другими числами?\nВведите 1 для продолжения, 0 для завершения:\n");
        scanf_s("%d", &x);
    }
        getchar();
        return 0;   
}
Здесь у меня получилось перевести римские в арабские, но первую часть программы не знаю как делать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2018, 16:43
Ответы с готовыми решениями:

Перевод из арабских цифр в римские
Задача состоит в следующем: Ввести с клавиатуры год, по его номеру вывести номер столетия римскими...

Перевод арабских чисел в римские
Нужна программа в С для перевода арабских чисел в римские,желательно что-то попроще.

Нужен код программы для перевода чисел с десятичной системы счисления в римские числа
нужен код простой программы с проверками на ANSI C, которая переводит числа из десятичной системы...

Программа для перевода значений температуры
Написать программу для перевода значений температуры, которое задано в оС для перевода в Фаренгейты...

1
5980 / 2106 / 737
Регистрация: 10.12.2010
Сообщений: 5,923
Записей в блоге: 3
17.10.2018, 15:50 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
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
#include <stdio.h>
 
#define MAX 2000
 
static int TranslateLiteral(const char literal)
{
    switch (literal)
    {
        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;
        default:
            return -1;
    }
}
 
int RomanToArabic(const char* s)
{
    int result = 0;
    int last = MAX;
 
    while (*s != '\0')
    {
        int current = TranslateLiteral(*s);
 
        if (current > last)
        {
            result = result + (current - 2 * last);
        }
        else
        {
            result = result + current;
        }
 
        last = current;
 
        s++;
    }
 
    return result;
}
 
void ArabicToRoman(int n, char* s)
{
    const int divisors[] = {1000, 900, 500, 400, 1000, 90, 50, 40, 10, 9, 5, 4, 1};
    
    const char* lookup[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
 
    int i = 0;
    while (n != 0)
    {
        while ((n / divisors[i]) != 0)
        {
            *s++ = lookup[i][0];
            if (lookup[i][1] != '\0')
            {
                *s++ = lookup[i][1];
            }
            n = n - divisors[i];
        }
        i++;
    }
    *s = '\0';
}
 
int main(void)
{
    char s1[32] = "MCMLXXVII";
    char s2[32];
 
    int n = RomanToArabic(s1);
 
    ArabicToRoman(n, s2);
 
    printf("%d, '%s'\n", n, s2);
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2018, 15:50

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

Программа для перевода из десятичной в двоичною!
Реализуйте две отдельные функции: 1 - для перевода из десятичной в двоичную 2 - из десятичной в...

Программа для перевода латиницы в бинарный код
Всем привет! Столкнулся с проблемой, надо написать программу которая будет переводить латиницу в...

Программа для перевода в любую систему счисления
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; main() { int n; const...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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