Bład w wyswietleniu tablicy

0

Chce napisac program oparty na Procedurach gdzie podaje 4 liczby i mi sie je wyswietla
Program banał ale nie wiem czemu pokazuje mi sie błąd w linijce gdzie wczytuje liczby...

const n=3;
type zbior=0..n;
type tab=array[0..n]of zbior;
var a:tab;

procedure zapelnij(var x:zbior);
var i:zbior;
begin
for i:=0 to n do
readln(x[i]);                   //konkretnie to tutaj
end;

Procedure wyswietl(x:zbior);
var i:zbior;
begin
for i:=0 to n do
writeln(x[i]);
end;

begin
zapelnij(a);
wyswietl(a);
readln;
end.

Ktoś wie dlaczego ?
Pomocy

0

Powinno być według mnie tak aby działało. I poczytaj koniecznie kompendium z podstawami, bo pytasz o banalne sprawy. Wiem, że to dział Newbie, ale warto znać podstawy języka jeżeli chce się coś sensownego samodzielnie napisać. I poza tym koniecznie naucz się formatować kod aby był przejrzysty jak ten poniżej. Jeżeli nie umiesz tego robić samodzielnie pogoogluj za formatterami.

const
  N = 3;
type
  Zbior = 0..N;
  Tab = array[0..N] of zbior;
var
  a : Tab;

procedure Zapelnij(var X : Tab);
var
  I : Zbior;
begin
  for I := 0 to N do
  begin
    Write('Podaj ', I + 1, ' element tablicy: ');
    Readln(X[I]);
  end;
end;

procedure Wyswietl(X : Tab);
var
  I : Zbior;
begin
  Writeln('Elementy tablicy:');
  for I := 0 to N do
    Writeln(X[I])
end;

begin
  zapelnij(a);
  wyswietl(a);
  Readln;
end.

EDIT: teraz kod poprawiony, bo poprzednio całośc pisana i poprawiana na szybko. Dziękuję kAzek za zwrócenie uwagi.

0

Nie wiesz dlaczego, bo nie przeczytałeś uważnie błędu, jaki pokazuje kompilator; A Array type required oznacza, że do operacji wymagana jest macierz, a jej nie podałeś;

Swoją drogą trzeba wiedzieć co znaczy ten zapis:

const
  Zbior = 0 .. n;

To nie jest deklaracja macierzy, tylko stałej liczbowej z przedziału 0 .. n, gdzie u Ciebie n przyjmuje wartość 3, czyli stała Zbior jest typem liczby z przedziału 0 .. 3;

Druga sprawa, ten zapis:

procedure Zapelnij(var X: Zbior);
var
  I: Zbior;
begin
  for I := 0 to N do
    ReadLn(X[I]);
end;

jest błędny, bo argument (var X: Zbior) jest liczbą z przedziału 0 .. 3, a ty odwołujesz się do liczby jak do tablicy: ReadLn(X[I]) co jest poważnym błędem;

Jeżeli już coś, to ustaw argument procedury jako tablica - (var X: Tab) - taki zapis jest jak najbardziej poprawny i program się skompiluje;

Niestety nie wiem jakie ma zadanie robić ta procedura i co chcesz osiągnąć, więc procedura ta również może generować błąd (indeksy tablicy mogą być nieodpowiednie);

EDIT: Spóźniłem się... :P

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