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

задача на римскую систему счисления - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вектор векторов http://www.cyberforum.ru/cpp-beginners/thread401670.html
Хочу создать вектор, содержащий векторы, которые содержат строки. Написал такой код: #include <iostream> #include <vector> using namespace std; typedef vector<string> vector_string; int main () {
C++ ошибка при компиляции перенес программу с другого компа и столкнулся со следующими ошибками(см. изображение). попробывал скачать библиотеку graphics.h для dev-cpp и чувствую что нужно что то еще.... Подскажите пожалуйста как исправить эти ошибки, какую библиотеку подключить? среда: Visual C++ 6.0 http://www.cyberforum.ru/cpp-beginners/thread401668.html
C++ Файлы: Определить команды, занявшие первые 3 места и 3 последние
Дан файл, содержащий результаты розыгрыша футбольного чемпионата. Определить команды занявшие первые 3 места и 3 последние.
C++ Помогите разобраться с задачей....
Дорогие программисты прошу вас помочь в следующем вопросе: мне нужно открыть в С++ файл формата BMP и получить значение его пикселей в виде матрицы для дальнейшей обработки.
C++ Компиляция (gcc) http://www.cyberforum.ru/cpp-beginners/thread401639.html
Добрый вечер! После компиляции текстовый файл становится вдруг двоичным, как следствие его невозможно открыть для исправлений. Почему? #include <stdio.h> struct klass { char fam; int mark; float nomer; }; int main (void)
C++ Скроллинг! Такой вопрос - После создания скроллинга как его можно связать с загруженным в ресурсы bitmap в с++ API!?!? Добавлено через 3 часа 5 минут Новый вопрос на туже тематику http://s2.ipicture.ru/uploads/20111208/DXaSvM4J.png Как можно этого избежать! Скроллинг вечно перерисовывается! подробнее

Показать сообщение отдельно
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
09.12.2011, 06:22     задача на римскую систему счисления
не претендую на оригинальность решения. просто понравилась ваша задача и решил попробовать.
заметка. к исключением которые вы предлагаете я добавил еще и VX, LC и DM. Думаю такого тоже не может быть
результат получился такой:
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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
bool isCorrectLetter(const char &letter) {    //проверка символов
    const int size = 7;
    char mySymbols[size] = { 'I', 'V', 'X', 'L', 'C', 'D', 'M' };
    for (int i = 0; i < size; ++i) {
        if (letter == mySymbols[i]) {
            return true;
        }
    }
    return false;
}
 
//првоерка последовательности
bool isCorrectSequence(const char &previous, const char &next, int &recurrence) {
    if (next == previous && (previous == 'L' || previous == 'D' || previous == 'V')) {
        return false;
    }
    if (recurrence == 3 && (next == 'X' || next == 'C' || next == 'M' || next == 'I')) {
        return false;
    }
    if ((next == 'X' && previous == 'V') || (next == 'C' && previous == 'L') || (next == 'M' && previous == 'D')) {
        return false;
    }
 
    return true;
}
 
 
//конвертация из риских в арабские
int getArabNumber(const char &rimNumber){
    switch(rimNumber){
    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;
    }
    return 0;
}
 
 
//вычесление результата
int calculation(const char array[], const int &count){
    int res = 0;
    int prev = 0, next;
    for(int i=count; i >= 0; --i){
        next = getArabNumber(array[i]);
        if(prev > next){
            res = (res - prev) + (prev - next);
        } else {
            res +=next;
        }
        prev = next;
 
    }
    return res;
}
 
int main() {
    const int size = 256;
    char s[size], next, previous;
    int i, recurrence = 0;
    bool isCorrect = true;
 
    cout << "PLEASE ENTER THE ROMAN NUMERAL ::\n>";
    for (i = 0; (next = cin.get()) != '\n'; ++i) {
        if (i == 0) {
            s[i] = next;
            previous = next;
        } else {
            if (previous == next)
                recurrence++;
            else
                recurrence = 0;
            if (isCorrectLetter(next) && isCorrectSequence(previous, next, recurrence)) {
                s[i] = next;
                previous = next;
            } else {
                isCorrect = false;
                break;
            }
        }
    }
    if (!isCorrect || (s[i - 3] == 'I' && s[i - 2] != 'I')) {
        cout << "Provided number is not correct";
    } else {
        cout << "Provided number is correct :: " << s << endl;
        cout << "COnverted result           :: " << calculation(s, i-1);
    }
 
 
    cin.get();
    return 0;
}
 
Текущее время: 01:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru