Паскаль несколько записей передаются в функцию
Это мой код:
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);
Немного сложно быть конкретным, не зная вашего конкретного диалекта Паскаля. Однако суть в том, что я уже сказал. Вам нужно передать массив записей, а не одну запись.