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

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

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

Восстановить пароль
Повторная активизация e-mail

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

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

Разработать прогу для перевода римских цифр.
Записать исходные данные и результаты в текстовый файл. (L-50, C-100, D-500, M-1000)
Наверное через case,но не пойму как реализовать,помогите пожалуйста.
phreaker228 вне форума Ответить с цитированием
Старый 31.05.2011, 12:34   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

phreaker228

конвертация римских цифр в арабские.
осталось только прикрутить ввод-вывод в файл.

Код:
#include <string>
#include <iostream>

#include <boost/spirit/home/qi.hpp>
#include <boost/spirit/home/phoenix.hpp>

namespace qi = boost::spirit::qi;

struct Numbers : qi::symbols<char, unsigned>
{
    Numbers()
    {
        add
            ("I", 1)
            ("II", 2)
            ("III", 3)
            ("IV", 4)
            ("V", 5)
            ("VI", 6)
            ("VII", 7)
            ("VIII", 8)
            ("IX", 9)
        ;
    }
} ones;

struct Tens : qi::symbols<char, unsigned>
{
	Tens()
	{
		add
			("X", 10)
			("XX", 20)
			("XXX", 30)
			("XL", 40)
			("L", 50)
			("LX", 60)
			("LXX", 70)
			("LXXX", 80)
			("XC", 90)
			;
	}
} tens;

struct Hundreds : qi::symbols<char, unsigned>
{
	Hundreds()
	{
		add
			("C", 100)
			("CC", 200)
			("CCC", 300)
			("CD", 400)
			("D", 500)
			("DC", 600)
			("DCC", 700)
			("DCCC", 800)
			("CM", 900)
			;
	}
} hundreds;

template <typename Iterator>
struct grammar : qi::grammar<Iterator, unsigned()>
{
    grammar() : grammar::base_type(start)
    {
        start = qi::eps         [qi::_val = 0] >>
            (
                +qi::lit('M')   [qi::_val += 1000]
                ||  hundreds    [qi::_val += qi::_1]
                ||  tens        [qi::_val += qi::_1]
                ||  numbers     [qi::_val += qi::_1]
            )
        ;
    }

    qi::rule<Iterator, unsigned()> start;
	Numbers numbers;
	Tens tens;
	Hundreds hundres;
};

unsigned roman_convert(const std::string& s)
{
	typedef std::string::const_iterator I;
	I begin = s.begin();
	
	const grammar<I> g;

	unsigned result;	
	bool ok = qi::parse(begin, s.end(), g, result);

	if (!(ok && begin == s.end()))
		throw std::runtime_error("Invalid roman number");

	return result;
}

int main()
{
    const std::string s = "MCMXC";

	std::cout << roman_convert(s);

	return 0;
}
Пример работы программы: http://liveworkspace.org/code/bb4821...0ba986f39840f8
Rififi вне форума Ответить с цитированием
Старый 05.06.2011, 14:32   #3
phreaker228
Пользователь
 
Регистрация: 31.05.2011
Сообщений: 18
По умолчанию

И в Делфи перевести)
Спасибо огромное!Вот еще вопрос..как доработать её,чтобы римские цифры конвертировались также в 8-ную и 2-ую системы счисления?
То есть она вообще должа работать: открываешь программу-она считывает из файла1 римские цифры,в программы выбираешь систему счисления,жмешь кнопку и результат выводится в файл2..Если возможно напишите код на Делфи,пожалуйста.
phreaker228 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор римских цифр ttjke Помощь студентам 3 20.04.2010 14:26
Калькулятор римских цифр ttjke Помощь студентам 2 21.03.2010 16:57
Разработать прогу осуществляющую рисование линиями! Ассемблер sergik Помощь студентам 0 20.12.2009 15:32
Assembler TASM/ Разработать прогу:разбивающую каждое слово текстовой строки на две части levis07 Фриланс 5 20.11.2009 10:34
разработать функцию, которая определяет сумму цифр целого числа IceAgainstIce Общие вопросы Delphi 5 20.11.2008 00:52