这是我的代码:
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
的{{1}}出现错误。
如果有人能指出我正确的方向,我会非常感激,因为我已经尝试过很多东西并且也在研究过。
我还创建了一个名为Fatal: Syntax error,")" expected but "[" found
的数据类型,它是tstudenta
记录的数组,然后设置tstudent
但在这里也没有运气。
答案 0 :(得分:1)
procedure averagemark(var student: tstudent);
您在此处传递单个记录而不是数组。使用开放阵列:
procedure averagemark(const students: array of tstudent);
从low(students)
循环到high(students)
,而不是硬编码数组边界。
如果您的Pascal方言不支持开放数组,那么您应该使用数组。如果使用固定长度为10的数组就足够了,那么您可以像这样定义数组类型:
type
TStudentArray = array [1..10] of TStudent;
然后,您将该类型用于您的过程参数:
procedure averagemark(const students: TStudentArray);
如果没有更多关于你的特定Pascal方言的知识,那就具体而言有点棘手。然而,正如我所说的那样。您需要传递一组记录而不是一条记录。