Prosím Vás, poradil by mi niekto, kde robím chybu?
Tento program na prevody...
Kód:
program prevody;
uses crt;
var vic,dec,sustava1,zbytok,sustava,y,i:longint;
x:integer;
vysledok,cislo:string;
znak:char;
begin
clrscr;
writeln('Napiste cislo: ');
readln(cislo);
writeln('Zadaj sustavu, v ktorej je toto cislo');
readln(sustava1);
writeln('Zadajte sustavu, do ktorej chcete cislo prevadzat'); {od 2 do 200}
readln(sustava);
if sustava<2 then sustava:=2;
y:=1;
x:=0;
for i:=1 to length(cislo) do
begin
znak:=cislo(.length(cislo)-x.);
if ord(znak)<58 then vic:=48
else vic:=55;
dec:=dec+(ord(znak)-vic)*y;
y:=sustava1*y;
x:=x+1;
end;
while dec>0 do
begin
zbytok:=dec mod sustava;
dec:=dec div sustava;
if zbytok<10 then vysledok:=chr(48+zbytok)+vysledok
else vysledok:=chr(55+zbytok)+vysledok;
end;
writeln('Vami zadane cislo vyzera v ',sustava,'-kovej sustave takto: ');
writeln(vysledok);
end.
...som chcel spraviť ako podprogram - funkciu:
Kód:
uses crt;
var vic,dec,sustava1,zbytok,sustava,y,i:longint;
x:integer;
vysledok,cislo,u:string;
znak,klaves:char;
FUNCTION prevod(sustava1,sustava:longint; cislo:string):string;
var x:integer;
i,y:longint;
vic,dec,zbytok:longint;
vysledok:string;
znak:char;
begin
if sustava<2 then sustava:=2;
y:=1;
x:=0;
for i:=1 to length(cislo) do
begin
znak:=cislo(.length(cislo)-x.);
if ord(znak)<58 then vic:=48
else vic:=55;
dec:=dec+(ord(znak)-vic)*y;
y:=sustava1*y;
x:=x+1;
end;
while dec>0 do
begin
zbytok:=dec mod sustava;
dec:=dec div sustava;
if zbytok<10 then vysledok:=chr(48+zbytok)+vysledok
else vysledok:=chr(55+zbytok)+vysledok;
end;
prevod:=vysledok;
end;
.. ale potom hlavny program:
Kód:
BEGIN
clrscr;
write('Napiste cislo: ');
readln(cislo);
write('Zadaj sustavu, v ktorej je toto cislo: ');
readln(sustava1);
write('Zadajte sustavu, do ktorej chcete cislo prevadzat: '); {od 2 do 200}
readln(sustava);
u:=prevod(sustava,sustava1,cislo);
writeln('Vami zadane cislo vyzera v ',sustava,'-kovej sustave takto: ',u);
readln;
END.
vypisuje uplnu inu hodnotu ako ten prvý program bez podprogramu(kt. ju vypisuje spravne)..
napr:
5(10tkova sustava) by mal byť dvojkovej 10110
ale funkcia piše vysledok 5
asi viem, kde by mohla byť chyba, skusim to ešte poskušať sam, ale pre istotu sa pýtam.. dakujem