Форум программистов, компьютерный форум, киберфорум
Наши страницы

Перевод чисел из римских в арабские и наоборот - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужна помощ с функциями в Borland C. http://www.cyberforum.ru/cpp-beginners/thread37049.html
Из-за праздников пропали пары по прогрмаированию, и одну из тем нам задали на самостоятельное изучение, тема про функции, и соответсвенно задали задание: Написать программу, содержащую функцию,...
C++ максимальный элемент В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) Номер максимального по модулю элемента массива; 2) Сумма модулей элементов массива, расположенных после первого... http://www.cyberforum.ru/cpp-beginners/thread37048.html
C++ одномерный массив
Задача 1) В одномерном массиве, состоящем из nвещественных элементов, вычислить: 1. Сумму отрицательных элементов массива. 2. Произведение элементов массива, расположенных между максимальным и...
Использование массива в функции C++
Здравствуйте! Подскажите пожалуйсто каким образом я могу при описании функции ссылаться на массив данных.
C++ Проверить, есть ли в матрице хотя бы один столбец, содержащий элемент, равный нулю, и найти его номер http://www.cyberforum.ru/cpp-beginners/thread37039.html
1)Проверить, есть ли в матрице хотя бы один столбец, содержащий элемент, равный нулю, и найти его номер. 2) Проверить, есть ли в матрице хотя бы одина строка, содержащая элемент, равный нулю, и...
C++ Вылет во время компилирования у меня проблема код компилится и хорошо все работает в Dev C++ 4.9.9.2, но не компилется в visual c++ 6.0, просто вылетает в определенный момент. Почему так может быть? Как сделать чтобы в visual... подробнее

Показать сообщение отдельно
Wold

Перевод чисел из римских в арабские и наоборот - C++

28.05.2009, 19:23. Просмотров 3318. Ответов 0
Метки (Все метки)

#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>

int AtoR(int);//прототипы функций
int RtoA(char,char);

void main()
{
SetConsoleOutputCP(1251);//подключение функции для вывода кириллицы

int Arabic,tip,i,vspomog;
char Roman[20];


cout<<"Римское->Арабское(1) Арабское->Римское(2) ";
cin>>tip;

//в зависимости от поставленной задачи выполняются различные блоки программы
if(tip==1)//1-й блок
{
cout<<"Введите римское число латиницей (заглавными буквами): ";
cin>>Roman;//римское число в виде набора символов записывается в массив

Arabic=0;//его арабскому эквиваленту изначально присваивается значение ноль

for(i=0;Roman[i]!=NULL;i++)//i увеличивается от 0 до номера элемента, которым заканчивается заполненная часть массива
{
vspomog=RtoA (Roman[i],Roman[i+1]);//в функцию передаётся i-й элемент и следующий за ним
//в переменную vspomog записывается возвращённый функцией результат, благодаря этому функция вызывается только один раз

if ((vspomog==4)||(vspomog==9)||(vspomog==40)||(vspomog==90)||(vspomog==400)||(vspomog==900))
//если функцией возвращены числа 4,9,40,90,400 или 900, это значит что были использованы сразу два символа римского числа и
//поэтому необходимо принудительно увеличить i на еденицу, чтобы 2-й элемент не учавствовал в преобразовании ещё один раз
{
i++;
}

Arabic+=vspomog;//каждый раз после выполнения функции к предыдущему значению прибавляется результат действия функции
//в итоге, после прохождения функции по всем символам римского числа Arabic будет равен арабскому эквиваленту римского числа
}

cout<<endl<<Arabic<<endl;
}

else//2-й блок
{
cout<<"Введите арабское число \n";
cin>>Arabic;//ввод арабского числа

if((Arabic<=0)||(Arabic>=4000))//арабское число может обозначать только от 1 до 3999
{
cout<<"Введённое число не может быть преобразовано в римское \n";
exit(1);
}

do//функция вызывается пока исходное число не уменьшится до нуля (его при каждом вызове уменьшает сама функция)
{
Arabic=AtoR(Arabic);
}
while(Arabic>0);
}


cout<<endl;

}
//Функции
int AtoR(int a)
{//функция находит максимальное фиксированное значение, которое можно вычесть из исходного, вычитает его и
//одновременно выводит на экран соответствующую кодировку вычитаемого числа в римском формате
if (a>=1000) {cout<<"M"; return a-1000;}
if (a>=900) {cout<<"CM"; return a-900;}
if (a>=500) {cout<<"D"; return a-500;}
if (a>=400) {cout<<"CD"; return a-400;}//возвращается уменьшенное значение
if (a>=100) {cout<<"C"; return a-100;}
if (a>=90) {cout<<"XC"; return a-90;}
if (a>=50) {cout<<"L"; return a-50;}
if (a>=40) {cout<<"XL"; return a-40;}
if (a>=10) {cout<<"X"; return a-10;}
if (a>=9) {cout<<"IX"; return a-9;}
if (a>=5) {cout<<"V"; return a-5;}
if (a>=4) {cout<<"IV"; return a-4;}
if (a>=1) {cout<<"I"; return a-1;}
return -1;
}

int RtoA (char a,char b)// аргументами являются переданные из main'а два символа римского числа, стоящие подряд
{
if((a=='I')&&(b=='V')) {return 4;}//если они образуют число, описанное "правилом вычитания",
if((a=='I')&&(b=='X')) {return 9;}//то возвращается соответствующее этой кодировке арабское число
if((a=='X')&&(b=='L')) {return 40;}
if((a=='X')&&(b=='C')) {return 90;}/*тогда в следующий раз в функцию будет передано два элемента, стоящие после текущего 2-го аргумента*/
if((a=='C')&&(b=='D')) {return 400;}
if((a=='C')&&(b=='M')) {return 900;}
switch(a)
{
case 'I': return 1;//если особых слачаев два стоящих рядом числа не образуют,
case 'V': return 5;//то возвращается арабское число, соответствующее первому элементу (1-му аргументу функции)
case 'X': return 10;
case 'L': return 50;/*а в таком случае в следующий раз в функцию будет передано два элемента, стоящие после текущего 1-го аргумента*/
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
}

return -1;
}



НАРОД ВОД это НЕ РАБОТАЕТ КАК НУЖНО

Римское->Арабское(1) Арабское->Римское(2)
Введите арабское число
479
CDLXXIX
Press any key to continue



Римское->Арабское(1) Арабское->Римское(2)
CDLXXIX
Введите арабское число
Введённое число не может быть преобразовано в римское
Press any key to continue

почему???(((
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru