Дан текстовый файл F,содержащий программа на языке паскаль.проверить эту программу на несоответствие числа открывающих и закрывающих операторных скобок (begin и end) — Pascal(Паскаль)

assign(F,'///');
reset(F);
//Читаем файл до конца.. 
//и ищем..
pro:=pos('end.'S);//Ищем end. в строке тоесть в файле..
//если есть то дальше если он нашел то он возвратит порядковый номер символа (по счету).
if (pro>0) then 
begin
writeln('da');
end
else
writeln('no');
 
//Смотри мы нашли заканчивание програмы. теперь надо проверить begin
//Но может быть ситуация когда программа не правильно написанно не хватает end; верно?
//И дальше считает сколько begin
//И столько должно быть begin Только на 1 больше
for i:=1 to length(S) do
begin
beg:=pos('begin',S); //Ищем begin
S:=copy(S,beg+1,length(S)); //Тут ты читаешь в строку S из файла..до этого ..как только нашел то копируем обратно откидывая другую часть в коорой уже производился поиск.. и те самым..
 if (beg>0) then 
begin
res:=res+1; 
end; 
end;
 
 
 
for i:=1 to length(S) do
begin
beg:=pos('end;',S); //Ищем begin
S:=copy(S,beg+1,length(S)); //Тут ты читаешь в строку S из файла..до этого ..как только нашел то копируем обратно откидывая другую часть в коорой уже производился поиск.. и те самым..
 if (beg>0) then 
begin
res1:=res1+1; 
end; 
end;
 
if (res>res1) then //Тоесть если begin больше чем end; то делаем..
//Дальше сам уже как надо тебе

Вариант 2

Uses Crt;
 
Const
     OperatorCount = 5;
     Operator: Array[1..OperatorCount] of String = ('end','begin','case','record','object');
     Symb = [#32,#8,#59,#46,#123,#125,#40,#41];
Var
   PasFile: Text;
   S: String;
   i,n: Integer;
   Bracket: Array[1..2] of Integer;
begin
 ClrScr;
 Assign(PasFile, 'C:\ASCIITAB.PAS');
 Reset(PasFile);
 
 Bracket[1] := 0; Bracket[2] := 0;
 while not Eof(PasFile)
 do begin
    ReadLn(PasFile, S);
    S := S + ' ';
    for i := 1 to OperatorCount
    do begin
       n := Pos(Operator[i], S);
       case n
       of 0: Continue;
          1: if S[n+Length(Operator[i])] in Symb
             then if i = 1
                  then Inc(Bracket[1])
                  else Inc(Bracket[2]);
          else if (S[n-1] in Symb) and (S[n+Length(Operator[i])] in Symb)
               then if i = 1
                    then Inc(Bracket[1])
                    else Inc(Bracket[2]);
          end;
       end;
    end;
 Close(PasFile);
 WriteLn(Bracket[1],' ',Bracket[2]);
 ReadLn;
end.

Leave a Comment

+ 85 = 86