Курсовая: Построение функции предшествования по заданной КС-грамматике - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Построение функции предшествования по заданной КС-грамматике

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Архив Zip, 162 kb, скачать бесплатно
Обойти Антиплагиат
Повысьте уникальность файла до 80-100% здесь.
Промокод referatbank - cкидка 20%!
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

30 САМАРСКИЙ ГОСУДАРСТВЕН НЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ имени академика С.П . КОРОЛЕВА Кафедра информационных систем и технологий ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовому проекту по курсу "Информационные технологии " на тему "Построение функции предшествования по заданной КС-грамматике " Выполнил : студент группы 634 Абраров А.М. Руководитель проекта : Шамашов М.А. Дата сдачи : Оценка : Самара 2001 г. РЕФЕРАТ Курсовой проект Пояснительная записка : 30 с ., 5 рис ., 3 схем программ и алгоритмов , 3 библиографического источника. ТЕРМИНАЛ , НЕТЕРМИНАЛ , ГРАММАТИКА , ФУНКЦИЯ ПРЕДШЕСТВОВАНИ , ГРАФ , ЛИНЕАРИЗАЦИЯ. В курсовом проекте разработан алгоритм и соответствующая ему программа , позволяющая по введённой пользователем КС-грамматике построить функцию предшествования , используя граф л инеаризации и алгоритм пересчета с визуализацией шагов построения графа . Грамматика может быть введена как в самой программе , так и из текстового файла . Также существует возможность сохранения результата . Программа написана на языке Pascal 7.0. СОДЕРЖАНИЕ СОДЕРЖАНИЕ 3 1. Постановка задачи 4 2. Описание структуры данных 5 3. Грамматики предшествования 6 3.1 Грамматик и простого предшествования 6 3.2 Грамматик и операторного предшествования 8 3.3 Пример построения матрицы предшествования 10 3.4 Линеаризация матрицы предшествования 13 4. Руководство пользов ателя 13 5. Текст программы 15 6. Список использованных источников 30 1. Постановка задачи По заданной КС-грамматике построить отношение простого или операторного предшествова ния и функцию предшествования , используя граф линеаризации и алгоритм пересчета с визуализацией шагов построения графа. 2. Описание структуры данных Типы : Для хранения терминалов и терминалов используется тип : notTerm=^List; List=Record список терминалов и нетерминалов Name:Str10; терминал или нетерминал Next : notTerm ; End ; Для хранения грамматики (текста ) используется : strBuf=array [1..800] of Char; Матрица предшествования : matrixPr=array [1..20,1..20] of 0..4; Функция предшествования : FuncPr = array [1..2,1..20] of Byte ; Процедуры и функции (основные ): Ввод грамматики осуществляется функцией : Function InputText : Boolean ; Для синтаксического анализа КС-грамматики используетс я процедура : Procedure Check ; Для нахождения «левых» и «правых» используется процедура : Procedure SearchLR ; Построение матрицы предшествования выполняет процедура : Procedure Matrix ; Построение функции предшествования осуществляется процедурой : Procedure Fu ncPrecede ; 3. Грамматики предшествования КС-языки делятся на классы в соответствии со структурой правил их грамматик . В каждом из классов налагаются дополнительные ограничения на допустимые правила грамматики. Одним из таких клас сов является класс грамматик предшествования . Они используются для синтаксического разбора цепочек с помощью алгоритма “сдвиг-свертка” . Выделяют следующие типы грамматик предшествования : · простого предшествования ; · расширенного предшествования ; · сл абого предшествования ; · смешанной стратегии предшествования ; · операторного предшествования . Далее будут рассмотрены ограничения на структуру правил и алгоритмы разбора для двух типов - грамматик простого и операторного предшествования. 3.1 Грамматик и простого предшествования Грамматикой простого предшествования называют такую КС-грамматику G ( VN , VT , P ,S), V = VT И VN в которой : 1. Для каждой упорядоченной пары терминальных и нетерминальных символов выполняется не более чем одно из трех отношений предшествования : · S i = S j ( " S i ,S j О V ), если и только если $ правило U ® xS i S j y О P , где U О VN , x,y О V * ; · S i < S j ( " S i ,S j О V ), если и только если $ правило U ® xS i Dy О P и вывод D Ю *S j z, где U,D О VN , x,y,z О V * ; · S i > S j ( " S i ,S j О V ) , если и только если $ правило U ® xCS j y О P и вывод C Ю *zS i или $ правило U ® xCDy О P и выводы C Ю *zS i и D Ю *S j w, где U,C,D О VN , x,y,z,w О V * . 2. Различные порождающие правила имеют разные правые части . Отношения =, < и > называют отношениями предшество вания для символов . Отношение предшествования единственно для каждой упорядоченной пары символов . При этом между какими-либо двумя символами может и не быть отношения предшествования - это значит , что они не могут находиться рядом ни в одном элементе разб о ра синтаксически правильной цепочки . Отношения предшествования зависят от порядка , в котором стоят символы , и в этом смысле их нельзя путать со знаками математических операций - например , если S i > S j , то не обязательно , что S j < S i (поэтому знаки предшест вования иногда помечают специальной точкой : = Ч , < Ч , Ч >) Метод предшествования основан на том факте , что отношения предшествования между двумя соседними символами распознаваемой строки соответствуют трем следующим вариантам : · S i < S i+1 , если символ S i+ 1 - крайний левый символ некоторой основы ; · S i > S i+1 , если символ S i - крайний правый символ некоторой основы ; · S i = S i+1 , если символы S i и S i+1 принадлежат одной основе . Исходя из этих соотношений выполняется разбор строки для грамматики предше ствования. На основании отношений предшествования строят матрицу предшествования грамматики . Строки матрицы предшествования помечаются первыми символами , столбцы - вторыми символами отношений предшествования , а в клетки матрицы на пересечении соответствующ их столбца и строки помещаются знаки отношений . При этом пустые клетки матрицы говорят о том , что между данными символами нет ни одного отношения предшествования. Матрицу предшествования грамматики можно построить , опираясь непосредственно на определения о тношений предшествования , но удобнее воспользоваться двумя дополнительными множествами - множеством крайних левых и множеством крайних правых символов относительно нетерминалов грамматики . Эти множества определяются следующим образом : · L (U) = T | $ U Ю * Tz , U,T О V , z О V * - множество крайних левых символов относительно нетерминального символа U (цепочка z может быть и пустой цепочкой ); · R (U) = T | $ U Ю *zT , U,T О V , z О V * - множество крайних правых символов относительно нетерминального символа U. Тог да отношения предшествования можно определить так : · S i = S j ( " S i ,S j О V ), если $ правило U ® xS i S j y О P , где U О VN , x,y О V * ; · S i < S j ( " S i ,S j О V ), если $ правило U ® xS i Dy О P и S j О L (D), где U,D О VN , x,y О V * ; · S i > S j ( " S i ,S j О V ) , если $ правило U ® xCS j y О P и S i О R (C) или $ правило U ® xCDy О P и S i О R (C), S j О L (D), где U,C,D О VN , x,y О V * . Такое определение отношений удобнее на практике , так как не требует построения выводов , а множества L (U) и R (U) могут быть построены для каждого нетерминально го символа U О VN по очень простому алгоритму : Шаг 1. Для каждого нетерминального символа U ищем все правила , содержащие U в левой части . Во множество L (U) включаем самый левый символ из правой части правил , а во множество R (U) - самый крайний символ правой части . Переходи к шагу 2. Шаг 2. Для каждого нетерминального символа U: если множество L (U) содержит нетерминальные символы грамматики U ’ ,U” ,..., то его надо дополнить символами , входящими в соответствующие множества L (U ’ ), L (U” ), ... и не входящими в L (U ). Ту же операцию надо выполнить для R (U). Шаг 3. Если на предыдущем шаге хотя бы одно множество L (U) или R (U) для некоторого символа грамматики изменилось , то надо вернуться к шагу 2, иначе построение закончено. После построения множеств L (U) и R (U) по пр авилам грамматики создается матрица предшествования . Матрицу предшествования дополняют символами ^ н и ^ к (начало и конец цепочки ). Для них определены следующие отношения предшествования : ^ н < a, " a О V , если $ S Ю *ax, где S О VN , x О V * или (с другой стор оны ) если a О L (S); ^ к > a, " a О V , если $ S Ю *xa, где S О VN , x О V * или (с другой стороны ) если a О R (S). 3.2 Грамматик и операторного предшествования Грамматикой операторного предшествования называется приведенная КС-грамматика без l -правил (e-правил ), в которой правые части продукций не содержат смежных нетерминальных символов . Для грамматики операторного предшествования отношения предшествования можно задать на множестве терминальных символов (включая символы ^ н и ^ к ). Отношени я предшествования для грамматики операторного предшествования G ( VN , VT , P ,S) задаются следующим образом : · a = b, если и только если существует правило U ® xaby О P или правило U ® xaCby, где a,b О VT , U,C О VN , x,y О V * ; · a < b, если и только если существует правило U ® xaCy О P и вывод C Ю *bz или вывод C Ю *Dbz, где a,b О VT , U,C,D О VN , x,y,z О V * ; · a > b, если и только если существует правило U ® xCby О P и вывод C Ю *za или вывод C Ю *zaD, где a,b О VT , U,C,D О VN , x,y,z О V * . В грамматике операторного предшеств ования различные порождающие правила имеют разные правые части . Для грамматики операторного предшествования тоже строится матрица предшествования , но она содержит только терминальные символы грамматики. Для построения этой матрицы удобно ввести множества к райних левых и крайних правых терминальных символов относительно нетерминального символа U - L t (U) или R t (U): · L t (U) = t | $ U Ю *tz или $ U Ю *Ctz , где t О VT , U,C О VN , z О V * ; · R t (U) = t | $ U Ю *zt или $ U Ю *ztC , где t О VT , U,C О VN , z О V * . Тогда о пределения отношений операторного предшествования будут выглядеть так : · a = b, если $ правило U ® xaby О P или правило U ® xaCby, где a,b О VT , U,C О VN , x,y О V * ; · a < b, если $ правило U ® xaCy О P и b О L t (C), где a,b О VT , U,C О VN , x,y О V * ; · a > b, есл и $ правило U ® xCby О P и a О R t (C), где a,b О VT , U,C О VN , x,y О V * . В данных определениях цепочки символов x,y,z могут быть и пустыми цепочками. Для нахождения множеств L t (U) и R t (U) используется следующий алгоритм : Шаг 1. Для каждого нетерминального симво ла грамматики U строятся множества L (U) и R (U). Шаг 2. Для каждого нетерминального символа грамматики U ищутся правила вида U ® tz и U ® Ctz, где t О VT , C О VN , z О V * ; терминальные символы t включаются во множество L t (U). Аналогично для множества R t (U) ищутся правила вида U ® zt и U ® ztC. Шаг 3. Просматривается множество L (U), в которое входят символы U ’ ,U” ,... Множество L t (U) дополняется символами , входящими в L t (U ’ ), L t (U” ), ... и не входящими в L t (U). Аналогичная операция выполняется и для множества R t (U) на основе множества R (U). Для практического использования матрицу предшествования дополняют символами ^ н и ^ к (начало и конец цепочки ). Для них определены следующие отношения предшествования : ^ н < a, " a О VT , если $ S Ю *ax или $ S Ю *Cax, где S,C О VN , x О V * или если a О L t (S); ^ к > a, " a О VT , если $ S Ю *xa или $ S Ю *xaC, где S,C О VN , x О V * или если a О R t (S). 3.3 Пример построения матрицы предшествования Построим матрицу предшествования для грамматики операторного предшествования. Рассмотрим в качестве примера грамматику G ( S,B,T,J , - , & , ^ , ( , ) , p , P ,S): (Терминалы выделены жирным шрифтом ) P : S ® - B (правило 1) B ® T | B & T (правила 2 и 3) T ® J | T ^ J (правила 4 и 5) J ® ( B ) | p (правила 6 и 7) Видно , что эта грамматика является грамма тикой операторного предшествования. Построим множества крайних левых и крайних правых символов L (U), R (U) относительно всех нетерминальных символов грамматики . Результат построения приведен в табл . 2. На основе полученных множеств построим множества крайни х левых и крайних правых терминальных символов L t (U), R t (U) относительно всех нетерминальных символов грамматики . Результат (второй и третий шаги построения ) приведен в табл . 3. Таблица 2. Множества крайних правых и крайних левых символов грамматики (по ш агам построения ) Символ Шаг 1 (начало построения ) Последний шаг (результат ) (U) L (U) R (U) L (U) R (U) J ( p ) p ( p ) p T J T J J T ( p J ) p B T B T T B J ( p T J ) p S - B - B T J ) p Таблица 3. Множества крайних правых и левых терминальных символов грамматики (по шагам построения ) Символ Шаг 1 (начало построения ) Последний шаг (результат ) (U) L t (U) R t (U) L t (U) R t (U) J ( p ) p ( p ) p T ^ ^ ^ ( p ^ ) p B & & & ^ ( p & ^ ) p S - - - - & ^ ) p На основе этих множеств и правил грамматики G построим матрицу предшествования грамматики (табл . 4). Таблица 4. Матрица предшествования грамматики Символы - & ^ ( ) p ^ к - < < < < > & > < < > < > ^ > > < > < > ( < < < = < ) > > > > P > > > > ^ н < Посмотрим , как заполняется матрица предшествования в табл . 4 на примере символа & . В правиле грамматики B ® B & T (правило 3) этот символ стоит слева от нетерминально го символа T. В множество L t (T) входят символы : ^ ( p . Ставим знак < в клетках матрицы , соответствующих этим символам , в строке для символа & . В то же время в этом же правиле символ & стоит справа от нетерминального символа B. В множество R t (B) входят симв олы : & ^ ) p . Ставим знак > в клетках матрицы , соответствующим этим символам , в столбце для символа & . Больше символ & ни в каком правиле не встречается , значит заполнение матрицы для него закончено , берем следующий символ и продолжаем заполнять матрицу та ким же методом. Алгоритм разбора цепочек грамматики операторного предшествования игнорирует нетерминальные символы . Поэтому имеет смысл преобразовать исходную грамматику таким образом , чтобы оставить в ней только один нетерминальный символ . Тогда получим с ледующий вид правил : P : E ® - E (правило 1) E ® E | E & E (правила 2 и 3) E ® E | E ^ E (правила 4 и 5) E ® ( E ) | p (правила 6 и 7) Это преобразование не ведет к созданию эквивалентной грамматики и выполняется только после построения всех множеств и матрицы пре дшествования . Само преобразование выполняется только с целью более эффективного выполнения алгоритма разбора , в который уже заложены необходимые данные о порядке применения правил при создании матрицы предшествования. 3.4 Линеаризация матрицы предшествования Для компактного хранения матрицы предшествования часто можно использовать следующий прием . По матрице M[n][n], элементы которой принимают только три значения (< = >), попытаемся построить два целочисленных вектора f и g: M[i][j] равно >, если f[i]>g[j] M[i][j] равно <, если f[i]G[j], если i > j - построить ребро графа F[i]<-G[j], если i < j - склеить вершины F[i] и G[j], если i = j Если полученный граф циклический , то линеаризация невозможна . Иначе положить f[i] равным длине самого длинного пути из F[i], g[i] равным дл ине самого длинного пути из G[i]. 4. Руководство пользователя После запуска программы пользователю предлагается ввести КС-грамматику (ограничение при вводе : длина нетерминала не больше восьми символов ). Ввод строки заканчивается нажатием клавиши Enter . Для определения в программе нетерминала используются символы ‘ < ’ и ‘ > ’ непосредственно между которыми находится нетерминал , знак или ‘ | ’ , знак присвоить ‘ := ’ . Новая строка обязательно должна начинаться с нетерминала и последующим си мволом (и ) ‘ := ’ . Для начала анализа введённой КС-грамматике нужно нажать клавишу F 5 или выбрать в меню пункт «Запуск» (меню вызывается нажатием F 9 ). Перед тем как начать построение матрицы предшествования производится синтаксический анализ введенного текста. Возможные ошибки при вводе грамматики : После символа ‘ | ’ должен обязательно следовать терминал или нетерминал. В грамматике описан нетерминал < F >, но он нигде не используется (отсутствует в правой части ). В грамматике отсутствует описание нетерминала < ZZZ > (отсутствует в правой части ) Если грамматика введена верно , то начинается построение матрицы (алгоритм описан выше ). При возникновении ошибки (один или несколько (не )терминалов имеют более чем одно отношение предшествования ) выводится сообщение и в соответствующую ячейку записыв ается символ Х . После этого выполняется линеаризация матрицы с помощью графа : для упрощения алгоритма в матрице сначала ведется поиск отношений = при нахождении таковых выполняется склеивание соответствующих вершин . Эта операция избавляет нас от рутинных д ействий связанных с «перестановкой» связей . Также упрощается описание графа в программе : надобность в хранении связей отсутствует - необходимо лишь хранить количество входящих и выходящих ребер . При построении векторов граф , проверяется на цикличность (пр и существовании цикла выводится сообщении о невозможности построения функции предшествования ). 5. Текст программы Program KP; Uses TpCrt,Graph,GrText,DataUnit; Const Txt='По заданной КС-грамматике построить отношение простого '+ ' или операторного предшествования и функцию предшествования ,'+ ' используя граф линеаризации и алгоритм пересчета с визуализацией '+ ' шагов построения графа '; Errors : array [0..10] of String[34] = ошибки (' КС-грамм атика синтаксически верна ', 0 ' Ожидается ~"<"', 1 ' Ожидается ~">"', 2 ' Ожидается ~":="', 3 ' Требуется нетерминал ', 4 ' Требуется терминал ', 5 ' Неопределенный нетерминал ', 6 ' Неиспользуемый нетерминал ', 7 ' Требуется терминал или нетерминал ', 8 ' Многоопределенный нетерминал ', 9 ' Найдены недопустимые символы '); 10 menu:array[1..5] of string[10]= ('От крыть ','Сохранить ','Запуск ','Информация ','Выход '); Type notTerm=^List; List=Record список терминалов и нетерминалов Name:Str10; терминал или нетерминал Next:notTerm; End; strBuf=array [1..800] of Char; matrixPr=array [1.. 20,1..20] of 0..4; Var i:Byte; текущая позиция s:String; текущая строка Len:Byte absolute s; str_:strBuf; общий буфер для текста LenStr:Integer; всего символов в буфере CLine, кол-во строк y:Byte; текущая строка CTerm:Byte ; кол-во нетерминалов CTrmNotTrm:Byte; кол-во нетерминалов и терминалов notTerminalS:NotTerm; нетерминалы встречающиеся в правых частях notTerminalL:NotTerm; нетерминалы в левой части Trm_notTrm:NotTerm; список терминалов и нетерминалов LTN:NotTerm; левые RTN:NotTerm; правые tmp:NotTerm; временная переменная matrixPrecede:matrixPr; LenWin:Byte; ширина окна $I Dinamic.inc процедуры для работы с динамическими переменными $I GraphPr.inc графический интерфей с $I ServFunc.inc дополнительные процедуры обработки строки ---------------------------------------------------------------------------- Procedure Blank; (* пропуск управляющих символов и пробелов *) Begin While (i<=Len) and (S[i] = #32) do inc(i); End; Function Let(s:Char):Boolean; (* контроль букв *) Begin Let:=((s) >= 'A') and ((s) <= 'Z') or (s in RusLetters); End; Function Dig (s:Char;Var n:Byte):Boolean; (* контроль цифр *) Begin If (s >= '0 ') and (s <= '9') Then Begin n:=ord(s)-48; Dig:=true End Else Dig:=false End; Function Terminal (Var term:String):Boolean; (* поиск терминала *) Begin term:=''; If i<=Len Then While (i<=Len) and (S[i] in Digits+LatLetters+Punctuation+Service+RusLetters) and not (s[i]='<') and not (s[i]='>') and not (s[i]='|') Do Begin term:=term+s[i]; inc(i); End; Terminal:=term > ''; End; Funct ion notTerminal (Var term:String):Boolean; (* поиск нетерминала *) Var j:word; n:Byte; Ex:Boolean; Begin Blank; j:=i; term:=''; Ex:=True; If i<=Length(s) Then If Let(S[i]) Then Begin While (i<=Length(s)) and Let(S[i]) or Dig(S[i],n ) do Begin If (i-j) < 9 Then term:=term+S[i]; inc(i); End; If (i-j) > 8 Then Ex:=False Else Blank; End Else Ex:=False Else Ex:=False; notTerminal:=Ex; End; Procedure Check; Var term:String; Exist,Ex:Boolean; notT:List; k:Byte; Label notTerminalOrTerminal, OrS,LineS,EndS,Start,New,Gluk; Begin Goto Start; New: при возникновении ошибки DeleteList(NotTerminalS); DeleteList(NotTerminalL); DeleteList(Trm_NotTrm); If not InputText Then Exit; Start: один раз i:=1; y:=1; k:=1; CTerm:=0; CTrmNotTrm:=0; PosStr(1,s); первая строка If s='' Then Goto New; LineS: новая строка GotoXY(1,10);Write(s+' Длина анализ.строки ',Length(s),' '+#13#10,'y=',y,' всего строк ',Cline); Blank; If not (s[i]='<') Then Begin Error(1); Goto New; End Else Begin inc(i); Blank; If not notTerminal(term) Then Begin Error(4); Goto New; End Else Begin есть нетерминал Blank; If not (s[i]='>') Then Begin Error(2); Goto New; End Else записываем нетерминал Begin NotT.Name:='<'+term+'>'; If Search(NotTerminalL,NotT)>0 Then Begin многоопределенный Error(9); Goto New; End; If Search(Trm_Not Trm,NotT)=0 Then Begin Complete(Trm_NotTrm,NotT); в общий список теминалов &
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
От дурака нет особого вреда, до тех пор, пока другие дураки не выбирают его своим лидером.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Построение функции предшествования по заданной КС-грамматике", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2017
Рейтинг@Mail.ru