Министерство общего и профессионального образования Московский Государственный Университет
Экономики Статистики и Информатики Институт экономических информационных систем и
программирования
Контрольная работа
по дисциплине
“Разработка и стандартизация
программных средств и информационных
технологий”
Руководитель: Смирнов А.А. Студентка: Волкова А.В. Группа: ЗКП-401 Зачетная книжка № 97122
Москва 2001г.
Содержание:
1. Руководство пользователя. __________________________3
1.1. Назначение программы. _______________________________ 3
1.2. Описание предметной области в табличной форме._____________ 3
1.3. Граф предметной области. ____________________________ 4
1.4. Грамматика входного языка. ____________________________ 5
1.5. Примеры задания программ на входном языке. ________________ 5
2. Описание программы. ______________________________ 6
2.1. Общие сведения. ___________________________________ 6
2.2. Описание логической структуры программы. _________________ 6
2.3. Вызов и загрузка.___________________________________ 8
2.4. Входные данные. ___________________________________ 8
2.5. Выходные данные. ___________________________________ 8
2.6. Модуль лекси ческого разбора. ___________________________ 8
3. Приложения. ____________________________________10
3.1. Результаты выполнения программы._____________________ 10
3.2. Тексты модулей. __________________________________ 11
3.3. Распечатка экрана. _________________________________17
4. Список использованной литературы. ___________________18
1. Руководство пользователя.
1.1. Назначение программы.
Данная программа предназначена для создания упорядоченного каталога книг (каталог упорядочивается по названию книги). В программе предусмотрен ввод данных о книгах, просмотр и редактирование ранее введенной информации, сохранение информации на жестком диске компьютера, а также обработка информации и упорядочение ее в алфавитном порядке по названию книг, вывод каталога на экран и его распечатка на принтере. Таким образом, посредством перечисленных операций создается каталог книг.
1.2. Описание предметной области в табличной форме.
Область деятельности, к которой относятся задачи, решаемые ППП, называется предметной областью пакета.
Для разработки пакета прикладных программ предметная область представляется в виде модели.
Модель предметной области может быть представлена следующими вариантами:
- с помощью таблиц;
- с помощью графа предметной области.
Использование табличного варианта предполагает формирование нескольких таблиц (табл.№1, табл.№2, табл.№3).
Таблица №1. Таблица данных.
|
|
|
|
I
|
Количество книг
|
KolKn
|
Целое
|
2
|
Наименование книги
|
Name
|
Текстовый
|
3
|
Автор книги
|
Avtor
|
Текстовый
|
4
|
Издательство
|
Izdat
|
Текстовый
|
5
|
И т.д.
|
|
|
Таблица №2. Таблица связей по определению,
||||И||11||в:;:;
|
Старшее даккоё
|
II
|
^ШШШШЩ^Ш^З'Й^Й^^:)!!:^^^
|
ЁЙЙЧИ1№Н^^:^
|
|
1
|
Name
|
|
KolKn,
|
Avtor,
|
Izdat
|
Таблица №3. Таблица задач.
|
Ш^^^ШШ|:ШШв^^Ш11111Ш
|
ШШШШШШЩЩЖ*
|
1||111|11ШШЩ||Ж
|
Ш|||||Щррр|||;
|
IE
|
|
|
|
|
1
|
Модуль обмена
|
OBMEN
|
VHST
|
INFORM
|
2
|
Лексический разбор
|
LEXRAZ
|
VHST
|
INFORM, YPST
|
3
|
Синтаксический анализ
|
SINAN
|
YPST
|
PRST, INFORM
|
4
|
Модуль управления
|
YPRAVL
|
YPST, PRST
|
INFORM
|
5
|
Информатор
|
INFORM
|
INFORM
|
KODV
|
б
|
Модуль помощи
|
HELPER
|
|
|
1.3. Граф предметной области.
Граф предметной области (в дальнейшем ГПО) используется для описания взаимосвязи различных элементов предметной области. Стадии обработки обозначаются вершинами, а модули, которые позволяют выполнить требуемую обработку - соответствующими дугами.
Вершинами обозначены следующие стадии обработки:
1. Ввод информации о книгах;
2. Работа с уже введенной информацией;
3. Сохранение информации;
4. Обработка информации;
5. Выдача результатов обработки;
6. Завершение работы.
Дугами обозначены следующие алгоритмы:
1. Ввод данных с клавиатуры;
2. Просмотр введенной информации;
3. Редактирование введенной информации;
4. Сохранение каталога на жестком диске;
5. Упорядочение данных о книгах в алфавитном порядке для получения каталога;
6. Вывод на экран сформированного каталога;
7. Вывод на печать готового каталога.
Массив ГПО имеет вид:
1
|
2
|
2
|
3
|
2
|
3
|
3
|
4
|
4
|
5
|
5
|
б
|
5
|
6
|
7.4. Грамматика входного языка.
Входной язык ППП представляет собой специально разработанный программный язык. Как правило, он ориентируется на терминологию, привычную для пользователя прикладного программного обеспечения. Правильность предложений входного языка определяется специальным набором правил, так называемой формальной грамматикой.
Для описания формальной грамматики используем метаязык и нотацию Бэкуса-Наури. Эта нотация предусматривает использование следующих символов:
::= - по описанию есть;
| - логическое сложение (или);
<...> - скобка для обозначения нетерминального символа;
[...] - обозначение необязательного элемента.
Формальная грамматика G задается четырьмя элементами:
G={N,Z,T,F}, где N - множество нетерминальных символов (нетерминальный словарь);
Z - начальный символ (аксиома);
Т - множество терминальных символов
(терминальный словарь);
F - множество порождений.
Формальная грамматика позволяет описать входной язык пакета.
1.5. Примеры задания программ на входном языке.
<ПВЯ>::=<оператор>[<оператор>]
<оператор>::=<имя оператора> <разделитель> [<параметр>]
<признак конца оператора>
<имя оператора>::=ввод| проем| ред сохр| упоряд| экр |
печ
<разделитель>::= =
<параметр>::=<символьная константа>
<символьная константа>::=<буква>[<буква>|<цифра>]
<буква>::=А Б..Я
<цифра>::=0|1..9
<признак конца оператора>::= ;
Пример:
ВВОД=КЛАВИАТУРА; ПРОСМ=ЛЕРМОНТОВ; СОХР-С:\KATALOG_BOOK;
УПОРЯД=АВТОР; ЭКР=ЭКРАН;
2. Описание программы.
2.1. Общие сведения.
Данная программа выполняет необходимые действия в соответствии с командной информацией, заданной пользователем. Командная (управляющая) информация представляется на входном языке пакета. Программа на входном языке обрабатывается специальной управляющей программой, которая обеспечивает вызов необходимых программных модулей.
Управляющая программа составлена из следующих модулей:
2.2. Описание логической структуры программы.
Управляющая программа состоит из следующих модулей: 1.Ведущий блок, который обеспечивает выполнение требуемой последовательности других модулей. Является центральным элементом управляющей программы. 2. Модуль обмена предназначен для обеспечения связи ППП с источниками и получателями информации. Он обеспечивает: ввод ПВЯ; ввод словарей; ввод данных и вывод результатов решения.
3. Модуль лексического разбора предназначен для распознавания лексических конструкций (лексем) и преобразования ПВЯ в вид, удобный для дальнейшей обработки.
4. Модуль синтаксического анализа предназначен осуществлять проверку грамматической правильности программы на входном языке посредством анализа управляющего вектора. Он обеспечивает следующие действия: контролирует соответствие управляющего вектора графу предметной области; обеспечивает использование аппарата умолчания; обеспечивает использование макрокоманд.
5. Модуль управления обеспечивает выполнение обращений к обрабатывающим программам. Порядок обращения к обрабатывающим программам задается в управляющем векторе. При вызове обрабатывающей программы осуществляется передача параметров, часть из которых является входными данными, а остальные параметры являются результатными, для которых вычисляются новые значения.
6. Модуль информатора предназначен для выдачи сообщений о ходе решения задачи.
7. Модуль помощи предназначен для руководства действиями пользователя. Организация помощи пользователю является непременным условием эффективного функционирования прикладного программного обеспечения.
Программные модульные пакеты, реализующие алгоритмы обработки данных, затребованные в ПВЯ, реализуются в обрабатывающем модуле. Поддержание пакета в рабочем состоянии обеспечивается обслуживающими модулями. ППП представляет собой объединение входного языка, информационной базы, управляющих, обслуживающих и обрабатывающих модулей.
2.3. Вызов и загрузка.
Вызов и загрузка осуществляется запуском файла “KATALOG.PAS” из среды Turbo Pascal.
2.4. Входные данные.
2.5. Выходные данные.
2.6. Модуль лексического разбора.
Модуль лексического разбора предназначен для распознавания лексических конструкций (лексем) и преобразования ПВЯ в вид, удобный для дальнейшей обработки.
Лексический разбор представляет собой сложный алгоритм, для реализации которого может быть использована модель с конечным числом состояний, то есть конечный автомат.
Детерминированным конечным автоматом называется упорядоченная система из пяти символов:
А = (X,S,S0,B,F) , где
X - множество входных символов;
S - множество внутренних состояний;
S0 - начальное состояние;
В - функция, отображающая переход в новое состояние;
F - заключительное состояние.
Таблица конечного автомата представлена далее:
Таблица №4. Таблица конечного автомата.
|
|
|
||||||||
Ввод
|
Проем Редакт
|
Сохр
|
Упоря дочен
|
Экр Печ
|
—
|
Пробел
|
;
|
Конец строки
|
Неопозн символ
|
|
SOST=0
|
l/Fl
|
1/F1
|
1/F1
|
1/F1
|
1/F1
|
|
0
|
|
KODV =0
|
KODV= 4
|
SOST=1
|
|
|
|
|
|
2/F2
|
1
|
|
KODV =5
|
KODV= 6
|
SOST=2
|
|
|
|
|
|
|
2
|
0/F3
|
KODV =7
|
2
|
F1 - соответствует формированию управляющего вектора;
F2 - поиск начала параметра;
F3 - формирование вектора параметров.
Таблица описывает модель конечного автомата, состоящую из следующей системы символов: X = {ВВОД, ПРОСИ, РЕДАКТ, УПОРЯД, ЭКР, ПЕЧ,=,,;} S={SOST=0, SOST=1, SOST=2} S0={SOST=0} B={F1, F2, F3} F={SOST=0}
3. Приложения.
3.1. Результаты выполнения программы.
Пример 1:
Пользователем введена следующая программа: ВВОД=КЛАВИАТУРА; ПРОСМ=КИНГ; СОХР=С:/МОИ ДОКУМЕНТЫ; УПОРЯД=АВТОР; ЭКР=ВЫВОД;
Массив ГПО имеет вид:
1
|
2
|
2
|
3
|
3
|
4
|
4
|
5
|
5
|
6
|
YPST: 1;2;4;5;6;
KODV=0 - операторы введены грамматически правильно и в нужной последовательности.
Пример 2:
Пользователем введена следующая программа: ПРОСМ=ТЮТЧЕВ; ВВОД=КЛАВИАТУРА; ПЕЧ=ПРИНТЕР;
YPST: 2;1;7;
KODV=8 - операторы введены грамматически правильно, но их последовательность не соответствует ГПО.
3.2. Тексты модулей.
program katalog;
uses printer, crt; type zapis=record
prizn:integer;{признак блока}
kodvlv:integer; {код возврата}
end;
masvhst=array [1..40] of string; masypst=array [1..80] of integer; masprst=array [1..80] of string; var
vhst:masvhst; {исходный текст ПВЯ) ypst:masypst; {управляющий вектор} prst:masprst; {вектор параметров} kolzap:integer; {количество записей ПВЯ} rash:integer; {количество расшифрованных слов ПВЯ} ko:integer;{ключ окончания} tabl:zapis; {таблица информатора}
{Заглушки} procedure input (xistring; kodvl:integer);
{Процедура ввода данных о книгах} begin
writeln('Выполнилась процедура ввода.'); writeln('Для продолжения нажмите любую клавишу!'); readkey; end;
procedure prosm (x:string; kodvl:integer);
{Процедура просмотра данных о книгах} begin
writeln('Выполнилась процедура просмотра.'); writeln('Для продолжения нажмите любую клавишу!'); readkey; end;
procedure korr (x:string; kodvl:integer);
{Процедура редактирования данных о книгах} begin
writeln('Выполнилась процедура редактирования.'); writeln('Для продолжения нажмите любую клавишу!'); readkey; end;
procedure soxr (x:string; kodvl:integer);
{Процедура сохранения данных о книгах} begin
writeln('Выполнилась процедура сохранения.'); writeln('Для продолжения нажмите любую клавишу!'); readkey; end;
procedure uporyad (x:string; kodvl:integer);
{Процедура упорядочивания данных по книгам} begin
writeln('Выполнилась процедура упорядочивания.'); writeln('Для продолжения нажмите любую клавишу!'); readkey; end;
procedure ekran (x:string; kodvl:integer);
{Процедура просмотра каталога} begin
writeln ('Выполнилась процедура просмотра каталога.'); writeln(IДля продолжения нажмите любую клавишу!'); readkey; end;
procedure pechat (x:string; kodvl:integer);
{Процедура печати каталога} begin
writeln('Выполнилась процедура печати каталога.'); writeln('Для продолжения нажмите любую клавишу!'); readkey; end;
{Процедуры управляющей программы} procedure HELPER;
procedure OBMEN (var vhst:masvhst); procedure INFORM (tabl:zapis); procedure LEXRAZ (vhstimasvhst); procedure SINAN (ypst:masypst); procedure YPRAVL (ypst:masypst);
{Конец описаний}
{Модуль обмена}
procedure OBMEN (var vhst:masvhst; var kolzap:integer; var tabl:zapis); var fl:boolean; i:integer; vvod:string; begin {procedure} with tabl do begin {with} kodvlv:=0; prizn:=l; fl:=true;
writeln('ввод проем ред сохр обр экр печ'); 1:=0;
while (not fl) and (kodvlv=0) do begin {while} i:=i+l; readln(vvod); if vvod='конец' then begin {первый if) fl:=false; kolzap:=i-l; end {первый if} else
begin {первый else} if vvod='выход' then begin {второй if} fl:=false; kodvlv:=8; kolzap:=i-l; end {второй if} else
vhst[i]:=vvod; end; {первый else} end; {while}
{проверка на пустую порграмму} if (kolzap=0) and (kodvlv=0) then kodvlv:=16; if (kolzap<0) and (kodvlv=8) then kodvlv:=4; end; {with} end; {procedure}
{Модуль лексического разбора}
procedure LEXRAZ (vhst:masvhst; kolzap:integer; var ypst; var prst:masprst;
var ks:integer; var tabl:zapis);
var
termsl:array [1..7] of string; {терминальный словарь}
kolsl:integer; {количество слов в терминальном словаре}
sost:integer; {состояние системы}
tekzap:string; {текущая запись}
str:string[10];
i,j,1,k, number,lengl,1en:integer;
begin {procedure}
with tabl do
begin {with}
prizn:=2;
kodvlv:=0;
rash:=0;
kolsl:=7;
sost:=0;
termsl[1] ='ввод';
termsl[2] ='проем';
termsl[3] ='ред';
termsl[4] ='coxp';
termsl[5] ='обр';
termsl[6] ='экр';
termsl[7] ='печ';
for i:=l to kolzap do
begin {первый for}
tekzap:=vhst[i];
j :=i;
len:=length(tekzap);
while (j<=len) and (kodvlv=0) do
begin {первый while}
str:=copy(tekzap,j,len-j+1);
if copy(str,1,1)='' then j:=j+l
else
begin {первый else}
case sost of
0: begin {case 0}
lengl:=0;
for 1:=1 to kolsl do
begin {первый for)
Number:=pos(termsl[1],str);
if number=l then
begin {первый if}
rash:=rash+l;
prst[rash]:='';
ypst[rash]:=1;
lengl:=length(termsl[1]);
j:=j+lengl;
sost:=1;
end; {первый if}
end; {первый for}
if (lengl=0) then kodvlv:=4;
end; {case 0}
l:begin {case 1}
if copy(str,1,!)='=' then
begin {первый if}
sost:=2;
j:=j+l;
end {первый if}
else kodvlv:=6;
end; {case 1}
2:begin {case 2}
if copy(str,1,1)=';' then
begin {первый if}
sost:=0;
j:=j+l;
end {первый if}
else {первый else}
begin
prst[rash]:=prst[rash]+copy(str,1,1);
j:=j+l;
end; {первый else}
end;{case 2}
end; {case}
end; {while}
end; {else}
end; {for}
if (sost=l) and (kodvlv=0) then kodvlv:=5; if (sost=2) and (kodvlv=0) then kodvlv:=7; end; {with} end; {procedure}
{Модуль синтаксического анализа}
Procedure SINAN (ypst: masypst; rash: Integer; Var Tabl:zapis); Var
GPO: Array[1..1,1..2] of Integer; N_Ver: Integer; K_Ver: Integer; I: Integer; begin
With tabl do begin prizn:=3 kodvlv:=0;
GPO[1,1] =1; GPO[1,2] =2;
GPO[2,1] =1;
GPO[2,2] =2;
GPO[3,1] =2;
GPO[3,2] =3;
GPO[4,1] =2;
GPO[4,2] =3;
GPO[5,1] =3;
GPO[5,2] =4;
GPO[6,1] =3;
GPO[6,2] =4;
GPO[7,1] =4;
GPO[7,2] =5;
N_Ver:=l
K_Ver:=5
l:=l;
While (K=rash) and (kodvlv=0) do
begin
If GPO[ypst[i],l]=N_Ver then N_Ver:=GPO[ypst[i],2]
else kodvlv:=8;
i:=i+l;
end;
If (N_Ver<>K_Ver) and (kodvlv=0) then kodvlv:=16;
end;
end;
{Модуль управления}
Procedure YPRAVL (uprstr: masypst; prst: masprst; rash: Integer; Var tabl: zapis); Var x: String;
j, kodvl: Integer;
begin
With tabl do
begin
prizn:=4; kodvlv:=0;
For j:=l to rash do
Begin
x =prst[j];
Case uprstr[j] of
1 input(x, kodvl);
2 prosm(x, kodvl);
3 korr(x, kodvl);
4 soxr(x, kodvl);
5 uporyad(x, kodvl);
6 ekran(x, kodvl);
7 pechat(x, kodvl);
end;
If
kodvlv
end;
end;
end;
{Модуль
информатора} Procedure
INFORM (tabl:
zapis);
{Блок
информ тор } begin
{procedure} With tabl do begin
{with}
Case
prizn of
1:
Writeln('Выполнился
блок обмена'); 2: Writeln('Выполнился
блок лексического разбора'); 3:
Writeln('Выполнился
блок синтаксического анализа');
4:
Writeln('Выполнился
блок управления');
end;
{case}
Writeln('С
кодом
возврата равным ',kodvlv);
end;
{with}
end;
{procedure}
{Модуль
помощи} Procedure
Help; begin
Writeln{'Стурктура
оператора:');
Writeln('<Имя
модуля>=<параметр>;');
Writeln('Конец
сегмента определяется словом “конец”');
Writeln('Конец
всей программы определяется словом
“выход”');
readkey;
end;
{Начало
работы ведущего модуля} Begin
clrscr;
HELPER;
ko:=l;
While
(ko=l)
do
begin
{while}
OBMEN
(vhst, kolzap, tabl);
INFORM
(tabl);
With
tabl do begin {with} If
kodvlv<>0 then ko:=0;
If
kodvlv<8 then begin
{ifl}
LEXRAZ
(vhst,
kolzap,
ypst, prst,
rash,
tabl);
INFORM(tabl);
If
kodvlv<5>
begin
{if2}
SINAN
(ypst, rash, tabl);
INFORM(tabl);
If
kodvlv=0 then
begin
{if3}
YPRAVL(ypst,
prst, rash,
tabl);
INFORM(tabl);
end;
{if3}
end;
{if2}
end;
{ifl}
end;
{with)
end;
{while}
readkey;
end.
3.3.
Распечатка
экрана.
Стурктура
оператора:
<Имя
модуля>=<параметр>;
Конец
сегмента определяется словом "конец"
Конец
всей программы определяется словом
"выход"
Ввод
ПВЯ
ввод=клавиатура;
прос=тютчев; сохр=с: \katalog;
упоряд=название;
экр=вывод;
Выполнился
блок обмена С кодом возврата равным О
Выполнился
блок лексического разбора С
кодом возврата равным О Выполнился
блок синтаксического анализа С
кодом возврата равным О Выполнился блок
управления С кодом возврата равным О
ввод
прос ред сохр упоряд экр печ
4.
Список использованной литературы.
1.
Экономика, разработка и использование
программного обеспечения
ЭВМ. - Учебник/В.А.Благодатских, М.А.
Енгибарян,
Е.В.
Ковалевская
и др. - М.: Финансы и статистика,
1995.
2.Смирнов
А.А. Прикладное программное обеспечение:
Учебное
пособие/Московский государственный
университет экономики,
статистики и информатики. - М.,
2001.