Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/30: Рейтинг темы: голосов - 30, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 24

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

25.04.2011, 20:16. Показов 5782. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте помогите, пожалуйста, написать программу, переводящую числа из арабской системы счисления в римскую, с помощью рекурсивного алгоритма. При этом числа пользователь вводит с клавиатуры. Данная программа должна использовать 2 массива:
int[] masD = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
string[] masR = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
заранее спасибо

Добавлено через 1 час 45 минут
вот нашла похожий вариант программы на Pascal. Осталось только перевести на c sharp

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
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
{ Copyright MM Andrew Usachov }
 
Const
 
R: Array[1..13] of String[2] =
 
('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
 
A: Array[1..13] of Integer=
 
(1,4,5,9,10,40,50,90,100,400,500,900,1000);
 
Function Roman(N : Integer) : String;
 
Var Result : String;
 
    i      : Integer;
 
begin
 
 Result := '';
 
 i := 13;
 
 While N >0 do
 
 begin
 
   While A[i] >N do Dec(i);
 
   Result := Result + R[i];
 
   Dec(N, A[i]);
 
 end;
 
 Roman := Result;
 
end;
 
Function Arabic(S : String) : Integer;
 
Var Result : Integer;
 
    i, p   : Integer;
 
begin
 
  Arabic := -1;
 
  Result := 0;
 
  i := 13;
 
  p := 1;
 
  While p <=Length(S) do
 
  begin
 
    While Copy(S, p, Length(R[i])) <>R[i] do
 
    begin
 
      Dec(i);
 
      If i = 0 then Exit;
 
    end;
 
    Result := Result + A[i];
 
    p := p + Length(R[i]);
 
  end;
 
  If Roman(Result) = S then Arabic := Result
 
end;
 
Var N, Err : Integer;
 
    S : String;
 
BEGIN
 
 repeat
 
   ReadLn(S);
 
   If S = '' then Break;
 
   Val(S, N, Err);
 
   If Err = 0 then
 
     WriteLn(Roman(N))
 
   else
 
     WriteLn(Arabic(S));
 
 until false;
 
END.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2011, 20:16
Ответы с готовыми решениями:

Перевод из арабской системы счисления в римскую
Заготовка программы: (defun ArabRim () (setf R (vector &quot;I&quot; &quot;V&quot; &quot;X&quot; &quot;L&quot; &quot;C&quot; &quot;D&quot; &quot;M&quot;)) (format t &quot;Vvedite Arab = &quot;) (setf Arab...

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

Перевод с арабской на римскую сисстему счисления
Подскажите как сделать перевод с арабских на римские числа по принципу этой программы #include &lt;string.h&gt; #include...

3
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
25.04.2011, 23:31
Код работает через раз. Но думаю что это не важно ведь я проверил Ваш код в Delphi он тоже там не всегдя результат правильный выдает.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication56
{
    class Program
    {
        static string[] R = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
        static int[] A =    { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 };
 
        public static string Roman(int N)
        {
            string result = "";
            int i;
            i = 12;
            while (N > 0) 
            {
                while (A[i] > N)  
                    i--;
                result += R[i];
                N -= A[i];
            }
            return result;
        }
 
        public static int Arabic(string S)
        {
            int result = 0, i = 12, p = 0;
            while (p < S.Length)
            {
                while (S.Substring(p, R[i].Length) != R[i])
                {
                    i--;
                    if (i == -1)
                        return -1;
                }
                result += A[i];
                p += R[i].Length;
            }
            if (Roman(result) == S) 
                return result;
            return 0;
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine(Roman(21));
            Console.WriteLine(Arabic("XX"));
            Console.ReadKey(true);
        }
    }
}
1
1 / 1 / 0
Регистрация: 17.04.2011
Сообщений: 24
26.04.2011, 01:49  [ТС]
спасибо, спасибо, спасибо
только мне с рекурсией надо было..
ну, все равно спасибо..
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
26.04.2011, 02:05
Честно говоря, я не соображу куда тут можно прикрутить рекурсию. Разве что проход по массиву. Но это тупо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2011, 02:05
Помогаю со студенческими работами здесь

Перевод из арабской системы в римскую
Здравствуйте!!!Задача:нужно написать программу перевода из арабской системы счисления в римскую систему!!!заранее спасибо за помощь!!!...

Переведите из десятичной системы счисления (арабской) в римскую числа 99, 3917
подскажите!

[Io] Перевод числа из арабской системы в римскую в цикле
Вопрос №1. Мне требуется фрагмент кода осуществляющий ввод числа с клавиатуры, с сохранением в переменной. PS Уважаемые модераторы,...

Переведите из десятичной системы счисления (арабской) в римскую числа 551, 1918
Пожалуйста подскажите!

Перевод чисел из арабской в римскую систему
Надо перевести число от 1 до 2000 из арабской системы счисления в римскую, без использования строк, но с использованием массива.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru