Паскаль несколько записей передаются в функцию

Это мой код:

 type
  TStudent = record
    Firstname:string[15];
    Surname:string[15];
    dateofbirth:tdatetime;
    gender: char;
    ASmark: integer;
  end;


var student: array [1..10] of tstudent;
    option:integer;   

...

function readrecord:tstudent;
var //dob:string;
    i:integer;
begin
   for i := 1 to 10 do
   begin
    Writeln('Enter Firstname for student ',i, ' : ');
    readln(student[i].firstname);
    Writeln('Enter Surname ',i, ' : ');
    readln(student[i].Surname);
    writeln('Enter Date of Birth ',i, ' : ');
    //readln(dob);
    //student[i].dateofbirth:=strtodate(dob);
    Writeln('Enter Gender (M or F) ',i, ' : ');
    readln(student[i].gender);
    Writeln('Enter AS Mark ',i, ' : ');
    readln(student[i].ASmark);
   end;
end;  

На данный момент DOB закомментирован, не беспокойтесь об этом:)

procedure averagemark(var student:tstudent);

var mark:real;i:integer;
begin
   mark:=0;
   for  i := 1 to 10 do
   begin
   mark:=mark+(student[i].asmark);
   end;
   mark:=(mark/10);
   writeln('Average mark: ',mark:5:2);



end;  

Я пытаюсь получить среднее значение asmarkно я получаю ошибки за mark:=mark+(student[i].asmark); которые Error: no default property available а также Fatal: Syntax error,")" expected but "[" found,

Было бы очень признательно, если бы кто-то мог указать мне правильное направление, так как я много чего пробовал, а также исследовал.

Я также создал тип данных под названием tstudenta который был массивом tstudent запись, затем установить student:tstudentr; но и здесь не повезло.

1 ответ

procedure averagemark(var student: tstudent);

Вы передаете здесь одну запись вместо массива. Используйте открытый массив:

procedure averagemark(const students: array of tstudent);

Петля от low(students) в high(students) вместо жесткого кодирования границ массива.

Если ваш диалект Паскаля не поддерживает открытые массивы, то вам следует использовать массив. Если достаточно использовать массив с фиксированной длиной 10, вы можете определить тип массива следующим образом:

type
  TStudentArray = array [1..10] of TStudent;

Затем вы будете использовать этот тип для параметра вашей процедуры:

procedure averagemark(const students: TStudentArray);

Немного сложно быть конкретным, не зная вашего конкретного диалекта Паскаля. Однако суть в том, что я уже сказал. Вам нужно передать массив записей, а не одну запись.

Другие вопросы по тегам