Skocz do zawartości
sfinkss

Zamiana sys. liczbowych

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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

może

const

nazwa-zmiennej : typ = wartość-początkowa

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ja bym Cię prosił o podanie treści błedu

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

wyskakuje przed tą tablicą S[..... ]

a treść " invalid qualifier"

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

nikt nie ma pomysłu?;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Niestety składnia Pascala jest dla mnie powalona ; )

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

marmot, że też Ci się chciało, ja dawno wiedziałem co z tym jest nie tak, ale nie pisałem bo nie było sensu naprawiać kogoś głupoty i zerowej wiedzy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A ja uważam, że warto. Od tego jesteśmy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

pieter, dla kogos kto nie zna składni pascala nie jest to oczywiste. :S

Udostępnij tego posta


Odnośnik do posta
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 "

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dziwne, we Free Pascalu mi się skompilowało bez problemu. Z jakiego kompilatora korzystasz? Bo jak z Borland Pascala, to możliwe, że musisz zrobić coś takiego:

const
S: string = '0123456789ABCDEFGHIJKLMNOPQRTSUWXYZ';

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

borland :)

 

o, i już wszystko działa;)

 

jeszcze raz dzięki wielkie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×