I'm getting an Error:Illegal Expression

女生的网名这么多〃 提交于 2019-12-13 11:22:50

问题


I get this error:

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

The Pascal code is below:

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}

回答1:


The code is full of errors and would never compile.

  1. You use idnum and payment as array but you've declared it as integer! If you need the array, use IDNUMARR and PAYMENTARR instead.
  2. In line 9 and 10 you declare the global var IDNUMARR PAYMENTARR but you declare it again as a local var in the procedure DeclareandInitialiseArrays
  3. Almost all if-statements are invalid

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

The "and" operator is evaluated always first which results in the logical comparison "1620 and payment[j]" (which is not a valid syntax).

You have to put every comparison into brackets like this:

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

4. set j:=j+1; What exactly do you expect should happen?? I think you just want increase j

j:=j+1;
  1. All procedures have to end with ; and not .
  2. the final "begin end." is missing where you execute all your program.

And probably many others...




回答2:


This is wrong, and other lines like it:

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

Make it look like if (..) and (..) then



来源:https://stackoverflow.com/questions/35005450/im-getting-an-errorillegal-expression

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!