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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2010, 17:28   #1
Loka
Пользователь
 
Регистрация: 02.12.2010
Сообщений: 15
Вопрос переделать программу с C# на С++

Помогите пожалуйста переделать программу с C# на С++
программа перевода числа из римской СС в арабскую десятичную СС

вот код на шарпе:

int[] mas1 = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; // Массив со значениями в арабской
string[] mas2 = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; // Их эквивалент в римской
Console.Write("Введите число в римской системи счисления = ");
String n = Convert.ToString(Console.ReadLine() ); // Вводим с консоли и переводим строку символы
int i, s, f, j;
f = n.Length; // Определяем длину строки
i = 0; s = 0; j = 2;
while (n.Length > 0) //крутим цикл пока длина строки больше нуля
{
if (f == 1) j = 1;
if (i == 13) { j = 1; i = 0; }
if (mas2[i] == n.Substring(0, j)) // Сравниваем элемент из масива римских с выделяем из строки n, j - элементов
{
s = s + mas1[i]; // берем из массива арабского c i индексом элемент и сохраняем сумму
n = n.Remove(0, j); // удаляем из строки эти символы(что бы еще раз не считать)
i = 0;
j = 2; // по умолчанию два символа
f = n.Length; // сохраняем текущий длину строки
}
else i++;
}
Console.Write("Арабская десятичная система = ");
Console.Write(s);
Console.ReadLine();

Я с С# дружу,а плюсы только начала учить,помогите пожалуйста.
Loka вне форума Ответить с цитированием
Старый 02.12.2010, 17:42   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
//MS VS
#include "stdafx.h"
#include <iostream>
#include <string>
 
int get_arab_num(std::string rom_str)
{
    int res = 0;
    for(size_t i = 0; i < rom_str.length(); ++i)
    {
        switch(rom_str[i])
        {
        case 'M': 
            res += 1000;
            break;
        case 'D': 
            res += 500;
            break;
        case 'C':
            i + 1 < rom_str.length() 
                    &&  (rom_str[i + 1] == 'D' 
                         || rom_str[i + 1] == 'M') ? res -= 100 : res += 100;            
            break;
        case 'L': 
            res += 50;
            break;
        case 'X': 
            i + 1 < rom_str.length() 
                    &&  (rom_str[i + 1] == 'L' 
                         || rom_str[i + 1] == 'C') ? res -= 10 : res += 10;            
            break;
        case 'V': 
            res += 5;
            break;
        case 'I': 
            i + 1 < rom_str.length() 
                    &&  (rom_str[i + 1] == 'V' 
                         || rom_str[i + 1] == 'X') ? res -= 1 : res += 1;            
            break;
 
        }//switch
    }//for
    return res;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string s;
    for(;;)
    {
        std::cout << "input roman num: ";
        std::cin >> s;
        std::cout 
            << "arab num = "
            << get_arab_num(s)
            << std::endl
            << std::endl;
    }
        return 0;
}
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 02.12.2010, 17:46   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Примерно так:
Код:
#include <iostream>
#include <string>

using namespace std;

int main()
{
	int mas1[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; // Массив со значениями в арабской
	string mas2[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; // Их эквивалент в римской 
	cout<<"Введите число в римской системи счисления = ";
	string n; // Вводим с консоли и переводим строку символы
	cin>>n;
	int i, s, f, j;
	f = n.length(); // Определяем длину строки
	i = 0; s = 0; j = 2;
	while (n.length() > 0) //крутим цикл пока длина строки больше нуля
	{
		if (f == 1) j = 1;
		if (i == 13) { j = 1; i = 0; } 
		if (mas2[i] == n.substr(0, j)) // Сравниваем элемент из масива римских с выделяем из строки n, j - элементов
		{
			s = s + mas1[i]; // берем из массива арабского c i индексом элемент и сохраняем сумму
			n = n.erase(0, j); // удаляем из строки эти символы(что бы еще раз не считать) 
			i = 0;
			j = 2; // по умолчанию два символа
			f = n.length(); // сохраняем текущий длину строки
		}
else i++;
}
cout<<"Арабская десятичная система = "<<s;
cin>>i;
}
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 02.12.2010, 17:46   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Лишнее сообщение
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 03.12.2010, 23:25   #5
Loka
Пользователь
 
Регистрация: 02.12.2010
Сообщений: 15
По умолчанию

Спасибо!
Loka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделать программу из 32 в 16 бит Crazy_Gamer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.05.2010 12:30
нужно переделать программу Real7 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 24.12.2009 16:43
Помогите переделать программу. Valentin49 Помощь студентам 1 26.03.2009 13:58
Нужно переделать программу? bamer Фриланс 6 28.12.2008 17:12