Witam powtarzam typowe algorytmy, bo przygotowywuje sie do matury i zrobiłem sobie ten algorytm i nie wiem dlaczego procedura dec mi świruje, prosze Was o spr, pewnie jakis głupi błąd zrobiłem, a teraz mam schiza i nie moge go wyłapac.
algorytm pisany w pascalu (aplikacja konsolowa - delphi);
Co mnie dziwi to to, że jak tą procedure wezme jako osobny program to działa bez zarzutu, nie wiem co mi się już w głowie popieprzyło :/
program Project1;
{$APPTYPE CONSOLE}
var
znak:char;
procedure dec;
var
p,i:byte;
s:string;
j,a,y:integer;
begin
write('liczba: ');
readln(s);
write('system liczbowy: ');
readln(p);
if ((s[1])>='A')and(ord(s[1])='A')and(ord(s)0 do
begin
tab:=x mod p;
x:=x div p;
i:=i+1;
end;
for k:=i-1 downto 1 do
begin
if tab[k]<10 then
write(tab[k])
else
write(chr(tab[k]+55));
end;
end;
begin
writeln('PROGRAM DO ZAMIANY LICZBY W SYSTEMIE DZIESIETNYM NA DOWOLNY I ODWROTNIE');
repeat
writeln('Nacisnij:');
writeln('d - jesli chcesz zamienic z innego systemu na decymalny');
writeln('i - jesli chcesz zamienic z systemu decymalnego na inny');
read(znak);
case znak of
'd':dec;
'i':inny;
end;
writeln('');
writeln('');
writeln('jesli chcesz skonczyc nacisnij K, jesli nie dowolny inny klawisz');
read(znak);
until (ord(znak)=107) or (ord(znak)=75);
readln;
end.
algorytm do zamiany z systemu dec na inny i odwrotnie
-
- Użytkownik
- Posty: 38
- Rejestracja: 18 lis 2006, o 13:26
- Płeć: Mężczyzna
- Lokalizacja: Szczucin
- Podziękował: 2 razy
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
algorytm do zamiany z systemu dec na inny i odwrotnie
Moim zdaniem pewnym problemem może być sposób czytania pojedynczego znaku wymagający potwierdzenia klawiszem Enter.
Chodzi o funkcję read(znak); - proponuję zastąpić ją odczytem jednego znaku z klawiatury czyli znak := ReadKey;
Dobrze jest też nie podmieniać funkcji standardowych np Dec - zmniejszanie wartości o jeden.
Po tych zmianach Twój program dla darmowego kompilatora Turbo Pascal 5.5 wyglądałby tak
Chodzi o funkcję read(znak); - proponuję zastąpić ją odczytem jednego znaku z klawiatury czyli znak := ReadKey;
Dobrze jest też nie podmieniać funkcji standardowych np Dec - zmniejszanie wartości o jeden.
Po tych zmianach Twój program dla darmowego kompilatora Turbo Pascal 5.5 wyglądałby tak
Kod: Zaznacz cały
uses crt;
var
znak : char;
procedure dec1;
var
p , i : byte;
s : string;
j, a, y : integer;
begin
s := '';
write('liczba: ');
readln(s);
write('system liczbowy: ');
readln(p);
if ((s[1])>='A')and(ord(s[1])<=ord('Z')) then
a:=ord(s[1])-55
else
val(s[1],a,j);
y:=a;
for i:=2 to length(s) do
begin
if ((s[i])>='A')and(ord(s[i])<=ord('Z')) then
a:=ord(s[i])-55
else
val(s[i],a,j);
y:=y*p+a;
end;
writeln('liczba w systemie decymalnym: ',y);
readln;
end;
procedure inny;
var
tab:array[0..20]of byte;
x:integer;
i,p,k:byte;
begin
write('liczba do zamiany: ');
readln(x);
write('podstawa systemu: ');
readln(p);
i:=1;
while x>0 do
begin
tab[i]:=x mod p;
x:=x div p;
i:=i+1;
end;
for k:=i-1 downto 1 do
begin
if tab[k]<10 then
write(tab[k])
else
write(chr(tab[k]+55));
end;
end;
begin
writeln('PROGRAM DO ZAMIANY LICZBY W SYSTEMIE DZIESIETNYM NA DOWOLNY I ODWROTNIE');
repeat
writeln('Nacisnij:');
writeln('d - jesli chcesz zamienic z innego systemu na decymalny');
writeln('i - jesli chcesz zamienic z systemu decymalnego na inny');
znak := UpCase(ReadKey);
case znak of
'D':dec1;
'I':inny;
end;
writeln('');
writeln('');
writeln('jesli chcesz skonczyc nacisnij K, jesli nie dowolny inny klawisz');
znak := UpCase(ReadKey);
until (znak = 'K');
readln;
end.