[PASCAL] Program do przeliczania. 1 probelm

0

Witam. Mam napisać program do przeliczania liczb na system binarny. Zrobiłem to tak jak mi nauczyciel kazał ( typ danych byte, zapisywane w tablicy itd...)
Lecz mam 1 problem, gdy podam liczbę np 300 to wyskakuje błąd, a mam zrobić tak że jak ktoś poda liczbę z poza zakresu to program ma powtórzyć prośbę o podanie liczby.

Próbowałem w ten sposób:
writeln('Podaj liczbe od 0 do 255 aby przliczyc ja na sytem binarny');
readln(n);
if n>255 then
begin
writeln('Podaj liczbe od 0 do 255 aby przliczyc ja na sytem binarny');
readln(n);
end;

ale tak nie działa...

KOD PROGRAMU:

program binarny;

type tablica = array[0..7] of byte;
var n, i : byte;
var a : tablica;

begin
writeln('Podaj liczbe od 0 do 255 aby przliczyc ja na sytem binarny');
readln(n);

i:=0;
while n>0 do
begin
a[i]:=n mod 2;
n:=n div 2;
i:=i+1;
end;

write('wynik:');

for i:=7 downto 0 do
begin
write(a[i]);
end;
end.

0
McTadel napisał(a)

Witam. Mam napisać program do przeliczania liczb na system binarny. Zrobiłem to tak jak mi nauczyciel kazał ( typ danych byte, zapisywane w tablicy itd...)
Lecz mam 1 problem, gdy podam liczbę np 300 to wyskakuje błąd, a mam zrobić tak że jak ktoś poda liczbę z poza zakresu to program ma powtórzyć prośbę o podanie liczby.

ten błąd Ci wyskakuje, ponieważ pobierasz tę liczbę do zmiennej n:byte. a jak zapewne wiesz lub nie wartości byte są z zakresu od 0 do 255 wiec przypisując liczby większe od 255 pod zmienną typu byte napotkasz na błąd. rozwiązaniem może być tutaj inna zmienna liczbowa niż byte, np. integer.

*post nadaje się do działu Newbie ;)

0
program binarny;

var n, i: Byte;
    iAns, Code: Integer;
    sAns: String;
    IsByte: Boolean;
    a: array[0..7] of Byte;

begin
  repeat
    repeat
      Write('Podaj liczbe do przeliczenia na system dwojkowy: ');
      Readln(sAns);
      Val(sAns, iAns, Code);
    until Code = 0;

    IsByte := True;

    case iAns of
      0..255: n := iAns
      else
       IsByte := False;
    end;
  until IsByte = True;

  i := 0;
  while n > 0 do
   begin
     a[i] := n mod 2;
     n := n div 2;
     i := i + 1;
   end;

  Writeln;
  Write('Wynik: ');

  for i := 7 downto 0 do
   begin
     Write(a[i]);
   end;

  Writeln('.');
  Readln;
end.

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