Подсчитать, какие ключевые слова Паскаля использованы в обрабатываемом тексте - Pascal
Формулировка задачи:
пожалуйста, ! завтра сдавать контрольную, а у меня нет ничего(
ПОЖАЛУЙСТА, НАДО написать программу!!
Текст программы на Паскале хранится в файле на диске. Составить программу обработки текста программы: 1) Подсчитать, какие ключевые слова Паскаля и в каком колличестве использованы в обрабатываемом тексте; 2)Составить перечень имен простых переменных, используемых в левой части оператора присваивания; 3) представить перечень меток программы в алфавитном порядке.
Решение задачи: «Подсчитать, какие ключевые слова Паскаля использованы в обрабатываемом тексте»
textual
Листинг программы
uses crt; const ks: array [1..39] of string=('program','uses','const','var','label','type','begin','end', 'and','or','not','div','mod','if','then','else','case','of', 'byte','integer','real','char','string','array','record','file','set', 'for','to','do','downto','goto','in','nil','repeat','until','while', 'function','procedure'); r: set of char=[' ',':',';',',']; function CutName (str: string; q: byte): string; var sss: string; begin sss:=''; while (q>=1) and (str[q] in ['a'..'z','0'..'9']) do begin sss:=str[q]+sss; dec(q); end; CutName:=sss; end; function CutNameF (str: string; q: byte): string; var sss: string; begin sss:=''; while (q<=length(str)) and (str[q] in ['a'..'z','0'..'9']) do begin sss:=sss+str[q]; inc(q); end; CutNameF:=sss; end; var f: text; k: array [1..39] of integer; s,sl,nm,lb: string; i,j: byte; c: char; begin assign(f,'D:\in.pas'); reset(f); nm:=''; sl:=''; lb:=''; j:=0; while not (eof(f)) do begin readln(f,s); s:=' '+s+' '; if pos('label',s)<>0 then begin sl:=copy(s,pos('label',s)+5,pos(';',s)-pos('label',s)+5); for c:='a' to 'z' do for j:=2 to length(s) do if (sl[j]=c) and (sl[j-1] in r) then lb:=lb+CutNameF (sl,j)+' '; sl:=''; end; for i:=2 to length(s) do if copy(s,i,2)=':=' then nm:=nm+CutName (s,i-1)+', '; for i:=1 to length(s) do if not (s[i] in r) then sl:=sl+s[i] else if length(sl)>0 then begin for j:=1 to 39 do if sl=ks[j] then inc(k[j]); sl:=''; end; end; close(f); clrscr; writeln('Ключевые слова:'); j:=0; for i:=1 to 39 do if k[i]<>0 then begin inc(j); writeln(ks[i]:10,'- ',k[i]); if i mod 19=0 then begin writeln('Enter to continue...'); readln(); clrscr; writeln('Ключевые слова:'); end; end; writeln('Enter to continue...'); readln(); clrscr; writeln('Перечень простых переменных: ',nm); writeln('Перечень меток в алфавитном порядке: ',lb); readln; end.
Объяснение кода листинга программы
- В начале кода объявляются переменные и константы, используемые в дальнейшем.
- Функция CutName используется для обрезки строки, удаляя все символы до указанного индекса.
- Функция CutNameF используется для обрезки строки, удаляя все символы после указанного индекса.
- Переменная f используется для чтения текста из файла.
- Переменные s, sl, nm, lb и c используются для хранения различных частей текста.
- В цикле while считывается текст из файла, строка разделяется на слова, и каждое слово проверяется на наличие метки.
- Если слово является меткой, то оно обрезается с помощью функций CutName и CutNameF, и результат добавляется к переменной lb.
- Если слово не является меткой, то оно проверяется на наличие одного из ключевых слов Паскаля. Если слово совпадает с одним из ключевых слов, то оно добавляется в переменную k.
- После завершения цикла while выводится список ключевых слов Паскаля, для которых было найдено совпадение.
- Затем выводится список меток в алфавитном порядке.
- В конце программы выводится запрос на ввод для продолжения работы программы.
- При вводе
Enter
программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д