Помогите, пожалуйста. В упор не доходит, как делать.
Задача: Есть файл, содержащий текст программы на Паскале. Преобразовать его в файл слов. Проверить в нём соответствие begin и end, case и end. Подсчитать кол-во соответствующих операторов.
Вот программка, которую я написала. Работает, но неправильно. Считает кол-во букв почему-то. ?
Код
program Pascal;
{$APPTYPE CONSOLE}
uses
SysUtils;
var fst: file of shortstring;
m,n,k, st_l, p,x,y,z,c: Integer;
s, word_t: shortstring;
begin
k:=0;
m:=0;
n:=0;
p:=1;
assignfile (fst, 'c:\bykva');
rewrite(fst);
Writeln('vvedite stroki');
readln(s);
write(fst,S);
closefile(fst);
assignfile (fst, 'c:\bykva');
reset(fst);
while not eof(fst) do begin
read(fst,s);
x:=pos('begin', s);
y:=pos('end', s);
z:=pos('case', s);
st_l:=length(s);
while p<=st_l do
begin
p:=p+1;
if not (s[p] in [' ', ',', '.']) then
begin
if x>0 then begin
n:=n+1;
end
ELSE if y>0 then begin
m:=m+1;
end
else if z>0 then begin
k:=k+1;
end;
end;
end;
end;
writeln(n:2, m:2, k:2);
c:=n+k;
If c=m then
Writeln('kol-vo operetorov sootvetstvyushee')
else writeln('Ne pravilno!');
Closefile(fst);
Readln;
end.
{$APPTYPE CONSOLE}
uses
SysUtils;
var fst: file of shortstring;
m,n,k, st_l, p,x,y,z,c: Integer;
s, word_t: shortstring;
begin
k:=0;
m:=0;
n:=0;
p:=1;
assignfile (fst, 'c:\bykva');
rewrite(fst);
Writeln('vvedite stroki');
readln(s);
write(fst,S);
closefile(fst);
assignfile (fst, 'c:\bykva');
reset(fst);
while not eof(fst) do begin
read(fst,s);
x:=pos('begin', s);
y:=pos('end', s);
z:=pos('case', s);
st_l:=length(s);
while p<=st_l do
begin
p:=p+1;
if not (s[p] in [' ', ',', '.']) then
begin
if x>0 then begin
n:=n+1;
end
ELSE if y>0 then begin
m:=m+1;
end
else if z>0 then begin
k:=k+1;
end;
end;
end;
end;
writeln(n:2, m:2, k:2);
c:=n+k;
If c=m then
Writeln('kol-vo operetorov sootvetstvyushee')
else writeln('Ne pravilno!');
Closefile(fst);
Readln;
end.
Задачу несколько упростила- лишь бы работала. Просто написала, чтобы нужные слова вводились, и они же считались.
Я понимаю, что здесь рассматриваются задачи, написанные в Паскале, но из Паскаля легко можно преобразовать в Делфи, и наоборот.