skasna Opublikowano 11 Marca 2007 Udostępnij Opublikowano 11 Marca 2007 witam mam maly problem z programem i juz sama nie wiem co mam zrobic mam program ktory zamienia liczby w systemie rzymskim na arabskie i na odwrot. z zamiana na rzymskie nie ma problemow, chodzi o rzymskie na arabskie. w samej zamianie nie ma raczej bledow, ale zamiana ta nie uwzglednia tego, jak ktos napisze zla liczbe (np. XXX czy XIXI) i wtedy tez wypisuje wynik. zeby przed tym sie uchronic, podana liczbe w systemie rzymskim zamieniam na arabska i potem spowrotem na rzymska ta druga moja funkcja i sprawdzam czy zamieniona liczba i ta podana przez uzytkownika sa takie same. jesli sa, to program powinien wypisac liczbe arabska, jesli nie, poinformowac o bledzie. jednak za kazdym razem informuje o bledzie, mimo ze zamieniona i podana sa takie same (kaze programowi wypisywac ta zamieniona, i rzeczywiscie sa one takie same). juz nie wiem co moge zrobic, prosze o pomoc:) program ArabskieRzymskie; uses Crt; var Arabska : integer; Rzymska : string; procedure start(tytul:string); begin ClrScr; writeln(tytul); writeln end; procedure czekaj; begin writeln; writeln('Nacisnij klawisz ENTER'); readln end; function Wstaw(num : integer; one, five, ten : string) : string; var i: integer; T: string; begin T:=''; if num < 4 then for i:=1 to num do T:=T+one; if num = 4 then T:=one + five; if num = 5 then T := five; if (num > 5) and (num < 9) then begin T:=five; for i:=1 to num - 5 do T:=T+one; end; if num = 9 then T:=one+ten; Result := T; end; function ar(a: integer): string; var i: integer; Rzym: string; begin if (a div 1000) > 0 then begin for i := 1 to a div 1000 do Rzym := Rzym +'M'; a := a mod 1000; end; if (a div 100) > 0 then begin Rzym := Rzym + Wstaw(a div 100,'C','D','M'); a := a mod 100; end; if (a div 10) > 0 then begin Rzym := Rzym + Wstaw(a div 10,'X','L','C'); a := a mod 10; end; if a > 0 then Rzym := Rzym + wstaw(a,'I','V','X'); Result := Rzym; end; function ra(r : string) : integer; var i, add, min, sum: integer; pom: boolean; begin sum := 0; pom := false; for i:= 1 to Length(r) do begin add := 0; min := 0; if pom = false then begin case R[i] of 'M': add := 1000; 'D': add := 500; 'C': add := 100; 'L': add := 50; 'X': add := 10; 'V': add := 5; 'I': add := 1; end; case R[i + 1] of 'M': min := 1000; 'D': min := 500; 'C': min := 100; 'L': min := 50; 'X': min := 10; 'V': min := 5; 'I': min := 1; end; if add < min then begin add := min - add; pom := true; end; sum := sum + add; end else pom := false; end; result := sum; end; procedure NaRzymska; begin start('Funkcja zamieniajaca liczby arabskie na rzymskie.'); writeln('Podaj liczbe w systemie arabskim: '); readln(Arabska); if (Arabska > 0) and (Arabska < 10000) then begin writeln('Ta liczba w systemie rzymskim to: ',ar(Arabska)); end else writeln('Bledna liczba.'); readln; czekaj; end; procedure NaArabska; var zamieniona : string; begin start('Funkcja zamieniajaca liczby rzymskie na arabskie.'); writeln('Podaj liczbe w systemie rzymskim: '); readln(Rzymska); zamieniona := ar(ra(Rzymska)); writeln(Rzymska); writeln(ra(Rzymska)); writeln(ar(ra(Rzymska))); if zamieniona=Rzymska then writeln('Ta liczba w systemie arabskim to: ',ra(Rzymska)) else writeln('Podana przez Ciebie liczba w systemie rzymskim nie jest poprawna.'); readln; czekaj; end; procedure Koniec; begin start('Wywolano zakonczenie programu'); czekaj; halt end; procedure Menu; const format=6; begin start('MENU'); writeln('1':format,' - zamiana liczby arabskiej na rzymska'); writeln('2':format,' - zamiana liczby rzymskiej na arabska'); writeln('Esc':format,' - zakoczenie programu'); writeln end; procedure KtoraFunkcja(var klawisz:char); begin write('Podaj, ktora funkcje wybierasz: 1,2 czy Esc: '); klawisz:=ReadKey; writeln(klawisz); end; procedure WybierzFunkcje(klawisz:char); const Esc=#27; begin case klawisz of '1':NaRzymska; '2':NaArabska; Esc:Koniec end end; var klawisz:char; begin start('Program zamiany liczb'); czekaj; repeat Menu; KtoraFunkcja(klawisz); WybierzFunkcje(klawisz) until False end. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi