algorytm do zamiany z systemu dec na inny i odwrotnie

kuba.bobas
Użytkownik
Użytkownik
Posty: 38
Rejestracja: 18 lis 2006, o 13:26
Płeć: Mężczyzna
Lokalizacja: Szczucin
Podziękował: 2 razy

algorytm do zamiany z systemu dec na inny i odwrotnie

Post autor: kuba.bobas »

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.
Awatar użytkownika
eloar
Użytkownik
Użytkownik
Posty: 106
Rejestracja: 18 cze 2007, o 16:59
Płeć: Mężczyzna
Lokalizacja: Kobyłka
Podziękował: 8 razy
Pomógł: 12 razy

algorytm do zamiany z systemu dec na inny i odwrotnie

Post autor: eloar »

jak mozesz to zrob wciecia, bo ciezko to czytac :/

i opisz co znaczy swiruje.
smiechowiec
Użytkownik
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

Post autor: smiechowiec »

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

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.
ODPOWIEDZ