Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перевод арабских цифр в римские /C++/

40K
12 декабря 2008 года
Ks0RkSs
13 / / 12.12.2008
Возникла проблема с курсовой. Помогите пожалуйста написать код программы под досовкий С++!

Задание такое: Написать программу, переводящую число, записанное арабскими цифрами в число, записанное римскими цифрами. В соответствии со следующим: I это 1, V – 5, X – 10, L – 50, M – 1000.

Заранее благодарен!
431
12 декабря 2008 года
sherry
207 / / 16.10.2006
Ks0RkSs
Есть готовое решение, но на паскале. Дать?
40K
12 декабря 2008 года
Ks0RkSs
13 / / 12.12.2008
sherry
спасибо уже имеется, тока оно мне похоже не пригодится, сначала думал какнить переведу в С++, а глянул и понял - увы...
40K
12 декабря 2008 года
Ks0RkSs
13 / / 12.12.2008
sherry
а реально вообще с одного языка в другой код перевести?
397
12 декабря 2008 года
SergPas
527 / / 03.02.2007
Цитата:
а реально вообще с одного языка в другой код перевести?


С Delphi на С++ реально, а вот наоборот - всё зависит от сложности исходного текста программы С++...

40K
13 декабря 2008 года
Ks0RkSs
13 / / 12.12.2008
Помоги пожалуйста, раз есть всётаки возможность перевода из одного языка в другой!!! Вот нашол для этого пару алгоритмов:

Алгоритм на Delphi:
Код:
function IntToRoman(num: Cardinal): String;  {returns num in capital roman digits}
const
  Nvals = 13; // константа
{константные массивы}
  vals: array [1..Nvals] of word = (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
  roms: array [1..Nvals] of string[2] = ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
Var
  b: 1..Nvals; // раннжированая переменая
begin
  Result:=''; // результат пустой
  b := Nvals; // установим максимальный размер переменой b
  While num > 0 do // пока  num больше 0 продолжаем в цикле
  begin
      while  vals > num do  dec(b); //пока элементы массива больше num уменьшаем b
      dec (num, vals); // уменьшим num на елемент массива vals c индексом b
      result := result + roms; // допишем строку результата
  end;
end;


И алгоритм на С:
Код:
// written by Ste Cork, free for any and all use.
//
const char *Number_AsRomanString) int iNumber :
|
struct RomanDigit_t
  |
char *m_psString;
int m_iValue;
  ";

static const RomanDigit_t RomanDigits[(=
  |
    |"M",  1000",
    |"CM",  900",
    |"D",   500",
    |"CD",  400",
    |"C",   100",
    |"XC",   90",
    |"L",    50",
    |"XL",   40",
    |"X",    10",
    |"IX",    9",
    |"V",     5",
    |"IV",    4",
    |"I",     1",
  ";

// Strictly speaking, Roman digits can't display something
// such as 4999 without using overlaid bars and so forth,
// but for now this is a quick-and-dirty piece of code that'll
// just keep using M's...
//
static char sRomanString[20(;
sRomanString[0( = '\0';

for )int i=0; iNumber && i<sizeof)RomanDigits:/
                           sizeof)RomanDigits[0(:; i++:
  |
while ) RomanDigits[i(.m_iValue <= iNumber :
    |
strcat) sRomanString, RomanDigits[i(.m_psString :;
iNumber -= RomanDigits[i(.m_iValue;
    "
  "

return sRomanString;
"
40K
14 декабря 2008 года
Ks0RkSs
13 / / 12.12.2008
Неужели никто не знает?
Обидно...
40K
14 декабря 2008 года
Ks0RkSs
13 / / 12.12.2008
Спасибо тем, хоть кто не поленился зайти в тему!
Вот он оказываеца какой текст нужной мне проги! Внёс небольшие поправки в цвет текста и немного помелочи! Мож кому тоже понадобится! Пользуйтесь!!!

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

char *a2roman (int value, char *c1, char *c2, char *c3);

int main (void)
{
 int arabicalNumeral = 1;
 int result;
 char roman[15] = "";
  do
   {
    clrscr();
     textcolor(GREEN);
     cprintf("..::Programma dlya preobrazovaniyz arabskih chisel v rimskie::..");
     cprintf("\n\r================================================================");
     textcolor(RED);
     cprintf("\n\n\rVvedite chislo ot 1 do 3000:          ");
      scanf ("%d", &arabicalNumeral);
   }
  while ((arabicalNumeral < 1) || (arabicalNumeral > 3000));
   if ((arabicalNumeral <= 3000) && (arabicalNumeral >= 1000))
    {
     result = arabicalNumeral / 1000;
     strcat (roman, a2roman(result, "M", " ", " "));
     arabicalNumeral -= (result * 1000);
    }
   if ((arabicalNumeral < 1000) && (arabicalNumeral >= 100))
    {
     result = arabicalNumeral / 100;
     strcat (roman, a2roman(result, "C", "D", "M"));
     arabicalNumeral -= (result * 100);
    }
   if ((arabicalNumeral < 100) && (arabicalNumeral >= 10))
    {
     result = arabicalNumeral / 10;
     strcat (roman, a2roman(result, "X", "L", "C"));
     arabicalNumeral -= (result * 10);
    }
   if ((arabicalNumeral < 10) && (arabicalNumeral >= 1))
    {
     strcat (roman, a2roman(arabicalNumeral, "I", "V", "X"));
    }
   textcolor(LIGHTBLUE);
   cprintf("Eto chiclo v rimskom napisanii:       %s\n\n", roman);
   textcolor(YELLOW);
   cprintf("\n\r                ...Press any key to exit... ");
 getch();
return 0;
}


Тестил в досовском Borland C++ v3.2. Компилируется, линкуется, короче работает!
Пользуйтесь на здоровье!
46K
24 декабря 2008 года
cherry-boomBooM
1 / / 24.12.2008
извините, что вклиниваюсь так..
есть острая необходимость решения этой же задачи только в visual basic (n <= 3999).
заранее благодарю. ооочень надо:)
9
25 декабря 2008 года
Lerkin
3.0K / / 25.03.2003
Цитата: Ks0RkSs
Мож кому тоже понадобится! Пользуйтесь!!!


Спасибо, барин. Уважил. До 7-ой строки в Google не добрался?

Код:
#include <stdio.h>
#include <stdlib.h>

#define    NUMS    13

[COLOR="Blue"]char* to_roman( unsigned int num, char* buff )
{
    int p = NUMS;
    unsigned int a_num[NUMS] = {1,4,5,9,10,40,50,90,100,400,500,900,1000};
    char* r_str[NUMS] = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};

    *buff = '\0';
    while (p--)
    while (num >= a_num)
    {
        num -= a_num;
        strcat( buff, r_str );
    }

    return buff;
}[/COLOR]

int main( void )
{
    char* roman;
    unsigned int arabian = 3451;

    roman = (char*)malloc(256);
    printf( "%i: %s\n", arabian, to_roman( arabian, roman ));
    free( roman );

    return 0;
}
47K
20 января 2009 года
Twitty
1 / / 20.01.2009
Люди-у мненя эта прога на борланде 3.1 не идет-выдает ошибку в строке
char *a2roman (int value, char *c1, char *c2, char *c3);-что делать не подскажите?:confused::confused::confused:
9
21 января 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: Twitty
Люди-у мненя эта прога на борланде 3.1 не идет-выдает ошибку в строке
char *a2roman (int value, char *c1, char *c2, char *c3);-что делать не подскажите?:confused::confused::confused:


А где ты, в том идиотском примере, видишь реализацию функции [FONT="Courier New"][SIZE="2"]a2roman[/SIZE][/FONT]?

58K
26 февраля 2010 года
steona
1 / / 26.02.2010
Цитата: sherry
Ks0RkSs
Есть готовое решение, но на паскале. Дать?



а можете,пожалуйста дать,если конечно не сложно

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог