Skocz do zawartości

Zamiana sys. liczbowych


sfinkss

Rekomendowane odpowiedzi

przerobiłem program zamieniajacy dec na dowolny sys. liczbowy.

 

jednak wywala mi błąd (stała S)

 

GML
Program zamiana;

uses crt;

 

const

S='0123456789ABCDEFGHIJKLMNOPQRTSUWXYZ';

 

var

wynik:string;

naco,co:integer;

pyt:char;

label poczatek, koniec,pytanie;

begin

wynik:='';

repeat

poczatek:

clrscr;

gotoxy(20,14);

textcolor(yellow);

 

write('Na jaki system liczbowy chcesz zamienic (maksymalnie 36): ');

readln(naco);

until(naco>=2) and (naco<=36);

textcolor(red);

write('podaj jakas liczbe dziesietna, kt chcesz zamienic: ');

readln(co);

 

repeat

wynik:=S[co mod naco+1] + wynik;

co:=co div naco;

until co=0;

 

textcolor(green);

writeln('Twoja liczba to: ',wynik);

delay(1000);

gotoxy(20,31);

textcolor(white);

readkey:=pyt;

pytanie:

writeln('Chcesz policzyc jeszcze raz? t/n ');

if pyt='t' then goto poczatek;

if pyt='n' then goto koniec;

else write('blad') and goto pytanie;

 

koniec:

clrscr;

gotoxy(20,14);

textcolor(green);

Write('Program ');

delay(300);

textcolor(blue);

write('napisal ');

delay(300);

textcolor(white);

write('pan ');

delay(300);

textcolor(yellow);

write('Graszk ');

delay(150);

textcolor(green);

write(' :) ');

readkey;

end.

Odnośnik do komentarza
Udostępnij na innych stronach

kurcze.. ale jak..

 

cos takiego?

S:char='0123456789ABCDEFGHIJKLMNOPQRTSUWXYZ'; ?

 

ale tak to nie moze byc.

 

ale w orgyinale było tak

 

SYSTEM='0123456789ABCDEFGHIJKLMNOPQRTSUWXYZ';

 

i tam dalej tez w programie, ale jak jest tak to wyskakuje ze zmienna jest zdublowana.

Odnośnik do komentarza
Udostępnij na innych stronach

Stała jest dobrze zadeklarowana i przy deklarowaniu stałych nie używa się żadnego := tylko =.

Błędy są w poniższych linijkach:

readkey:=pyt;

Dlaczego do funkcji przypisujesz zmienną to ja nie wiem. Jak już to:

pyt:=readkey;

Następne co zauważyłem:

if pyt='n' then goto koniec;
else write('blad') and goto pytanie;

Nie daje się średnika, gdy chcesz dać do warunku ELSE. Poza tym - co to do jasnej cholery jest "write(...) and ..."?! Masz zerowe pojęcie o Pascalu. Prawidłowo:

if pyt='n' then goto koniec
else 
begin
write('blad');
goto pytanie;
end;

A czemu to wszystko zrobiłeś na labelach to jest dla mnie wielką zagadką. Szczerze mówiąc, pierwszy raz widzę, żeby ktoś używał tego. Poza tym, ten program jest pełen różnych błędów. Do tego, momentami nie wiem co chciałeś osiągnąć, bo czytelność kodu jest zerowa, przez to że wcięcia zrobiłeś w cały świat. Przerobiłem ten kod na ludzko wyglądający, zrobiony tradycyjną metodą (bez labelów i goto). Wywaliłem też wszelkie ubajerowania graficzne, jak chcesz to sobie je dodaj potem.

Program zamiana;
uses crt;

const
        S='0123456789ABCDEFGHIJKLMNOPQRTSUWXYZ';

var
        wynik:string;
        naco,co:integer;
        pyt:char;
        wyjsc:boolean;

begin
        wyjsc:=false;
        repeat
                wynik:='';
                clrscr;
                repeat
                        write('Na jaki system liczbowy chcesz zamienic (maksymalnie 36): ');
                        readln(naco);
                until(naco>=2) and (naco<=36);

                writeln('Podaj liczbe dziesietna, ktora chcesz zamienic: ');
                readln(co);

                repeat
                        wynik:=S[co mod naco+1] + wynik;
                        co:=co div naco;
                until co=0;

                writeln('Twoja liczba to: ',wynik);

                repeat
                        writeln('Chcesz policzyc jeszcze raz? t/n ');
                        pyt:=readkey;
                        if pyt='t' then wyjsc:=false;
                        if pyt='n' then wyjsc:=true;
                until (pyt = 't') or (pyt = 'n');

        until wyjsc;

end.

Kod jest teraz o wiele krótszy i czytelny dla każdego.

Odnośnik do komentarza
Udostępnij na innych stronach

doceniam odkryciie mojego zerowego pojęcia o pascalu, no chociaz az takie 'zerowe' nie jest. ;p

 

i doceniam prace marmota, ale dalej mi wywala błąd w tym miejscu

 

GML
wynik:=S[co mod naco+1] + wynik;

 

tresc błędu "invalid qualifier "

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...