Datuve :: Forums :: Arhīvs :: Palidziet ar C++ kodu, kaut kur ir kluda

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 76

Reģistrētie lietotāji online: 0

Viesi online: 76

Datuve.lv video
Top.LV

Palidziet ar C++ kodu, kaut kur ir kluda

Ievietoja: inguss @ 2009.06.18 11:06  

Varbut kads redz, kur man ir kluda?
#include <iostream>
#include <string>
#include <stdexcept>
using namespace std;

int ex;
const static int M = 1000;
const static int D = 500;
const static int C = 100;
const static int L = 50;
const static int X = 10;
const static int V = 5;
const static int I = 1;

class RomanNumeral
{
public:
RomanNumeral( const int decimal ) :
m_roman( "" ),
m_decimal( ((decimal > 0) ? decimal : 0) )
{
if( decimal > 0 )
{
int i = decimal;
while( i > 0 )
{
if( ( i - M ) >= 0 )
{
m_roman += "M";
i -= M;
continue;
}
if( ( i - D ) >= 0 )
{
m_roman += "D";
i -= D;
continue;
}
if( ( i - C ) >= 0 )
{
m_roman += "C";
                   i -= C;
                   continue;
               }
               if( ( i - L ) >= 0 )
               {
                   m_roman += "L";
                   i -= L;
                   continue;
               }
               if( ( i - X ) >= 0 )
               {
                   m_roman += "X";
                   i -= X;
                   continue;
               }
               if( ( i - V ) >= 0 )
               {
                   m_roman += "V";
                   i -= V;
                   continue;
               }
               if( ( i - I ) >= 0 )
               {
                   m_roman += "I";
                   i -= I;
                   continue;
               }
           }
       }
       else
       {
           m_roman = "0";
       }
   }

   RomanNumeral( const std::string& string ) :
   m_roman( ((string.size() > 0 ) ? string : "0" ) ),
   m_decimal( 0 )
   {
       int i = 0;
       while( i < (int)string.size() )
       {
           char c = string[i++];
           switch( c )
           {
               case 'M':
                   m_decimal += M;
                   break;
               case 'D':

                   m_decimal += D;
                   break;
               case 'C':

                   m_decimal += C;
                   break;
               case 'L':

                   m_decimal += L;
                   break;
               case 'X':
               
                   m_decimal += X;
                   break;
               case 'V':
               
                   m_decimal += V;
                   break;
               case 'I':

                   m_decimal += I;
                   break;
               default:
                   throw new std:: out_of_range( "Kljuda. Nav tada romiesha skaitlja" );
                   break;
           }
       }
   }

   int getDecimal()
   {
       return m_decimal;
   }
   void setDecimal( const int decimal );
   const std::string& getRoman()
   {
       return m_roman;
   }
protected:
   std::string m_roman;
   int m_decimal;
};

int main()
{
   cout << "Ievadiet lielo burtu virkni";

   std::string roman;
   cin >> roman;
   try
   {
       RomanNumeral rn( roman );
       cout << " Decimal: " << rn.getDecimal() << endl;
   }
   catch( exception* ex )
   {
       cout << roman << " " << ex ->what() << endl;
   }

   system("pause");
   return 0;
}

Komentāri:

#1 usver @ 2009.06.18 11:24

nekorekti konvertē skaitļus?
sieva neapmierināta?
naktīs nevari gulēt?

Tad beidz ticēt tiem sviestiem, ka katrs burts nozīmē tikai 1 skaitli - ir jāskatās kopā, piem "XC" būs 90, nevis "10 + 100".

ir 2 pieejas tam: viena - lietot visus iespējamos lukapus, lai korekti atpazītu XC utml ( http://www.go4expert.com/forums/showthread.php?t=4948 ), otra - pirms sagatavošanas pārtaisīt piem XC par "LXXXX" un tad parsēt kā parasti ( http://snipplr.com/view/6314/roman-numerals/ , skatīt funkciju "roman_expand($roman)".