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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2011, 12:38   #1
phreaker228
Пользователь
 
Регистрация: 31.05.2011
Сообщений: 18
По умолчанию Римские числа в любую систему счисления

Здравстуйте,уважаемые программисты!
Мне необходимо связать два ниже приведённых кода в один,чтобы римские числа переводились в 10,8 и 2 системы счисления.Думаю,что сначала нужно римские перевести в 10-ую,а из неё потом уже в остальные,но незнаю как реализовать.Язык программирования Делфи.

Перевод римских 10-ую:
Код:
function RomanToDec(const Value: string): integer;
var
  i, lastValue, curValue: integer;
begin
  Result := 0;
  lastValue := 0;
  for i := Length(Value) downto 1 do
  begin
   case UpCase(Value[i]) of
   'C':
   curValue := 100;
   'D':
   curValue := 500;
   'I':
   curValue := 1;
   'L':
   curValue := 50;
   'M':
   curValue := 1000;
   'V':
   curValue := 5;
   'X':
   curValue := 10;
   else
   raise Exception.CreateFmt('Invalid character: %s', [Value[i]]);
   end;
   if curValue < lastValue then
   Dec(Result, curValue)
   else
   Inc(Result, curValue);
   lastValue := curValue;
  end;
end;
Перевод из 10-ой в любую:
Код:
{ Фунция представляет число Value в Base-ричной системе счисления,
  Base должно находиться в пределах [1..36] и представляется
  10-ю цифрами [0..9] и 26-ю буквами английского алфавита ['A'..'Z'] }
function Dec2X(const Value, Base: Cardinal): string;
  // Функция возвращает символ, соответствующий числу в N-ричной системе
  function GetChar(const N: Cardinal): Char;
  begin
   if N < 10 then
   // для систем счисления от 1 до 10
   Result := Char(N + Ord('0'))
   else
   // для систем счисления выше 10, но не больше 36 ([0..9] + ['A'..'Z'])
   Result := Char(N - 10 + Ord('A'));
  end;
var
  V, R: Cardinal;
begin
  Result := '';
  if Base <= 1 then
  begin
   // числа можно и в системе, состоящей из одного символа, представлять ;)
   if Base = 1 then
   begin
   // реализуем это
   SetLength(Result, Value);
   FillChar(Result[1], Value, Ord('0'));
   Exit;
   end else
   // а вот других систем счисления быть не может
   raise EConvertError.Create('Основание системы счисления должно быть больше 0');
  end else
   // ограничиваем представление систем счисления 10-ю цифрами и 26-ю буквами
   // английского алфавита
   if Base > 10 + (Ord('Z') + 1) - Ord('A') then
   raise EConvertError.Create('Основание системы счисления должно лежать в пределах от 1 до 36');
  // Выполняем преобразование в нужную систему виртуальным делением в столбик
  V := Value;
  repeat
   R := V mod Base;
   V := V div Base;
   Result := GetChar(R) + Result;
  until V < 2; // 2 - минимальная база,
   // то есть в любом случае когда-то "V div Base" будет равно 1
  if V <> 0 then Result := IntToStr(V) + Result;
end;
phreaker228 вне форума Ответить с цитированием
Старый 07.06.2011, 13:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, у Вас же всё есть!!!
Пусть в Edit1.Text правильное записанное в римской записи число
Пусть в Edit2.Text число равное основанию системы счисления, в которую надо перевести

Тогда, чтобы в Edit3.Text получить результат достаточно написать так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit3.Text := Dec2X( RomanToDec(Edit1.Text), StrToInt(Edit2.Text) );
end;
И ВСЁ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2011, 13:59   #3
phreaker228
Пользователь
 
Регистрация: 31.05.2011
Сообщений: 18
По умолчанию

Дело в том,что туда нужно исходный файл и результат записать в текстовый документ.У меня не получается с компиляцией программы,ошибки выдаёт,помогите откомпилировать пожалуйста.
phreaker228 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод целого числа из 5 в 8 систему счисления и обратно. Whitt Помощь студентам 7 08.09.2010 07:14
Перевод числа в семеричную систему счисления PastoriXx Общие вопросы .NET 5 14.05.2010 12:58
си++ перевод десячичного числа в шестнадцатиричную систему счисления Bonne Помощь студентам 0 07.05.2010 19:57
Перевод вещественного числа из 10 в 2 Систему счисления. [С++] Veselyn Помощь студентам 9 17.01.2010 00:39
написал алгоритм перевода чисел из 10 в любую другую систему счисления...компилиться, но не выполняеться STR78 Общие вопросы C/C++ 4 03.11.2008 17:07