توی massege ها میگه کجای کار مشکل داره....

این برنامه رو اجرا کن ببین مشکل داره باهاش و اگه داره ببین تو Massegeها چی مینویسه اونو بذار...
کد:
uses

    crt;

var

   adad: array [1..255] of integer;
   inter,tak,amal:string;
   e,c,w,i,j,tol,io,v,z,y,iop:integer;
   adad1,adad2:longint;
   op,opera:char;
   flag:boolean;
   save:text;

begin

     clrscr;
     write ('Please Inter Formula (for example 2+3) : ');
     repeat
     flag:=true;
     readln (inter);
     tol:= length(inter);
     if tol=0 then
     begin
          write ('it is blank... please try again: ');
          flag:=false;
     end;
     for i:= 1 to tol do
     begin
         tak:= inter [i];
         if tak='0' then adad [i]:= 0 else
         if tak='1' then adad [i]:= 1 else
         if tak='2' then adad [i]:= 2 else
         if tak='3' then adad [i]:= 3 else
         if tak='4' then adad [i]:= 4 else
         if tak='5' then adad [i]:= 5 else
         if tak='6' then adad [i]:= 6 else
         if tak='7' then adad [i]:= 7 else
         if tak='8' then adad [i]:= 8 else
         if tak='9' then adad [i]:= 9 else
         if tak='+' then adad [i]:= 10 else
         if tak='-' then adad [i]:= 20 else
         if tak='/' then adad [i]:= 30 else
         if tak='*' then adad [i]:= 40 else
         begin
              write ('invalid format. please try again: ');
              flag:=false;
              break;
         end;
     end;
     for i:= 1 to tol do
     begin
          j:=adad[i];
          if (j=10) or (j=20) or (j=30) or (j=40) then
          begin
               z:=i+1;
               for c:= z to tol do
               begin
                       y:=adad[c];
                       if (y=10) or (y=20) or (y=30) or (y=40) then
                       begin
                             write ('invalid format. please try again: ');
                             flag:=false;
                             break;
                       end;
               end;

     end;
     end;
     v:=adad[1];
                       if (v=10) or (v=20) or (v=30) or (v=40) then
                       begin
                                  write ('invalid format. please try again: ');
                                  flag:=false;
                       end;
     w:=adad[tol];
                       if (w=10) or (w=20) or (w=30) or (w=40) then
                       begin
                                  write ('invalid format. please try again: ');
                                  flag:=false;
                       end;

     for i := 2 to tol-1 do
     begin
                       w:=adad[i];
                       if (w=10) or (w=20) or (w=30) or (w=40) then
                       begin
                       io:=adad[i];
                       iop:=i;
                       break;
                       end
                       else
                       if (i=tol-1) then
                       begin
                       write ('invalid format. please try again: ');
                       flag:=false;
                       end;

     end;
     until flag=true;
     case io of
     10 : op:='+';
     20 : op:='-';
     30 : op:='/';
     40 : op:='*';
     end;

     assign (save,'save.dat');
     rewrite (save);
     writeln (save,op);
     for i:= 1 to iop-1 do
     write (save,adad[i]);
     writeln(save,'');
     for i:= iop+1 to tol do
     write (save,adad[i]);
     close (save);
     reset (save);
     readln (save,opera);
     readln (save,adad1);
     readln (save,adad2);
     close(save);

     writeln (adad1,' ',opera,' ',adad2);
     write ('Result: ');
     case opera of
     '+' : Write (adad1+adad2);
     '-' : Write (adad1-adad2);
     '*' : Write (adad1*adad2);
     '/' : Write (adad1/adad2);
     end;
     writeln;
     write ('Press enter to exit...');
     readln;
end.