Программирование на языках высокого уровня
Другие рефераты
МОСКОВСКИЙ ИНСТИТУТ РАДИОТЕХНИКИ,
ЭЛЕКТРОНИКИ И АВТОМАТИКИ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
КУРСОВАЯ РАБОТА
Программирование на языках В/У
Студент:
Группа:
Москва 2003
СОДЕРЖАНИЕ
1 ЗАДАНИЕ 3
2 БЛОК-СХЕМА ПРОГРАММЫ 3
3 ТЕКСТ ПРОГРАММЫ 7
4 ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ 9
5 РУКОВОДСТВО ОПЕРАТОРА 18
1 ЗАДАНИЕ
Напечатать в алфавитном порядке все различные идентификаторы программы
на языке Pascal, указав для каждого число его вхождений в тексте программы.
Программа находится в текстовом файле. Максимальная длина
идентификатора заранее неизвестна.
2 БЛОК-СХЕМА ПРОГРАММЫ
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Нет Да
Да
Нет
Нет
Да
Да
Нет
Нет
Да
Да
Нет
Да
Нет
Да
Нет
Да
Нет
Да
Нет
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<>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<>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 |Вспомогательный указатель, для записи адреса |
| | |вспомогательного элемента списка
| | скачать работу |
Другие рефераты
|