С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.10.2022
Сообщений: 3

Перевод Арабских чисел в Римские

19.10.2022, 13:13. Показов 618. Ответов 7

Студворк — интернет-сервис помощи студентам
Сделал программу которая из арабских чисел делает римские, ошибок нет,но программа не работает. Что не так?
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
#include <iostream>
#include <math.h>
#include <conio.h>
 
using namespace std;
 
int main(int argc, char *argv[]){
 
 
int chislo;
int i;
do{
    cin>>chislo;
}while(chislo<1, chislo>3999);
char rim[][3]= {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int arab[]={   1000, 900,  500,  400, 100, 90,    50,   40, 10,    9,    5,   4,   1};
for(i=0; i<13; i++){
    while ( chislo - arab[i] >=0 ){
        cout<<rim[i];
        chislo-= arab[i];
    }
}
cout<<endl;
system ("pause");
 
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2022, 13:13
Ответы с готовыми решениями:

Перевод арабских чисел в римские
вообщем задание такое: написать код который из простых чисел преобразовал бы в римские, и потом можно было бы с ними делать простые...

Перевод арабских чисел в римские
Всем привет. Не получается решить задачу в С++ Кто может помогите если не сложно;. Для записи римскими цифрами используются...

Перевод чисел из арабских в римские. Пределы int
Есть программа: #include &lt;stdio.h&gt;; #include &lt;conio.h&gt;; int roman(int,int,char); main() { int a,z; clrscr(); while (z!=1){ ...

7
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,237
19.10.2022, 13:19
C++
1
#include <cmath>
на плюсах прикладывается.
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
19.10.2022, 13:28
Цитата Сообщение от f1d Посмотреть сообщение
(chislo<1, chislo>3999)
wtf
Цитата Сообщение от f1d Посмотреть сообщение
#include <math.h>
#include <conio.h>
и это незачем

Добавлено через 26 секунд
Цитата Сообщение от f1d Посмотреть сообщение
int argc, char *argv[]
это тоже никак не используется

Добавлено через 1 минуту
Цитата Сообщение от f1d Посмотреть сообщение
ошибок нет
скорее всего компилятор просто не обучен выдавать ошибки, хотя кнчн как он скомпилировал 14-ю строку для меня загадка

Добавлено через 31 секунду
Цитата Сообщение от f1d Посмотреть сообщение
не работает
более полно опишите как она не работает, а то абстрактно как-то
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,237
19.10.2022, 13:35
Запятая в while - недопустимо, вот так
C++
1
while((chislo<1)||(chislo>3999));
Добавлено через 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
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
int is_correct_input(char *str)
{
    while(*str)
    {
        if(*str!='I' &&
           *str!='V' &&
           *str!='X' &&
           *str!='L' &&
           *str!='C' &&
           *str!='D' &&
           *str!='M') return 0;
    str++;
    }
    return 1;
}
 
int convert(char *str)
{
    int length = 0;
    while(*str)
    {
        str++;
        length++;
    }
 
    int active=0, next=0;
    switch(*str)
    {
        case 'I': {active=1;break;}
        case 'V': {active=5;break;}
        case 'X': {active=10;break;}
        case 'L': {active=50;break;}
        case 'C': {active=100;break;}
        case 'D': {active=500;break;}
        case 'M': {active=1000;break;}
        default: break;
    }
 
    int result = active;
    while(length>0)
    {
        switch(*(str-1))
        {
            case 'I': {next=1;break;}
            case 'V': {next=5;break;}
            case 'X': {next=10;break;}
            case 'L': {next=50;break;}
            case 'C': {next=100;break;}
            case 'D': {next=500;break;}
            case 'M': {next=1000;break;}
            default: break;
        }
        if(next < active)
            result -= next;
        else
            result += next;
        length--;
        str--;
        active = next;
    }
    return result;
}
 
int main()
{
    system("CLS");
    char input_str[20];
 
    printf("This program converts numbers from Rome to Arabian form.\n");
    printf("Some Rome digits:\n");
    printf("\nI - 1\nV - 5\nX - 10\nL - 50\nC - 100\nD - 500\nM - 1000\n");
    printf("\nPut CAPS LOCK status ON and enter a Rome number:\n");
    //window(1,13,80,18);
 
    do{
        scanf("%s",&input_str[0]);
        if(is_correct_input(&input_str[0]))
        {
            printf("%s - %d",input_str,convert(&input_str[0]));
        }
        else
        {
            printf("\nIncorrect input.");
            break;
        }
        printf("\nWant to convert once more(Y/N)?");
    }while(getche() != (int)'N');
 
    printf("\nPress any key to exit...");
    getch();
    return 0;
}
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
19.10.2022, 14:12
Цитата Сообщение от f1d Посмотреть сообщение
ошибок нет,но программа не работает. Что не так?
Эта пять!
Не так то, что приведённое утверждение - ложное. В программе, очевидно, есть ошибки, раз не работает.

Добавлено через 11 минут
Цитата Сообщение от programmer_08 Посмотреть сообщение
скорее всего компилятор просто не обучен выдавать ошибки, хотя кнчн как он скомпилировал 14-ю строку для меня загадка
Потому что запятая - нормальный разделитель в С++. Итоговое значение равно, последнему, составляющему.

Цитата Сообщение от FFPowerMan Посмотреть сообщение
Запятая в while - недопустимо,
Неправда ваша, однако.

Добавлено через 7 минут
f1d,
Для какого входного числа ваша программа дает неправильный результат?
Вроде в ней все правильно (если я все верно помню про запись арабских) (кроме мелких придирок и указанной ранее запятой)
1
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,010
19.10.2022, 14:20
Оставлю тут в качестве "шаблона" (билдер):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
String ArabicToRoman(UINT number)
{
  const count = 13;
  UINT arabic[count] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}, i, j;
  String roman[count] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}, result = "";
  for (i = 0; i < count; i++)
  {
    for (j = 0; j < number / arabic[i]; j++)
      result += roman[i];
    number %= arabic[i];
  }
  return result;
}
0
Заблокирован
19.10.2022, 15:18
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Запятая в while - недопустимо
Допустимо

Добавлено через 1 минуту
Цитата Сообщение от KSergey9 Посмотреть сообщение
Потому что запятая - нормальный разделитель в С++
это не разделитель, это оператор

Добавлено через 1 минуту
Цитата Сообщение от KSergey9 Посмотреть сообщение
если я все верно помню про запись арабских
Раньше интересовался на Вики, есть несколько разных способов римской записи числа.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
19.10.2022, 15:42
Цитата Сообщение от SmallEvil Посмотреть сообщение
это не разделитель, это оператор
Ok, в терминологии не силён.

Добавлено через 3 минуты
Дошло, да, именно оператор.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2022, 15:42
Помогаю со студенческими работами здесь

Перевод арабских цифр в римские с++
Подскажите как перевести арабские цифры в римские... Например 12345 -&gt; I II III IV V Заранее спасибо

Из арабских чисел в римские
Функция для перевода из арабских чисел в римские. Как можно заменить устаревший sprintf? string _func_arab_to_roman(int arab){ ...

Преобразование арабских чисел в римские
2. Программа для преобразования числа, введённого арабскими цифрами в римское число, и наоборот.

Из арабских чисел в римские Visual C++
Здравствуйте! =) Знаю, что тема заезжена до дыр, но ничего стоящего на с++ я не нашел. В основном все написано либо на паскале с делфи,...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru