RSS    

   Реферат: Программирование на языках высокого уровня

br>

3   ТЕКСТ ПРОГРАММЫ

Program Project1;

{$APPTYPE CONSOLE}

Uses SysUtils;

type spisok=^Recspisok;

Recspisok=record

s:String; k:word; p:spisok; end;

var a,b,c,e:boolean; ch:char; st:string;

L,Fst,FEst,PEst,Est,temp:spisok; f:text;

label lb;

BEGIN

Fst:=nil;

Write('File >: '); ReadLn(st);

Assign(f,st); Reset(f); st:='';

REPEAT

L:=Fst;

a:=false; {a-признак конца слова}

b:=false; {b-признак наличия текущего слова в списке}

Read(f,ch);ch:=UpCase(ch);

{УДАЛЕНИЕ СЛОВ, ПЕЧАТАЕМЫХ ПРОЦЕДУРОЙ WRITE}

if ch='''' then begin

Repeat Read(f,ch); Until ch=''''; end;

{УДАЛЕНИЕ КОМЕНТАРИЕВ}

if ch='{' then begin

Repeat Read(f,ch); Until ch='}'; end;

{ПРОВЕРКА СИМВОЛА НА ПРИЗНАК КОНЦА СЛОВА}

if (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='}')

then a:=true;

{ЕСЛИ a=true, ТО СЛОВО СФОРМИРОВАНО. ПЕРЕХОДИМ К ПРОВЕРКЕ}

if (a=true) THEN BEGIN

IF (ST='BEGIN') THEN begin c:=false; e:=false; end;

IF (ST='TYPE') OR (ST='VAR') OR (ST='CONST') OR (ST='PROCEDURE') OR (ST='FUNCTION') THEN

begin c:=true; e:=false; ST:=''; end;

IF (ST='LABEL') THEN begin c:=true; e:=true; ST:=''; end;

{УДАЛЕНИЕ ЗАРЕЗЕРВИРОВАННЫХ СЛОВ}

if (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') then st:='';

{--УДАЛЕНИЕ ЦИФР В ОПИСАНИИ ПЕРЕМЕННЫХ--}

if (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')) then st:='';

{--УДАЛЕНИЕ ЦИФР В ПРОГРАММЕ--}

if (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<>':') then st:='';

{УВЕЛИЧЕНИЕ СЧЕТЧИКА СЛОВА НА ЕДИНИЦУ. ЕСЛИ ЭТО СЛОВО УЖЕ ЕСТЬ}

while (L<>nil) and (st<>'') do begin

if L^.s=st then begin L^.k:=L^.k+1; st:=''; b:=true; L:=L^.p; end

else L:=L^.p; end;

{ДОБАВЛЕНИЕ СЛОВА. ЕСЛИ ЕГО НЕТ В СПИСКЕ}

if (b=false) and (st<>'') and (c=true) then begin L:=Fst;

New(Fst); Fst^.s:=st; Fst^.k:=1; Fst^.p:=L; L:=Fst; st:=''; end else st:='';

END ELSE st:=st+ch;

UNTIL ch=#26;

{ФОРМИРОВАНИЕ ОТСОРТИРОВАННОГО СПИСКА}

New(FEst); FEst^.s:=L^.s; FEst^.k:=L^.k; FEst^.p:=nil;

lb: L:=L^.p; Est:=FEst;

While L<>nil do BEGIN

IF L^.s>Est^.s THEN begin PEst:=Est; Est:=Est^.p; end;

IF Est=nil THEN begin New(temp); temp^.s:=L^.s; temp^.k:=L^.k;

temp^.p:=nil; PEst^.p:=temp; goto lb; end;

IF (L^.s<Est^.s) and (Est<>Fest) THEN begin

New(temp); temp^.s:=L^.s; temp^.k:=L^.k; temp^.p:=Est;

PEst^.p:=temp; goto lb; end;

IF (L^.s<Est^.s) and (Est=FEst) THEN begin

New(temp); temp^.s:=L^.s; temp^.k:=L^.k; temp^.p:=FEst;

FEst:=temp; goto lb; end;

                END;

while Est<>nil do begin Write(Est^.s,'=',Est^.k,'; '); Est:=Est^.p; end;

ReadLn;

END.

END.


4   ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ

ТАБЛИЦА ТИПОВ, ИСПОЛЬЗУЕМЫХ ПРОГРАММОЙ

Имя типа

Тип

Назначение

spisok Динамическая переменная со структурой Recspisok
Recspisok record запись, содержащая переменную типа String (s) для хранения слова, переменную типа word (k) для хранения числа входов этого слова в тексте программы и ссылку (p).

ТАБЛИЦА ПЕРЕМЕННЫХ, ИСПОЛЬЗУЕМЫХ ПРОГРАММОЙ

Имя

Тип

Назначение

a boolean Признак конца слова
b boolean Признак наличия текущего слова в списке L
c boolean Признак считывания раздела программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION
e boolean Признак считывания раздела программы, после встречи слова LABEL
ch char Символы, которые считываются из текстового файла
st string Переменная содержащая отдельное слово из текстового файла
L spisok Указатель, содержащий адрес произвольного элемента списка L, который содержит все имена идентификаторов программы, а также число вхождений этих идентификаторов в программе
Fst spisok Указатель, содержащий адрес первого элемента списка L
Est spisok Указатель, содержащий адрес произвольного элемента списка Est, который содержит все имена идентификаторов программы в алфавитном порядке, а также числе вхождений идентификаторов в программе
FEst spisok Указатель, содержащий адрес первого элемента списка Est
PEst spisok Указатель, содержащий адрес произвольного элемента списка Est
temp spisok Вспомогательный указатель, для записи адреса вспомогательного элемента списка
f text Файловая переменная, содержащая текст программы

Также в программе используется метка lb.


Идентификаторы в языке Pascal – это имена констант, переменных, меток, типов, процедур, функций и полей в записях. Идентификаторы могут состоять максимум из 63 символов. Идентификатор всегда начинается буквой, за которой могут следовать буквы и цифры, а также символ подчеркивания. Пробелы и специальные символы алфавита не могут входить в идентификатор.

Специальные символы:

+ - * / = ' . : ; < > [ ] ( ) { } ^ @ $ # ! ~ %

К специальным символам относятся также следующие пары символов:

<> <= >= := (* *) (. .)

Вначале программы указателю Fst присваивается значение nil. Этот указатель, содержит адрес первого элемента списка L, который будет содержать все имена идентификаторов программы, а также число вхождений идентификаторов в программе.

Далее программа печатает на экран строку "File >: ". После этого требуется ввести путь к файлу, содержащего текст программы, и его имя и нажать клавишу "Enter". Этот путь и имя файла считываются в переменную st. Далее файловая переменная f связывается с именем файла, содержащимся в переменной st, в результате обращения к стандартной процедуре ASSIGN. Далее программа инициирует файл для чтения с помощью стандартной процедуры RESET. При выполнении этой процедуры дисковый файл подготавливается к чтению информации. В результате специальная переменная-указатель, связанная с этим файлом, f будет указывать на начало файла, т. е. на компонент с порядковым номером 0. После этого переменной st присваиваем пустую строку.

Далее организуется цикл с помощью операторов REPEAT и UNTIL, который выполняется до тех пор пока переменная типа char сh не станет равной символу EOF (код #26). В этом цикле программа будет считывать символы из текстового файла и записывать их в переменную ch. Если перед выполнением чтения указатель файла достигнет конца очередной строки, то результатом чтения будет символ CR (код #13), а если достигнут конец файла, то – символ EOF (код #26). В результате работы этого цикла весь текстовый файл будет считан и сформирован список идентификаторов, а также число их вхождений в тексте программы на языке Pascal.

Вначале цикла указатель L, который имеет адрес произвольного элемента списка L, принимает значение указателя Fst. Затем переменным а (признак конца слова) и b (Признак наличия текущего слова в списке L) присваивается значение false. Далее с помощью стандартной процедуры READ из файловой переменной f считывается символ, на который указывает указатель файла, в переменную ch. В первом цикле это будет первый символ текстового файла. При помощи стандартной процедуры UPCASE программа из преобразует символы латинского алфавита от "а" до "z" в прописные буквы. Если же это прописная буква или любой другой символ, то в результате преобразования ничего не изменится.

Страницы: 1, 2, 3, 4, 5, 6


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.