Nie wiem, czy dobrze zrozumiałem, co oznacza sformułowanie "obiektowy model słuchacza", ale jeśli chodzi o typ object odpowiedzialny za słuchacza i liczenie średniej jego ocen, to można to zrobić to w sposób następujący:
type TSluchacz = object
oceny: array[1..20] of byte; {zakladamy, ze 20 ocen starczy na jednego ucznia}
ilosc: byte; {zmienna odpowiada za ilosc ocen}
procedure DodajOcene(Ocena: byte); {procedurka sluzy do dodania oceny do danych}
function Srednia: Real; {funkcja liczy i zwraca srednia ocen}
end;
var Sluchacz: TSluchacz;
procedure TSluchacz.DodajOcene(Ocena: byte);
begin
if ilosc=20 then writeln('Za duzo ocen!')
else begin
Inc(ilosc); {zwiekszamy licznik ocen}
oceny[ilosc]:=Ocena; {dodajemy ocene}
end;
end;
function TSluchacz.Srednia: real;
var
i: byte;
s: integer;
begin
if ilosc=0 then writeln('Brak ocen!')
else begin
s:=0;
for i:=1 to ilosc do s:=s+oceny[i]; {sumujemy wszystkie oceny}
Srednia:=s/ilosc; {i dzielimy przez ich ilosc}
end;
end;
Oczywiście jest to tylko prosty obiekcik, ma trochę mało zabezpieczeń, obsługuje tylko 20 ocen itp., ale na początek powinno starczyć. Generalnie przydałoby się coś do odczytywania ocen, dodanie listy jednokierunkowej zamiast tablicy, aby móc obsługiwać niemal nieograniczoną ilość ocen i parę innych udogodnień, ale mocno by to zamotało wszystko.</delphi>