record i macierz

0

Witam, mam program który robie i coś w nim nie gra tylko ja nie widze jakoś błędów.
Wyjasnie co zamierzałem a jaki jest efekt może ktoś z odwiedzających znajdzie ten błąd albo powie co jest be.

No więc jest baza danych zwykły rekord z jednym podrekordem Obecnosc będącym trójwymiarową macierzą. Chodziło mi o to by na początku jak tworze rekord mógłbym sam zadeklarować jakie wymiary ma mieć ta macierz (ostateczna jej wielkość to 40 wierszów, 3 kolumny i 40 stron). Przy tworzeniu pierwszego z rekordów chcę stworzyć macierz właśnie o wymiarach powyższych z tym, że chcę wypełnić wylko jedną stronę. Czyli każdy rekord (osoba) będzie miał przypisany 1 wiersz i 3 kolumny odpowiadające za obecność. Resztę stron chcę uzupełnić za pomocą innej procedury ale na razie mam problem z zadeklarowaniem macierzy w rekordzie tak by jej całej nie wypełniać od razu tylko pierwszą stronę.
Wygląda to tak:

c

onst v=40; {okresla tygodnie - opcjonalnie}
z=3;
godziny:array[1..z] of string[18]=('ilosc godzin zajec','obecnosc','nieobecnosc');

type dane=record
nr:longint;
nazw:string[20];
imie:string[15];
obecnosc:array[1..40,1..3,1..40] of byte;
data:record
dz,mc:byte;
rok:integer;
end;
msc:string[30];
adres:record
ul,msc2:string[20];
dom,mieszk:integer;
end;
end;

var osoba:dane;
plik: file of dane;
nazwa1:string[20];
wpi:char;
x:integer;
w,k,s,i,j,l,r:byte;


procedure wymiar; {opcjonalnie*}
begin
repeat
write('Podaj ilosc uczniow: ');
readln(w);
write('Podaj ilosc kolumn: ');
readln(k);
write('Podaj ilosc tygodni: ');
readln(s);
until (w>0) and (w<=40) and (k>0) and (k<=3)
and (s>0) and (s<=40);
end;

procedure wpis;
begin
writeln('Podaj nazwe pliku: ');
readln(nazwa1);
assign(plik,nazwa1);
rewrite(plik);
wymiar;
r:=1;
for i:=1 to w do {tworzenie matrycy}
for l:=r to r do

repeat
{i:=i+1;}
with osoba,data,adres do
begin
write('Podaj nr ucznia: ');
readln(nr);
write('Podaj nazwisko ucznia: ');
readln(nazw);
nazw[1]:=upcase(nazw[1]);
write('Podaj imie ucznia: ');
readln(imie);
imie[1]:=upcase(imie[1]);
write('Podaj dz. urodzenia: ');
readln(dz);
write('Podaj miesiac urodzenia: ');
readln(mc);
write('Podaj rok urodzenia: ');
readln(rok);
write('Podaj miejsce urodzenia: ');
readln(msc);
msc[1]:=upcase(msc[1]);
writeln('Adres zamieszkania');
write('Podaj ulice: ');
readln(ul);
ul[1]:=upcase(ul[1]);
write('Podaj numer domu: ');
readln(dom);
write('Podaj numer mieszkania: ');
readln(mieszk);
write('Podaj miejscowosc zamieszkania: ');
readln(msc2);
msc2[1]:=upcase(msc2[1]);
writeln;
for j:=1 to k do
for x:=1 to z do
begin
write(godziny[x],' ');
readln(obecnosc[i,j,r]);
end;
end;

{for x:=1 to z do {tak wygladalo jak obecnosc byla wektorem}
begin
write(godziny[x]:18,' : ');
readln(obecnosc[x]);
end; }

write(plik,osoba);
writeln;
writeln('Czy chcesz wprowadzic kolejnego ucznia (T/N)?');
wpi:=readkey;
wpi:=upcase(wpi);
until wpi='N';
close(plik);
end;

błąd jest taki że w zapytaniu o ilośc godzin pytanie powtarza się tyle razy ile wskazałem kolumn, natomiast miało być że pytanie o liczbe zajęć przypisze odpowiedź pierwszej kolumnie, o obecność drugiej a nieobecność trzeciej.
pomocy...

0

Nie wiem czy dokladnie o to ci chodzi, ale wg mnie bład tkwi w tym
dałeś o jedna petlę za dużo (k i z są w zasadzie tym samym).

for j:=1 to k do
begin
write(godziny[j],' ');
readln(obecnosc[i,j,r]);
end;

A tak na marginesie ja bym usunął jeden wymiar tablicy obecnośc (w kodzie wskazywany przez i), gdyż każdemu uczniowi przypisywany jest tylko jeden wiersz tablicy.

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