我收到一个错误:非法表达

时间:2016-01-26 01:12:37

标签: pascal

我收到此错误:

illegal expression and Fatal: Syntax error, ; expected but : found

Pascal代码如下:

Program PaidUp;

const
size=30;

var
   payment,totm1,totm2,totm3:real;
   section1,section2,section3,i,j,idnum:integer;
   IDNUMARR:array[1..999] of integer;
   PAYMENTARR:array[1..size] of real;


Procedure InitialiseVariables;
{This procedure initialises all variables used in the program}
   Begin
      idnum:=0;
      payment:=0;
      totm1:=0;
      totm2:=0;
      totm3:=0;
      section1:=0;
      section2:=0;
      section3:=0;
      i:=0;
      j:=0;
End; {Initialise Variables}

Procedure DeclareandInitialiseArrays;
{This procedure declares and initialises all arrays used in the program}
   Begin
      IDNUMARR:array[1..999] of integer;
      PAYMENTARR:array[1..size] of real;
         For i:=1 to size do
             begin
              idnum[i]:=0;
              payment[i]:=0;
         end; {ends for statment}
End; {Declare and Initialise Variables}

Procedure PutDataIntoArray;
{This procedure puts the data into the arrays}
   Begin
  while(idnum<>0 and payment<>0 and payment=1350 and payment=1620 and  payment=1800 and payment=1650 and payment=1980 and payment=2200) do
         begin
              writeln('Invalid value, please enter another value');
              readln(idnum);
              readln(payment);
         end;{ends while statement}
              set j:=j+1;
              idnum[j]:=idnum;
              payment[j]:=payment;
End; {Put Data Into Array}

 Procedure DetermineStatisticsInformation;
{This procedure determines which masqueraders belong to which group, tallys  the total persons in a section and totals the amount of money paid in each section for costumes}
   Begin
      For j:=1 to size do
         begin
              if(payment[j]=1350 and payment[j]=1650) then
                  begin
                       writeln('Masquerader with memid:idnum[j] belongs to  section1');
                       section1:= section1+1;
                       totm1:= totm1+payment[j];
                  end;{ends if statement}
              if(payment[j]=1620 and payment[j]=1980) then
                  begin
                       writeln('Masquerader with memid:idnum[j] belongs to section2');
                       section2:= section2+1;
                       totm2:=totm2+payment[j];
                  end;{ends if statement}
              if(payment[j]=1800 and payment[j]=2200)then
                  begin
                       writeln('Masquerader with memid:idnum[j] belongs to section3');
                       section3:= section3+1;
                       totm3:=totm3+payment[j];
                  end;{ends if statement}
End. {Determine Statistics Information}

Procedure PrintResults;
{This procedure outputs all information}
 Begin
  writeln('The number of masqueraders in section 1 is:', section1);
  writeln('The number of masqueraders in section 2 is:', section2);
  writeln('The number of masqueraders in section 3 is:', section3);
  writeln('Total Amount of money paid in section 1 is:', totm1);
  writeln('Total Amount of money paid in section 2 is:', totm2);
  writeln('Total Amount of money paid in section 3 is:', totm3);
End. {Print Results}

2 个答案:

答案 0 :(得分:1)

代码充满了错误,永远无法编译。

  1. 您使用idnum和payment作为数组,但您已将其声明为整数!如果需要数组,请改用IDNUMARR和PAYMENTARR。
  2. 在第9行和第10行中,您声明了全局变量IDNUMARR PAYMENTARR,但您在过程DeclareandInitialiseArrays
  3. 中再次将其声明为局部变量
  4. 几乎所有if语句都无效

    如果(付款[j] = 1620且付款[j] = 1980)则

  5. 首先评估“和”运算符,这会导致逻辑比较“1620和payment [j]”(这不是有效的语法)。

    您必须将每个比较放入括号中:

    if(payment[j]=1620) and (payment[j]=1980) then
    

    4。设j:= j + 1; 你究竟应该发生什么? 我想你只想增加j

    j:=j+1;
    
    1. 所有程序都必须结束;而不是。
    2. 最后的“开始结束”。在你执行所有程序的地方缺少。
    3. 可能还有很多人......

答案 1 :(得分:0)

这是错误的,还有其他类似的行:

  if(payment[j]=1350 and payment[j]=1650) then

让它看起来像if(..)和(..)然后