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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
TransformatoR
7 / 7 / 0
Регистрация: 31.08.2010
Сообщений: 129
#1

Римская система счисления. - C++

31.08.2010, 21:12. Просмотров 2230. Ответов 21
Метки нет (Все метки)

Всем здравствуйте!
Очень нужна помощь в написании программы по переводу из римской системы счисления в арабскую на языке СИ.
Я в этом почти ничего не понимаю.
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2010, 21:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Римская система счисления. (C++):

Система счисления - C++
Написать программу в Delphi, обучающую переводу чисел из десятичной системы счиления в двоичную, из восьмиричной в двоичную, из...

16-ая система счисления - C++
Добрый вечер. столкнулся с проблемой: имеется char operand. Для примера он будет равен 1000. Я пeревожу в int x. А теперь надо что бы...

Система счисления - C++
Решите пожалуйста,очень нужно,а времени нету на это 1. Выполнить перевод чисел а) из 10–ой с/с в 2–ую систему счисления: 165; 541;...

Система счисления - C++
Когда делиться а когда умножаются при переводе из одной системы счисления в другую.

Фибоначчиева система счисления - C++
Помогите с кодом для перевода с десятичной в Фибоначчиеву систему счисления. Чисто теоретически понимаю как переводить а с кодом не...

Система счисления с основанием 37 - C++
Здравствуйте, уважаемые форумчане. Хочу написать программу для перевода из десятичной с.с. в с.с. с основанием 37. Только вот не пойму,...

21
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.08.2010, 22:01 #16
TransformatoR,
А что вас не устраивает? Я писал код, полностью основываясь на вашем, переделал только команды и синтаксис.

Прошу прощения, не увидел, что предыдущее сообщение не мне...
0
TransformatoR
7 / 7 / 0
Регистрация: 31.08.2010
Сообщений: 129
31.08.2010, 22:07  [ТС] #17
silent_1991,
Вот теперь всё работает, теперь буду разбираться. Спасибо большое!

Добавлено через 2 минуты
silent_1991,
Я писал это Maxwe11у, он нал мне ссылку на несколько другое решение, а вам я очень благодарен =)
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.09.2010, 08:35 #18
Если интересно мои варианты решения
Задачи для тренировки и лучшего понимания
Задачи для тренировки и лучшего понимания
0
TransformatoR
7 / 7 / 0
Регистрация: 31.08.2010
Сообщений: 129
01.09.2010, 10:07  [ТС] #19
У меня почему-то не переводит римские в арабские..

Добавлено через 6 минут
И ещё я никак не могу додуматься, как сделать на Паскаль так, чтобы он выводил ошибку при неправильном вводе римского числа, а то он все числа переводит.
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.09.2010, 11:22 #20
Что конкретно непонятно?
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
01.09.2010, 11:31 #21
TransformatoR, диржы!
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
/* Строка в верхнем регистре */
char *strToUpper(char *str){
        char *p;
        for ( p = str; *p; p++ )
                *p = toupper(*p);
        return str;
}
 
/* Удаление пробельных символов */
char *cutSpaces(char *str){
        char *head;
        char *tail;
 
        for ( head = str; isspace(*head); head++ )
                ;
        for ( tail = str + strlen(str) - 1; (tail >= head) && (isspace(*tail)); tail-- )
                ;
        *++tail = 0;
        
        return head;
}
 
/* проверка отсутствия недопустимых символов */
int validRomeNumber(char *s){
        char *rome_digits = "IVXLCDM";
        for ( ; *s; s++ )
                if ( !strchr(rome_digits, *s) )
                        return 0;
        return 1;
}
 
/* перевод в число */
int romeToInt(char *rome){
        int num_digits, result, i;
        int *arabian = NULL;
        
        /* массив из "понятных" чисел */
        num_digits = strlen(rome);
        if ( (arabian = (int*)calloc(num_digits, sizeof(int))) == NULL ){
                fprintf(stderr, "Not enough memory!\n");
                exit(1);
        }
        /* заполнение массива */
        for ( i = 0; i < num_digits; i++ ){
                switch(rome[i]){
                        case 'I' :
                                arabian[i] = 1;
                                break;
                        case 'V' :
                                arabian[i] = 5;
                                break;
                        case 'X' :
                                arabian[i] = 10;
                                break;
                        case 'L' :
                                arabian[i] = 50;
                                break;
                        case 'C' :
                                arabian[i] = 100;
                                break;
                        case 'D' :
                                arabian[i] = 500;
                                break;
                        case 'M' :
                                arabian[i] = 1000;
                                break;
                        default :
                                free(arabian);
                                arabian = NULL;
                                return -1;
                }
        }
        /* генерация числа */
        result = 0;
        i = 0;
        while ( i < num_digits ){
                if ( (i < (num_digits - 1)) && (arabian[i] < arabian[i+1]) ){
                        result += arabian[i+1] - arabian[i];
                        i += 2;
                }
                else {
                        result += arabian[i];
                        i += 1;
                }
        }
        /* освобождение массива, возвращение результата */
        free(arabian);
        arabian = NULL;
        return result;
}
        
 
int main( void ){
        char buf[BUFSIZ];
        char *num;
        
        while ( 1 ){
                printf("Enter some Rome number or 0 for exit: ");
                fgets(buf, sizeof(buf), stdin);
                if ( *buf == '0' )
                        break;
                num = strToUpper(cutSpaces(buf));
                if ( !validRomeNumber(num) )
                        printf("%s is not valid Rome number!\n", num);
                else
                        printf("%s = %d\n", num, romeToInt(num));
        }
        
        return 0;
}
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
03.09.2010, 15:06 #22
а как сделать чтобы из арабской системы обратно в римскую (там же какие-то правила перевода)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2010, 15:06
Привет! Вот еще темы с ответами:

Двоичная система счисления - C++
Всем привет.Нужна помощь.Осваиваю язык. Пытаюсь написать программу перевода в двоичную систему счисления. Что делаю не так? ...

Четверичная система счисления - C++
Как можно записать программу переводящую десятичную систему счисления в четверичную на языке Си? Добавлено через 38 минут Я нашел...

Шестнадцатеричная система счисления - C++
Возможно ли такое в шестнадцатирично системе... что значение без букв???? Так как остатки не превышали 9! Вот это число которое я переводил...

Двоичная система счисления - C++
как написать програму которая переводить цифру в двоичну систему счисления.c++


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

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

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