[C/C++] rzymskie na arabskie

0

CZeść Słuchajcie mam problem z programem do konwersji liczb rzymskich czytanych z pliku na arabskie . Jesli kots mam takowy programik albo ma o tym pojęcie i może mi coś poradzić albo nawet napisać to byłbym wdzięczny. Dzieki i Pozdrawiam
odpowiedzi możecie przesyłac na mój milowy adres : [email protected]

0

Z systemem rzymskim jest taki mały problem: jest systemem addywnym w przeciwieństwie do systemu arabskiego, który jest systemem pozycyjnym.
Najprostszym sposobem na konwersję z systemu rzymskiego na arabski jest odczytywanie liczb od prawej strony i sumowanie poszczególnych cyfr rzymskich oraz zapamiętywanie największej wystąpionej liczby. Jeżeli następne liczby są mniejsze od zapamiętanej to należy odjąć je od wyniku, jeżeli większe to dodać.

Z C++ to u mnie słabo, ale napiszę to w Delphi, wraz z opisem nie powinno być problemu na przrobienie tego.

function RzNaAr(Liczba: string): Integer;
const
I = 1;
V = 5;
X = 10;
L = 50;
C = 100;
D = 500;
M = 1000;
var
Najw, j, Cyfra, Suma: Word;
begin
Suma := 0;
Najw := 0;
for j := Length(Liczba) downto 1 do
begin
case UpCase(Liczba[j]) of
'I': Cyfra := I;
'V': Cyfra := V;
'X': Cyfra := X;
'L': Cyfra := L;
'C': Cyfra := C;
'D': Cyfra := D;
'M': Cyfra := M;
end;
if Cyfra >= Najw then
begin
Najw := Cyfra;
Suma := Suma + Najw;
end
else
Suma := Suma - Cyfra;
end;
Result := Suma;
end;

0

Naprawdę ładnie napisane Dryo. Delphi znam odrobinę, ale ten kod jest tak czytelny, że sam w sobie jest dokumentacją.

Pozdrawiam

0

Niesamowite Dryobates - dopiero co myślałem, że zrobić taką funkcję, ale odwrotnie (konwersja liczb arabskich na rzymskie), ktorej rezultatem byłby STRING, a parametrem funkcji: INTEGER. Jak widać już mnie wyprzedzileś. Jeśli to naprawdę działa - powinieneś dać do do "Gotowców" !

0

Delphi znam odrobinę, ale ten kod jest tak czytelny, że sam w sobie jest dokumentacją.

To właśnie piękno składni Pascala :)

Trzeba było napisać w C++ więc chyba tak powinno być. Działać działa, ale niech lepiej ktoś znający się na C++ to sprawdzi.

int RzNaAr(char *Liczba)
#define I 1;
#define V 5;
#define X 10;
#define L 50;
#define C 100;
#define D 500;
#define M 1000;
{
int Najw = 0;
int j;
int Cyfra;
int Suma = 0;
for (j = strlen(Liczba)-1; j>=0; j--)
{
Liczba[j] = Liczba[j] & 0xDF;
/*Nie wiem jaka funkcja zminia na duże znaki, więc assembler i układ kodów ASCII przychodzi z pomocą */
switch (Liczba[j])
{
case 'I': Cyfra = I;break;
case 'V': Cyfra = V;break;
case 'X': Cyfra = X;break;
case 'L': Cyfra = L;break;
case 'C': Cyfra = C;break;
case 'D': Cyfra = D;break;
case 'M': Cyfra = M;break;
};

if (Cyfra >= Najw)
{
Najw = Cyfra;
Suma = Suma + Najw;
}
else
Suma = Suma - Cyfra;
}
return Suma;
};

0

Trzeba było napisać w C++ więc chyba tak powinno być. Działać działa, ale niech lepiej ktoś znający się na C++ to sprawdzi.

Liczba[j] = Liczba[j] & 0xDF;

/*Nie wiem jaka funkcja zminia na duże znaki, więc assembler i układ kodów ASCII przychodzi z pomocą */

a ta funkcja, to... tak, tak: upcase(char)

case 'M': Cyfra = M;break;

w ostatniej pozycji w bloku switch słówko kluczowe break jest zbędne (aczkolwiek błąd to nie jest - i tak pewnie kompilator to olewa)

0

a ta funkcja, to... tak, tak: upcase(char)

A w jakim module jest ta funkcja? Może nie ma jej w czystym C?
Jakby to coś zmieniało to piszę w borladn c++ 3.1

0

a ta funkcja, to... tak, tak: upcase(char)

A w jakim module jest ta funkcja? Może nie ma jej w czystym C?
Jakby to coś zmieniało to piszę w borladn c++ 3.1

No tak, ja pisałem o C++Builderze, ale w Borland C++ 3.1 w helpie (pod Windows, bo pod DOSa wycieli na uczelni - niegodziwcy :-( ) stoi co następuje:
LPSTR AnsiUpper(lpszString)
o module nie ma tam mowy, ale nagłówek znalazłem w pliku windows.h:
LPSTR WINAPI AnsiUpper(LPSTR);
Wynika z tego jasno, że jest to funkcja WinAPI i nic nie trzeba dodatkowo podłączać. windows.h jest z tego co wiem dołączany zawsze - a może się mylę? W każdym razie już chyba wszystko zostało wyjaśnione. A jeśli chodzi o DOSa, to nie pamiętam (a do helpa nie mam w tej chwili dojścia)

0

A jeśli chodzi o DOSa, to nie pamiętam (a do helpa nie mam w tej chwili dojścia)

A ja mam i jeszcze się do niego nie przyzwyczaiłem. Help w Delphi jest cudowny, w Pascalu ujdzie, a w Borland C++ to dla mnie busz.
Ale jakoś znalazłem.
tuupper z modułu ctype.
Ciekaw jestem, czy kiedyś dojdę to takiej wprawy w operowaniu helpem jak w Delphi ;p

0

Ciekaw jestem, czy kiedyś dojdę to takiej wprawy w operowaniu helpem jak w Delphi ;p

Nie ma szans - brakuje najważniejszej funkcji: wyszukiwania w treści (czyli tego samego, czego na tym forum :p )

1 użytkowników online, w tym zalogowanych: 0, gości: 1