МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Программирование на языках высокого уровня

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

    МОСКОВСКИЙ ИНСТИТУТ РАДИОТЕХНИКИ,

    ЭЛЕКТРОНИКИ И АВТОМАТИКИ

    (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

    КУРСОВАЯ РАБОТА

    Программирование на языках В/У

    Студент:

    Группа:

    Москва 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=#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^.sFest) THEN begin

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

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

    IF (L^.snil 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" в прописные буквы. Если же это прописная

    буква или любой другой символ, то в результате преобразования ничего не

    изменится.

    Далее программа исключает слова, которые стоят между двумя одинарными

    кавычками. Чаще всего это текст, который печатается стандартной процедурой

    WRITE. Проверяется условие, если символ в переменной ch является символом "

    ' ", то тогда начинается цикл, образованный операторами REPEAT и UNTIL. В

    этом цикле программа считывает из файла в переменную ch символы до тех пор

    пока символ в переменной ch снова не будет равен символу " ' ". Далее цикл

    завершается, и переменная ch будет содержать символ " ' ".

    Далее аналогичным способом программа исключает комментарии,

    встречающиеся в тексте программы, т. е. текст стоящий между двумя фигурными

    скобками. Проверяется условие, если символ в переменной ch является

    символом " { ", то тогда начинается цикл, образованный операторами REPEAT и

    UNTIL. В этом цикле программа считывает из файла в переменную ch символы до

    тех пор пока символ в переменной ch не станет равен символу " } ". Далее

    цикл завершается, и переменная ch будет содержать символ " } ".

    Далее программа производит проверку символа в переменной ch и если он

    равен одному из символов: " ", '!', " ' ", "#", "$", "%", "&", "*", "+",

    ",", "-", ".", "/", ":", ";", "", "@", "[", "], "\", "^", "`",

    "|", "~", "(", ")", код символа #10, код символа #13, "}", то это означает

    что слово в тексте, если оно было перед этими символами закончилось. И

    переменной a (признак конца слова) присваивается значение true. Если же

    символ в переменной ch не равен ни одному из этих символов, это означает,

    что это значащий символ, то переменная a останется равной false, и

    программа добавит этот символ в переменную st, содержащую текущее

    сформированное программой слово. Слово это будет содержаться в переменной

    строкового типа st. И если а будет равно true, то тогда начнется проверка

    этого слова. Если это окажется идентификатором, то оно запишется в список

    L, а если оно уже есть в списке, то тогда число вхождений этого слова в

    программе, которое содержится в этом же списке, увеличится на 1.

    Если а равно true, то начинается блок программы, проверяющий текущее

    значение слова в переменной st.

    1) Если переменная st содержит слово "BEGIN", то тогда переменным c

    (признак считывания раздела программы, после встречи слов: TYPE, VAR,

    CONST, PROCEDURE, FUNCTION) присваивается значение false, e (признак

    считывания раздела программы, после встречи слова LABEL) присваивается

    значение false.

    2) Если переменная st содержит одно из слов: "TYPE", "VAR", "CONST",

    "PROCEDURE", "FUNCTION", то тогда переменным c (признак считывания раздела

    программы, после встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION)

    присваивается значение true, e (признак считывания раздела программы, после

    встречи слова LABEL) присваивается значение false, и переменной st

    присваивается пустая строка, т. к. она содержала одно из слов "TYPE",

    "VAR", "CONST", "PROCEDURE", "FUNCTION", а они не являются

    идентификаторами.

    3) Если переменная st содержит слово "LABEL", то тогда переменным c

    (признак считывания раздела программы, после встречи слов: TYPE, VAR,

    CONST, PROCEDURE, FUNCTION) присваивается значение false, e (признак

    считывания раздела программы, после встречи слова LABEL) присваивается

    значение true, и переменной st присваивается пустая строка, т. к. она

    содержала слово "LABEL", а оно не являетя идентификатором.

    4) Если переменная st содержит одно из слов: "AND", "XOR", "NOT", "OR",

    "DIV", "MOD", "SHL", "SHR", "NIL", "OBJECT", "ARRAY", "FILE", "OF",

    "RECORD", "SET", "BYTE", "SHORTINT", "WORD", "INTEGER", "LONGINT",

    "STRING", "BOOLEAN", "REAL", "DOUBLE", "EXTENDED", "COMP", "CHAR", "END",

    "TEXT", то переменной st присваивается пустая строка, т. к. она содержала

    одно из этих слов, а оно не является идентификатором.

    5) Если переменные с (признак считывания раздела программы, после

    встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) равно true, e (признак

    считывания раздела программы, после встречи слова LABEL) равно false, что

    соответствует разделу описательной части программы, и не разделу описания

    меток, и первый символ в строке равен цифре, то тогда переменной st

    присваивается пустая строка, т. к. она содержит слово, находящееся в

    описательной части программы и начинающееся с цифры, т. е. цифру. А цифры в

    описательной части программы, если они не являются метками, то и не

    являются идентификаторами.

    6) Если переменные с (признак считывания раздела программы, после

    встречи слов: TYPE, VAR, CONST, PROCEDURE, FUNCTION) равно false, e

    (признак считывания раздела программы, после встречи слова LABEL) равно

    false, что соответствует разделу программы стоящей между словами BEGIN и

    END, и первый символ в строке равен цифре, а текущее значение переменной ch

    не равно символу " : ", то тогда переменной st присваивается пустая строка,

    т. к. она содержит слово, находящееся в части программы, стоящей между

    словами BEGIN END, и начинающееся с цифры, т. е. цифру. А цифры в части

    программы, стоящей между словами BEGIN END, после которых не стоит символ "

    : " не являются метками и не являются идентификаторами.

    7) С помощью оператора WHILE образуется цикл: в то время как указатель

    L не равен значению nil, то есть список L уже содержит какие-то слова из

    текста программы и число вхождений каждого из этих слов, и переменная st не

    равна пустой строке проверяется условие. Если значение в поле s

    динамической переменной структуры Recspisok, адрес которой содержится в

    указателе L равно слову содержащемуся в переменной st, то выполняется

    следующие действия. Значению в поле k динамической переменной структуры

    Страницы: 1, 2


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.