Pascal多个记录被传递到函数中

时间:2016-01-31 20:24:27

标签: pascal

这是我的代码:

 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但在这里也没有运气。

1 个答案:

答案 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方言的知识,那就具体而言有点棘手。然而,正如我所说的那样。您需要传递一组记录而不是一条记录。