Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[cpp] Kalkulator liczb rzymskich

Ostatnio zmodyfikowano 2014-03-02 20:46
Autor Wiadomość
ow.verysweet
Temat założony przez niniejszego użytkownika
[cpp] Kalkulator liczb rzymskich
» 2014-03-02 18:53:19
Cześć wymyśliłem sobie ,że zrobie kalkulator liczb rzymskich ale nie mam pomysłów jak go chwycić. Założenie jest takie, user podaje liczbe rzymską np "II" i "I", program konwertuje te liczby na 2 i 1, później po prostu odejmuje 2 od 1 i konwertuje wynik na liczbe rzymską i ją wyświetla.  Utknąłem w konwertowaniu "I" na liczbe jeden
tu jest coś co napisałem ;

C/C++
#include <iostream>

using namespace std;


int main()
{
   
   
    char pierwsza;
    char druga;
   
    cout << "Witaj w kalkulatorze rzymskim!:)\n\n\nPodaj odjemn\245:" << endl;
    cin >> pierwsza;
    cout << "Podaj odjemnik:" << endl;
    cin >> druga;
   
    int jeden1 = 1;
    char jeden = 'I';
    jeden = jeden1; //Powymyślałem sobie jak to zrobić i
    //miałem nadzieje ,że to zadziała:D
    int dwa2 = 2;
    char dwa = 'II';
    dwa = dwa2;
   
   
    switch( pierwsza )
    {
    case 2:
        pierwsza = 2;
        break;
    }
   
    switch( druga )
    {
    case 1:
        druga = 1;
        break;
    }
   
    cout << "Tw\242j wynik to:" << pierwsza - druga << endl;
   
}


macie jakiś pomysł jak zrobić tą konwersje? bynajmniej dać mi tylko wędke, ja sobie złowie rybke

P-105515
mieciox
» 2014-03-02 19:06:48
Wsadź do tablicy wartości i odpowiadające im cyfry rzymskie. To tak na początek, zaraz może coś lepszego wykombinuje.

-----
Idąc twoim tokiem rozumowania:

C/C++
#include <iostream>
using namespace std;


int main()
{
   
    char cyfra_rzymska;
    int pojemnik;
    cout << "Podaj cyfre rzymska: \n";
    cin >> cyfra_rzymska;
    pojemnik = int( cyfra_rzymska );
    switch( pojemnik )
    {
    case 98:
        cout << "Podales B \n"; //Tutaj użyj kodów ASCII;
        break;
    default:
        cout << "Nie ma takiej cyfry rzymskiej.";
    }
   
}

Twój pomysł nie jest taki zły, częściowo zrealizowałem go w kodzie wyżej.
Mam nadzieję, że troszkę pomogłem.
P-105516
ow.verysweet
Temat założony przez niniejszego użytkownika
» 2014-03-02 19:20:14
Hmm no niby mam coś takiego, ale jak z tego korzystać

C/C++
#include <iostream>


using namespace std;


int main()
{
   
    struct Rzymlicz
    {
        char s;
        int w;
    };
   
    Rzymlicz Rzym[] =
    {
        { 'I', 1 },
        { 'V', 5 },
        { 'X', 10 },
        { 'L', 50 },
        { 'C', 100 },
        { 'D', 500 },
        { 'M', 1000 },
        { '\0', 0 }
    };
   
   
   
    char pierwsza;
    char druga;
   
    cout << "Witaj w kalkulatorze rzymskim!:)\n\n\nPodaj odjemn\245:" << endl;
    cin >> pierwsza;
    cout << "Podaj odjemnik:" << endl;
    cin >> druga;
   
   
   
   
   
   
   
    cout << "Tw\242j wynik to:" << pierwsza - druga << endl;
   
   
   
}
P-105517
RazzorFlame
» 2014-03-02 19:21:25
ow.verysweet, chcesz trzymać 2 znaki w 1 bajtowej zmiennej typu char.
P-105518
mieciox
» 2014-03-02 19:23:48
Dobra, podaje przykład realizacji owego problemu. Powinno to pomóc przy dalszej realizacji zadania, jakim jest wpisywanie kombinacji cyfr rzymskich, a następnie konwersja do postaci dziesiętnej i odejmowanie. Wynik w postaci dziesiętnej, chyba że ma być w postaci rzymskiej, to znów dokonujesz konwersji - rozkładasz liczbę na czynniki pierwsze, a następnie do postaci rzymskiej wg systemu zapisywania liczb rzymskich + obsługa wyjątków, jeśli ktoś spróbuje wprowadzić inną cyfrę niż rzymską itd. Zostawiam to tobie, pomyśl jak to zrealizujesz.

C/C++
#include <iostream>


using namespace std;
int odejmij( int liczba1, int liczba2 );
struct cyfry_rzymskie
{
    char cyfra;
    int liczba;
};


int main()
{
    char a, b;
    int pojemnik_a, pojemnik_b;
    cyfry_rzymskie rzym[ 8 ] =
    {
        { 'I', 1 },
        { 'V', 5 },
        { 'X', 10 },
        { 'L', 50 },
        { 'C', 100 },
        { 'D', 500 },
        { 'M', 1000 },
        { '0', 0 }
    };
   
    cout << "Witaj w kalkulatorze rzymskim!:)\n\n\nPodaj odjemn\245:" << endl;
    cin >> a;
    cin >> b;
   
   
    for( int x = 0; x < 9; x++ )
    {
        if( rzym[ x ].cyfra == a ) pojemnik_a = rzym[ x ].liczba;
       
    }
    for( int z = 0; z < 9; z++ )
    {
        if( rzym[ z ].cyfra == b ) pojemnik_b = rzym[ z ].liczba;
       
    }
   
    cout << "Wynik to: " << odejmij( pojemnik_a, pojemnik_b );
    return 0;
}

int odejmij( int liczba1, int liczba2 )
{
    return liczba1 - liczba2;
}

P-105520
michal11
» 2014-03-02 20:46:51
Ja bym skorzystał ze stringów, będzie łatwiej i jeżeli to nie będzie jakieś skomplikowane działanie to najlepiej wczytać je całe jako string i potem odpowiednio parsować.
P-105535
« 1 »
  Strona 1 z 1