Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 20:43   #1
ПаЗитиФкА
 
Регистрация: 17.11.2011
Сообщений: 6
По умолчанию доработка кода на римскую систему счисления

Ввести число римскими цифрами (менее 4000 в арабской записи), учитывая следующие обозначения:
I - 1, V - 5, X - 10, L - 50, C - 100, D - 500, M - 1000.
Проверить правильность ввода исходных данных и напечатать это число арабскими цифрами.

у меня получилось как-то вот так (С++):
Код:
#include <string.h> 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main ()
{
     char s[256], m;
        int n, c, c1, i, a, k;
        
        printf("Vvedite chislo: ");
        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')) exit (0);}; 
        
        for (i = 0, c = 0, n = 0; i < k; i++)
        {
                c1 = c;
                
                if (s[i] == 'I')
                        c = 1;
                        
                if (s[i] == 'V')
                        c = 5;
 
                if (s[i] == 'X')
                        c = 10;
 
                if (s[i] == 'L')
                        c = 50;
 
                if (s[i] == 'C')
                        c = 100;
 
                if (s[i] == 'D')
                        c = 500;
 
                if (s[i] == 'M')
                        c = 1000;
 
                if (c > c1)
                        a = -2 * c1;
                else
                    a = 0;
 
                n = n + a + c;
        }
 
        printf("Vashe chislo: %d", n);
        getch();
        return 0;
}
Но. Непонятно как исключить из этого запись вида IIII (там же не должно быть повторение четырех одинаковых символов подряд), запись вида IIX (левее большего значения может стоять только одна I) и запись вида XIXX (символ I, стоящий перед большим, может быть только предпоследним в строке, а последним должен быть символ больший I и только один).

Кому не сложно, помогите пожалуйста. Желательно доработать этот код))
Заранее спасибо!

Последний раз редактировалось ПаЗитиФкА; 12.12.2011 в 20:59.
ПаЗитиФкА вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевода целого числа в римскую систему счисления enternity Помощь студентам 2 17.10.2011 01:37
Кнопка для калькулятора из 10-й в 16-ую систему счисления. iron_cross Помощь студентам 6 21.12.2010 12:00
перевод из 10-тичной в 11-ричную систему счисления metallldoctor Помощь студентам 0 11.03.2010 13:51
Перевод вещественного числа из 10 в 2 Систему счисления. [С++] Veselyn Помощь студентам 9 17.01.2010 00:39