Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.10.2012
Сообщений: 12

Конвертер чисел, из римских в арабские

13.06.2013, 13:53. Показов 3605. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с программой...
Программа, которая переводит римские цифры в арабские, а также проверяет правильность написания римского числа ( одноименных символов должно быть не более трех, учесть правила вычитания) и выдает ошибку, если введенное римское число написано не правильно. Желательно подробные комментарии в программе.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.06.2013, 13:53
Ответы с готовыми решениями:

Перевод римских чисел в арабские
Позарез как нужно! Пусть число записано римскими цифрами: М — 1000, D — 500, С — 100, L — 50, X — 10, V — 5, I — 1. Выведите его...

из римских чисел в арабские
Помогите, пожалуйста, составить программу перевода чисел из римской записи в арабскую и обратно

Перевод римских чисел в арабские
Попробывал написать программу перевода римских чисел в арабские. Выводит одновременно n=0 и ошибку при на первом же символе. Может кто...

14
SausageFlat
 Аватар для Striker
242 / 221 / 154
Регистрация: 19.08.2012
Сообщений: 499
Записей в блоге: 1
13.06.2013, 13:57
Pascal
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
var
  a: string;
  i: integer;
  b: array[1..50] of integer;
  s: longint;
 
begin
  readln(a);
  for i := 1 to length(a) do
  begin
    if not (a[i] in ['I', 'V', 'X', 'L', 'C', 'D', 'M'])
      then halt;
    if a[i] = 'I' then b[i] := 1;
    if a[i] = 'V' then b[i] := 5;
    if a[i] = 'X' then b[i] := 10;
    if a[i] = 'L' then b[i] := 50;
    if a[i] = 'C' then b[i] := 100;
    if a[i] = 'D' then b[i] := 500;
    if a[i] = 'M' then b[i] := 1000;
  end;
  s := 0;
  for i := 1 to length(a) do
  begin
    s := s + b[i];
    if(i > 1) and (b[i - 1] < b[i]) then s := s - 2 * b[i - 1];
  end;
  write(s);
end.
2
0 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 27
31.10.2013, 19:41
Можете объяснить вот эту строку
Pascal
1
2
 if not (a[i] in ['I', 'V', 'X', 'L', 'C', 'D', 'M'])
      then halt;
Особенно что делает оператор halt в этом случае?
0
SausageFlat
 Аватар для Striker
242 / 221 / 154
Регистрация: 19.08.2012
Сообщений: 499
Записей в блоге: 1
31.10.2013, 19:44
Цитата Сообщение от FOXXX Посмотреть сообщение
Можете объяснить вот эту строку
Pascal
1
2
 if not (a[i] in ['I', 'V', 'X', 'L', 'C', 'D', 'M'])
      then halt;
Особенно что делает оператор halt в этом случае?
Прекращает работу программы.
1
0 / 0 / 0
Регистрация: 28.10.2013
Сообщений: 27
31.10.2013, 19:45
спасибо
0
1 / 1 / 0
Регистрация: 30.11.2013
Сообщений: 53
12.03.2014, 19:05
Striker,как сделать: например пользователь ввел 'JOKL IX JJJU' и мне надо чтобы тоже выводило ответ 9 и т.п.
0
 Аватар для kitap
5 / 5 / 5
Регистрация: 13.03.2014
Сообщений: 46
13.03.2014, 14:53
Pascal
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
{---------------------------------------------------------------------------------------------}
Uses crt;
{---------------------------------------------------------------------------------------------}
const
Rome : array [1..13] of string = ('M','CM','P','CD','C','XC','L','XL','X','IX','V','IV','I');
Arabic: array [1..13] of integer = (1000,900,500,400,100,90,50,40,10,9,5,4,1);
{---------------------------------------------------------------------------------------------}
Var
net,i,n:integer;
buf,snumber:string;
number : String;
b: boolean;
{--------------------------------------------------------------------------------------------}
Begin
writeln('number:=');Readln(number);
 
n:=1;
while n<length(number)+1 do
            begin
            buf:=number[n]+number[n+1];
            b:=FALSE;
            for i:=1 to 13 do
                     if buf=rome[i] then begin Net:=net+Arabic[i]; n:=n+1; b:=true; end;
            if b=false then
                           begin
                           for i:=1 to 13 do
                                       if number[n]=rome[i] then Net:=net+Arabic[i];
                           end;
            n:=n+1;
            end;
 
 
  WriteLn(Net);
writeln;
end.
{--------------------------------------------------------------------------------------------}
1
3 / 3 / 0
Регистрация: 28.11.2014
Сообщений: 118
02.12.2014, 19:05
ВАША программа всегда выводит 0
0
SausageFlat
 Аватар для Striker
242 / 221 / 154
Регистрация: 19.08.2012
Сообщений: 499
Записей в блоге: 1
02.12.2014, 19:09
Продолжите скриншот и вводимые данные.
Я не экстрасенс.
0
3 / 3 / 0
Регистрация: 28.11.2014
Сообщений: 118
02.12.2014, 19:52
вообще я говорил про программу kitap, ваша программа Striker у меня вообще ничего не выводит после ввода римского числа она просто завершается...вводил ссс
0
SausageFlat
 Аватар для Striker
242 / 221 / 154
Регистрация: 19.08.2012
Сообщений: 499
Записей в блоге: 1
02.12.2014, 20:00
piercedan, уважаемый, вводить нужно с зажатой клавишей SHIFT, чтобы получился Верхний регистр.
Моя программа была написана на скорую руки и не воспринимает нижний регистр.
0
3 / 3 / 0
Регистрация: 28.11.2014
Сообщений: 118
02.12.2014, 20:18
А вы не подскажите почему у меня программа kitap выводит 0 всегда?
0
SausageFlat
 Аватар для Striker
242 / 221 / 154
Регистрация: 19.08.2012
Сообщений: 499
Записей в блоге: 1
02.12.2014, 20:30
piercedan,
Цитата Сообщение от Striker Посмотреть сообщение
вводить нужно с зажатой клавишей SHIFT, чтобы получился Верхний регистр.
Нету римский цифр в нижнем регистре.
0
3 / 3 / 0
Регистрация: 28.11.2014
Сообщений: 118
02.12.2014, 20:54
Ваша программа и kitap работают некорректно, так как при вводе она переводит число iiii, а по сути должна выдавать ошибку.
Я впринципе написал, но проблема в том что проверка на корректность у меня в функции arabictorome,нельзя ли как то упростить?
Code
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
program rome_arabic;
const
  RomeDigits: array [1..13] of string =
  ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
  ArabicNumbers: array [1..13] of integer =
  (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
var
  rome: string; 
function ArabicToRome (n: integer): string;
  var
  i: integer;
  res: string;
  begin
    res:='';
    i:=13; 
    while n>0 do begin
      while ArabicNumbers[i]>n do
        i:=i-1;
      res:=res+RomeDigits[i];
      n:=n-ArabicNumbers[i];
    end;
    ArabicToRome := res;
  end;
function RomeToArabic (s: string): integer;
var
  i, j, res: integer;
begin
  res:=0;
  i:=13;
  for j:=1 to length(s) do
    s[j]:=UpCase(s[j]);
  j:=1; 
  while j<=length(s) do begin
    while (copy(s, j, length(RomeDigits[i]))<>RomeDigits[i])and(i>0) do
      i:=i-1;
    res:=res+ArabicNumbers[i];
    j:=j+length(RomeDigits[i]);
  end;
  if ArabicToRome(res)=s then
    RomeToArabic:=res
     else
    RomeToArabic:=-1;
end;
  begin
  write('Введите римское число: ');
    readln(rome);
    if (RomeToArabic(rome)<>-1) then
  writeln('Арабское число= ',RomeToArabic(rome))
  else
  writeln('В римской записи перевод невозможен.');
end.
0
SausageFlat
 Аватар для Striker
242 / 221 / 154
Регистрация: 19.08.2012
Сообщений: 499
Записей в блоге: 1
02.12.2014, 21:12
piercedan,
программа, которую я писал, была написана буквально за 5 минут в уме. Не компилировалась и не проверялась в бою. В данный момент у меня тоже нету возможности скомпилировать Вашу программу.
Либо дождитесь завтра, я возможно буду у компьютера, либо ожидайте помощи других.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2014, 21:12
Помогаю со студенческими работами здесь

Перевод из римских чисел в арабские с проверкой корректности ввода
Надо прогу которая переводит римские цифры в арабские и проводит корректность ввода, например iiii это не правильно. Перелопатил все проги...

Перевод римских чисел в арабские
Добрый вечер. Вот такое у меня небольшое задание: Перед вами стоит задача конвертации числа из римской системы счисления в десятичную....

Перевод римских чисел в арабские
Доброй ночи всем. Нужны наиболее рациональные и простые в реализации идеи для решения задачи. Дан текст из заглавных латинских букв за...

Из римских чисел в арабские в файле
Здравствуйте. Дана задача - в данном тексте заменить все римские числа на арабские. Вот я и не могу понять, каким образом в файловом потоке...

Перевод римских чисел в арабские и наоборот
Я в Си программирую недавно, помогите пожалуйста решить.... Разработать программу для перевода чисел, записанных римскими цифрами в...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru