Błąd przy kompilacji

2011-09-30 23:18
0

Witam.
Zacząłem pisać projekt programu do zmiany liczb z systemu dziesiętnego na dwójkowy.

Uses crt;

Var
a,b,:integer;

Label kotwica;

begin
clrscr;
writeln('Podaj liczbe w systemie dziesietnym');
a:=0;
b:=2;
read(a);
repeat
a:=a/b;
if (a mod 2)=5 then
 begin
  write('1');
 end;
if (a mod 2)=0 then write('0');
until a=1;
readln;
readln;
end.

Mój problem polega na tym , że kompilator wyrzuca błąd got Extended expected ShortInt przy linijce a:=a/b; Próbowałem już różnych rodzaji zmiennych i przy żadnym nie mogę podzielić. W czym jest problem ?

edytowany 2x, ostatnio: Marteeno, 2011-09-30 23:20

Pozostało 580 znaków

2011-09-30 23:23
0

Ogarnij podstawy. Liczby całkowite w Pascalu dzieli się używając div. Natomiast stosowanie konstrukcji label jest niezalecane i przestarzałe. A liczbe w systemie dówjkowym można uzyskać tak jak poniżej. Pewnie jest więcej sposobów, ale mi się nie chciało bardziej kombinować. Jak ktoś zna optymalniejszy to Tobie poda. Do kompilacji w FPC, bo TP używają chyba tylko nekrofile/filki dodaj dyrektywę kompilatora {$MODE DELPHI}.

function IntToBin(Value: cardinal): string;
var
  I : integer;
begin
  SetLength(Result, 32);
  for I := 1 to 32 do
  begin
    if ((Value shl (I - 1)) shr 31) = 0 then
      Result[I] := '0'
    else
      Result[I] := '1';
  end;
  while (Result[1] = '0') and (Length(Result) > 1) do
    Delete(Result, 1, 1)
end;

edytowany 2x, ostatnio: olesio, 2011-09-30 23:26

Pozostało 580 znaków

2011-10-01 01:22
0
function itoa(n:cardinal; p:cardinal):string[32];
begin
    if n>=p then begin
        itoa:=itoa(n div p, p);   n:=n mod p  end
    else itoa:='';
    if n>9 then inc(n, 7);
    itoa:=itoa+ chr(n+48);
end;

var n:cardinal;
begin
    readln(n);
    writeln(itoa(n, 2));  {nie koniecznie dwójkowo}
    readln;
end. 

swój program pewnie chciałeś napisać tak:

Var
    a:integer;
begin
    writeln('Podaj liczbe w systemie dziesietnym');
    readln(a);
    repeat
        if (a mod 2) = 1 then 
            write('1')
        else
            write('0');
        a:=a div 2;
    until a=0;
    readln
end.

co da się uprościć

var a:integer;
begin
    readln(a);
    repeat
        write( chr( ord('0') + a mod 2) );
        a:= a div 2
    until a = 0;
    readln
end.

Ale zauważ, że cyfry wyniku pojawiają się w odwrotnej kolejnośc

edytowany 6x, ostatnio: Xitami, 2011-10-01 01:41

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0