Программирование на языках высокого уровня
ой переменной, адрес которой содержится
в указателе Est. И значению адреса указателя присваивается значение,
содержащееся в поле р данной динамической переменной, на которую ссылается
этот указатель.
Далее программа ждет нажатия на клавишу "Enter" при помощи процедуры
READLN. Программа завершает работу.
5 РУКОВОДСТВО ОПЕРАТОРА
Напечатать в алфавитном порядке все различные идентификаторы программы
на языке Pascal, указав для каждого число его вхождений в тексте программы.
Программа находится в текстовом файле. Максимальная длина
идентификатора заранее неизвестна.
Вначале программа спрашивает имя текстового файла, в котором находится
программа. Программа выдает на экран строку:
|File >: |
Далее требуется ввести путь к файлу, содержащего текст программы, и его
имя и нажать клавишу "Enter".
К примеру возьмем текст данной программы. Для этого необходимо ввести
путь к этому файлу и его имя. К примеру, если файл имеет имя "kurs.pas" и
находится в директории "Programs" на логическом диске С, то для того, чтобы
программа начала работу с текстом данного файла необходимо ввести следующую
строку: "C:Programskurs.pas".
После этого программа начинает считывать каждый символ текста по
очереди, формирует слова, исключает зарезервированные слова и другие
символы, выбирает из этих слов идентификаторы, считает количество вхождений
каждого идентификатора в программе и формирует список. Затем программа
сортирует получившийся список по алфавиту и выводит на экран в алфавитном
порядке все идентификаторы программы, указывая число вхождений каждого
идентификатора программы.
В данном примере список L можно представить в виде:
|LB |5 | |
|F |6 | |
|TEMP |16 | |
|EST |17 | |
. . .
|SPISOK |3 |nil|
Далее программа составляет новый список, состоящий из элементов списка
L (имен идентификаторов программы, а также чисел их вхождений в тексте
программы), отсортированных в алфавитном порядке.
Изначально список Est будет иметь один элемент (первый элемент списка
L). Далее элементы из списка L по очереди будут добавляться в список Est.
Список Est будет формироваться по алфавиту, то есть вначале список Еst
содержит один элемент:
|LB |5 |nil|
Далее программа выберет из списка L следующий элемент:
|F |6 | |
Имя F младше по алфавиту имени LB, соответственно список Est будет
преобразован в следующий список:
|F |6 | |
|LB |5 |nil|
И так далее до тех пор пока список L не кончится. Программа проверяет
старше ли имя идентификатора элемента списка L имени идентификатора
изначально первого элемента списка Est. Если да, то программа переходит к
сравнению имени идентификатора элемента списка L со следующим именем
идентификатора элемента списка Est. Как только список Est заканчивается или
же имя идентификатора списка L будет младше имени идентификатора элемента
списка Est, то программа вставляет элемент списка L после предыдущего
элемента списка Est.
В итоге программа распечатает на экран содержание списка Est, что в
данном примере будет выглядеть следующим образом:
A=4; B=4; C=7; CH=44; E=6; EST=17; F=6; FEST=10; FST=10; K=14; L=33;
LB=5; P=14; PEST=4; RECSPISOK=2; S=19; SPISOK=3; ST=75; TEMP=16;
Далее программа ждет нажатия на клавишу "Enter". После этого программа
завершает работу.
-----------------------
ST:=''??????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????
????????????????????????????;
(st='AND') or (st='XOR') or (st='NOT') or (st='OR') or (st='DIV') or
(st='MOD') or (st='SHL') or (st='SHR') or (st='NIL') or (st='OBJECT') or
(st='ARRAY') or (st='FILE') or (st='OF') or (st='RECORD') or (st='SET') or
(st='BYTE') or (st='SHORTINT') or (st='WORD') or (st='INTEGER') or
(st='LONGINT') or (st='STRING') or (st='BOOLEAN') or (st='REAL') or
(st='DOUBLE') or (st='EXTENDED') or (st='COMP') or (st='CHAR') or
(st='END') or (st='TEXT')
c:=true; e:=true; ST:='';
ST='LABEL'
c:=true; e:=false; ST:=''
Fst:=nil;
Write('File >: '); ReadLn(st);
Assign(f,st); Reset(f); st:='';
L:=L^.p;
L^.k:=L^.k+1;
st:=''; b:=true; L:=L^.p;
L^.s=st
L<>nil
L:=L^.p; Est:=FEst;
(L<>nil) and (st<>'')
ST:='';
New(FEst); FEst^.s:=L^.s; FEst^.k:=L^.k; FEst^.p:=nil;
st:=st+ch;
(e=false) and (c=false) and ((st[1]='0') or (st[1]='1') or (st[1]='2') or
(st[1]='3') or (st[1]='4') or (st[1]='5') or (st[1]='6') or (st[1]='7') or
(st[1]='8') or (st[1]='9')) and (ch<>':')
ST:='';
L^.s>Est^.s
(e=false) and (c=true) and ((st[1]='0') or (st[1]='1') or (st[1]='2') or
(st[1]='3') or (st[1]='4') or (st[1]='5') or (st[1]='6') or (st[1]='7') or
(st[1]='8') or (st[1]='9'))
(b=false) and (st<>'') and (c=true)
ch=#26
st:=st+ch;
Начало программы
L:=Fst; New(Fst); Fst^.s:=st; Fst^.k:=1; Fst^.p:=L; L:=Fst; st:='';
(ST='TYPE') OR (ST='VAR') OR (ST='CONST') OR (ST='PROCEDURE') OR
(ST='FUNCTION')
c:=false; e:=false;
ST='BEGIN'
a=true
a:=true;
(ch=' ') or (ch='!') or (ch='"') or (ch='#') or (ch='$') or (ch='%') or
(ch='&') or (ch='*') or (ch='+') or (ch=',') or (ch='-') or (ch='.') or
(ch='/') or (ch=':') or (ch=';') or (ch='<') or (ch='=') or (ch='>') or
(ch='@') or (ch='[') or (ch=']') or (ch='') or (ch='^') or (ch='`') or
(ch='|') or (ch='~') or (ch='(') or (ch=')') or (ch=#10) or (ch=#13) or
(ch='}')
ch='}'
Read(f,ch);
ch='{'
ch=''''
Read(f,ch);
ch=''''
L:=Fst;
a:=false; b:=false;
Read(f,ch);ch:=UpCase(ch);
Est=nil
New(temp); temp^.s:=L^.s; temp^.k:=L^.k; temp^.p:=nil; PEst^.p:=temp;
PEst:=Est; Est:=Est^.p;
New(temp); temp^.s:=L^.s; temp^.k:=L^.k; temp^.p:=Est; PEst^.p:=temp;
(L^.s<>Fest)
Est<>nil
Write(Est^.s,'=',Est^.k,'; '); Est:=Est^.p;
ReadLn;
Выход
| | скачать работу |
Программирование на языках высокого уровня |