Błąd 201 w programie

0
var cout,x,y,pa,ba:integer;
    i,d,a,b:integer;
    l,t:integer;
    tab:array of array of boolean;

begin
l:=1;
t:=-1;
readln(d);
cout:=1;
for i:=1 to d do
begin


  readln(x,y,a,b);
  pa:=a;
  ba:=b;

  repeat

    if ((b+t)>y) or ((b+t)<0) then t:=-t;
    if ((a+l)>x) or ((a+l)<0) then l:=-l;

    a:=a+l;
    b:=b+t;

    if tab[a,b]=false then
    begin
     tab[a,b]:=true;
     cout:=cout+1;
    end else
    begin
     tab[a,b]:=false;
     cout:=cout-1;
    end;

  until (pa=a) and (ba=b);
  writeln(cout);


end;
end.

Witam, powyższy program kompiluje się bezbłędnie. Najpierw pobiera liczbę zestawów danych, a w następnych linijkach wczytuje zestawy danych po cztery liczby (co on robi to już inna sprawa). Po wpisaniu pierwszego zestawu danych program wyświetla błąd 201 (chyba każdy wie co on oznacza), a dokładniej przy linijce " if tab[a,b]=false then ". Czy ktoś mógłby mi pomóc?

0

najpierw przydałoby się nadać rozmiar tej tabeli setlength dla tablicy a potem dla każdego jej wiersza

0
var cout,x,y,pa,ba:integer;
    i,d,a,b:integer;
    l,t:integer;
    tab:array of array of boolean;

begin
l:=1;
t:=-1;
readln(d);
for i:=1 to d do
begin


  readln(x,y,a,b);
  pa:=a;
  ba:=b;

  setlength(tab,x);
  for cout:=1 to x do setlength(tab[cout],y);
  cout:=1;

  repeat

    if ((b+t)>y) or ((b+t)<0) then t:=-t;
    if ((a+l)>x) or ((a+l)<0) then l:=-l;

    a:=a+l;
    b:=b+t;

    if tab[a,b]=false then
    begin
     tab[a,b]:=true;
     cout:=cout+1;
    end else
    begin
     tab[a,b]:=false;
     cout:=cout-1;
    end;

  until (pa=a) and (ba=b);
  writeln(cout);


end;
end.

To nie pomogło. Co może być przyczyną tego błędu? Zastanawiam się nad tym od paru ładnych godzin.

0

numerowane jest od zera więc nie
for cout := 1 to x
tylko
for cout := 0 to x - 1
i dalej podobnie

0

Ups, rzeczywiście błąd, ale niestety nadal to samo.

Błąd sprowadza się do wyrażenia tab[a,b]=false, indeksami są liczby typu integer, a dane w nich zachowane to wartości logiczne, więc jakim sposobem w tym wyrażeniu zachodzi "Range check error"?

Wg. specyfikacji są dwie możliwości:

  1. An array was accessed with an index outside its declared range.
  2. Trying to assign a value to a variable outside its range (for instance an enumerated type).

Może się myle, ale ja żadnego z tych błędów nie znalazłem w moim programie :(

0

Sory za podwójny post ale nie mam możliwości edycji poprzedniego.

Okazało się że program zatrzymuje się już na linijce

for cout:=1 to x do setlength(tab[cout],y);
0

Przecież napisał ci Adamo wyżej, że ma być

for cout:=0 to x-1 do setlength(tab[cout],y);
0

Też nie pomaga

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