На бирже курсовых и дипломных проектов можно найти образцы готовых работ или получить помощь в написании уникальных курсовых работ, дипломов, лабораторных работ, контрольных работ, диссертаций, рефератов. Так же вы мажете самостоятельно повысить уникальность своей работы для прохождения проверки на плагиат всего за несколько минут.

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


контрольная работа Системы массового обслуживания

Информация:

Тип работы: контрольная работа. Добавлен: 07.10.2012. Сдан: 2012. Страниц: 8. Уникальность по antiplagiat.ru: < 30%

Описание (план):


                                          Введение 

     В коммерческой деятельности большинство  возникающих задач удобно представлять для восприятия и анализа в  виде сетей, которые позволяют ответить на два главных вопроса: до какого места необходимо дойти (цель) и какой путь следует избрать (как). Коммерческую деятельность можно рассматривать как совокупность задач, предназначенных для передвижения, складирования и распределения товаров, денег, документов, информации о поставках и покупателях воды, нефти, газа, электроэнергии, теле- и радиосистем. Наглядность и логическая обоснованность методов сетевого анализа позволяет выбрать довольно естественный подход к решению задач коммерческой деятельности. Сетевые модели для людей, не занимающихся научной работой, являются более понятными, чем другие модели, поскольку для них все же лучше один раз увидеть, чем сто раз услышать. В значительной степени методы сетевого анализа основаны на теории графов – области математики, началом развития которой явилась задача о кенигсбергских мостах, сформулированная швейцарским ученым Л. Эйлером в 1736 г. Через реку Прегель, на которой стоял город Кенигсберг, построено семь мостов (рис. 1), которые связывали с берегами и друг с другом два острова. Задача заключалась в том, чтобы пройти по всем мостам только один раз и вернуться обратно к началу маршрута. Эйлер доказал неразрешимость этой задачи.
     Позже Д.К. Максвелл и Г.Р. Кирхгоф на основе исследования электрических цепей сформулировали некоторые принципы сетевого анализа. Были разработаны методы расчета наибольшей пропускной способности телефонных линий. В 40-х годах в результате развития теории исследования операций был разработан ряд математических методов, необходимых для анализа больших систем. В 50–60-х годах проводились работы по построению новых сетевых моделей и разработке алгоритмов их решения на основе элементов теории графов.
 

      

     Теория  графов в последнее время широко используется в различных отраслях науки и техники, особенно в экономике  и социологии.
     Основы  теории графов разработал Л. Эйлер, решавший задачу о разработке замкнутого маршрута движения по мостам в г. Кенигсберге. При решении задачи он обозначил каждую часть суши точкой, а каждый мост – линией, их соединяющей.  

     Эйлер Леонард (1707–1783) швейцарский математик, механик, физик, астроном. Автор более 800 работ по различным разделам математики и другим наукам.
     Быстрое развитие теория графов получила с  созданием электронно-вычислительной техники, которая позволяла решить многие задачи алгоритмизации.
     .
     Граф  называется ориентированным, если указано направление дуг и неориентированным, если такое направление не указано. Примером неориентированного графа является карта дорог.
     В неориентированном графе понятие  дуга, путь, контур заменяются соответственно на ребро, цепь, цикл.
     .
     Граф  называется связанным, если любые его две вершины можно соединить цепью. Граф сильно связан, если для его двух любых вершин хij существует путь, идущий из хi и хj.
     Граф, который не является связанным, может  быть разбит на конечное число связных  графов, называемых компонентами, или частями.
     На  рисунке 3 ребро к – мост, а на рисунке 4 вершина 1 – точка сочленения. 

       
 
 
 
 

 

      

     Эйлеровым путем в графе G называется такой путь в котором каждое ребро встречается один раз. Эйлер доказал, что такой путь существует тогда и только тогда, когда граф G содержит не более двух вершин нечетной степени и являются связнымиЕсли граф содержит точно две вершины нечетной степени, то в эйлеровом пути эти вершины должны быть конечными.
     Если  вершин нечетной степени нет, то граф имеет замкнутый эйлеров путь. 

     В любом конечном графе сумма степеней вершин равна удвоенному числу его  ребер. В XIX в. Гамильтон придумал игру, состоящую в том, что на доске располагались города в виде додекаэдра  
 

     Играющий  должен обозначить шнуром замкнутый  круг, соединяющий последовательно  одну вершину с другой, посетив  при этом все города, зайдя в  каждый только один раз.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

             Графы 

     Граф - это пара (V,E), где V - конечное непустое множество объектов произвольной природы, называемых вершинами, а E - множество неупорядоченных пар <u,v> вершин из V называемых ребрами Говорят, что ребро s=<u,v> соединяет вершины u и v. Ребро s и вершина u называются инцидентными, а вершины u и v - смежными. Ребра, инцидентные одной и той же вершине, также называют смежными. Если ребро s=<u,v> встречается более одного раза, то s – кратное ребро. Ребро вида s=<u,u> называется петлей в вершине u. На рис.1 < 4,2 > - кратные ребра, < 1,1 > петля.
     Если  порядок элементов, входящих в ei, имеет значение, то граф называется ориентированным, иначе – неориентированным, Ребра орграфа называются дугами, Дуга (u,v) ведет от вершины u к вершине v. При этом вершину v называют преемником вершины u, а u - предшественником вершины v. В дальнейшем будем считать, что термин "граф", применяемый без уточнений "ориентированный" или "неориентированный", обозначает неориентированный граф.  

     Пример: G=(V,E);  V={1,2,3,4};  E=< (1,1), (1,2), (1,3), (2,4), (2,4) >  

       

     Степень вершины deg(v) графа - это число ребер, инцидентных данной вершине v, причем петли учитываются дважды. Поскольку каждое ребро инцидентно двум вершинам, сумма степеней всех вершин графа равна удвоенному количеству ребер.
     Если  сложить степени всех вершин некоторого графа, то каждое ребро внесет в эту  сумму вклад, равный 2, поэтому справедливо  следующее утверждение: Это равенство известно как "лемма о рукопожатиях". Из него следует, что число вершин нечетной степени в любом графе четно.
     Вершину степени 0 называют изолированной.
     Граф  называют регулярным степени d, если степень  каждой его вершины равна d.
     Граф, не содержащий петель и кратных ребер, называется обыкновенным, или простым графом (simple graph). Во многих публикациях используется другая терминология: под графом понимается простой граф, граф с кратными ребрами называют мультиграфом, с петлями - псевдографом.
     Некоторые классы графов получили особые наименования. Граф с любым количеством вершин, не содержащий ребер, называется пустым. Обыкновенный граф с n вершинами, любая пара вершин которого соединена ребром, называется полным и обозначается Kn  

       

     Граф, вершины которого можно разбить  на непересекающиеся подмножества V1 и V2 так, что никакие две вершины, принадлежащие одному и тому же подмножеству, не смежны, называется двудольным (или бихроматическим, или графом Кенига) и обозначается Bmn (m=|V1|, n=|V2|, m+n=|V|). Полный двудольный граф - такой двудольный граф, что каждая вершина множества V1 связана со всеми вершинами множества V2, и наоборот; обозначение - Kmn.
      B33 

     Часть графа G = (V,E) - это такой граф G' = (V',E'), что V' принадлежит V и E' принадлежит E. Подграфом  графа G называется такая его часть G', которая вместе со всякой парой  вершин u, v содержит и ребро <u,v>, если только оно есть в G. Остовным подграфом (суграфом) графа G называется любой его подграф, содержащий то же множество вершин, что и G.
     Путь, соединяющий вершины u и v, - это последовательность вершин v(0), v(1),..., v(n) (n>=0) такая, что v(0)=u, u(n)=v и для любого i (0<= i <= n-1) вершины v(i) и v(i+1) соединены ребром. Длина  пути v(0), v(1),...,v(n) равна количеству его  ребер т.е. n. Путь замкнут, если v(0) = v(n). Путь называется простым, если все его  вершины различны. Замкнутый путь, в котором все ребра различны называется циклом. Простой цикл - это  замкнутый путь, все вершины которого, кроме v(0) и v(n), попарно различны. Гамильтоновым  называется граф, в котором существует простой цикл, содержащий все вершины  графа
 

     

     Основные задачи на графах

     Процедура поиска в ширину

     Работа  всякого алгоритма обхода состоит  в последовательном посещении вершин и исследовании ребер. Какие именно действия выполняются при посещении  вершины и исследовании ребра - зависит  от конкретной задачи, для решения  которой производится обход. В любом  случае, однако, факт посещения вершины  запоминается, так что с момента  посещения и до конца работы алгоритма  она считается посещенной. Вершину, которая еще не посещена, будем  называть новой. В результате посещения вершина становится открытой и остается такой, пока не будут исследованы все инцидентные ей ребра. После этого она превращается в закрытую.
     Идея  поиска в ширину состоит в том, чтобы посещать вершины в порядке  их удаленности от некоторой заранее  выбранной или указанной стартовой  вершины ?. Иначе говоря, сначала  посещается сама вершина ?, затем  все вершины, смежные с ?, то есть находящиеся от нее на расстоянии 1, затем вершины, находящиеся от ? на расстоянии 2, и т.д.
     Рассмотрим  алгоритм поиска в ширину с заданной стартовой вершиной 2. Вначале все  вершины помечаются как новые. Первой посещается вершина ?, она становится единственной открытой вершиной. В  дальнейшем каждый очередной шаг  начинается с выбора некоторой открытой вершины x. Эта вершина становится активной. Далее исследуются ребра, инцидентные активной вершине. Если такое ребро соединяет вершину x с новой вершиной y, то вершина y посещается и превращается в открытую. Когда все ребра, инцидентные активной вершине, исследованы, она перестает быть активной и становится закрытой. После этого выбирается новая активная вершина, и описанные действия повторяются. Процесс заканчивается, когда множество открытых вершин становится пустым.
     Основная  особенность поиска в ширину, отличающая его от других способов обхода графов, состоит в том, что в качестве активной вершины выбирается та из открытых, которая была посещена раньше других. Именно этим обеспечивается главное  свойство поиска в ширину: чем ближе  вершина к старту, тем раньше она  будет посещена. Для реализации такого правила выбора активной вершины  удобно использовать для хранения множества  открытых вершин очередь - когда новая  вершина становится открытой, она  добавляется в конец очереди, а активная выбирается в ее начале.
     Опишем процедуру  поиска в ширину из заданной стартовой  вершины ?. В этом описании V(x) обозначает множество всех вершин, смежных с вершиной x, Q - очередь открытых вершин. Предполагается, что при посещении вершины она помечается как посещенная и эта пометка означает, что вершина уже не является новой.
     Ребра, исследуемые в процессе обхода графа, можно разделить на две категории: если ребро соединяет активную вершину x с новой вершиной y, то оно классифицируется как прямое, в противном случае - как обратное. В зависимости от решаемой задачи прямые и обратные ребра могут подвергаться различной обработке.
     Предположим, что алгоритм поиска в ширину применяется  к связному графу. Покажем, что в  этом случае по окончании обхода множество  всех прямых ребер образует дерево. Действительно, допустим, что на некотором  шаге работы алгоритма обнаруживается новое прямое ребро (x,y), а множество  прямых ребер, накопленных к этому  шагу, образует дерево F. Тогда вершина xпринадлежит дереву F, а вершина y не принадлежит ему. Поэтому при  добавлении к дереву F ребра (x,y) связность  сохранится, а циклов не появится.

     Эйлеровы циклы

     Напомним, что эйлеровым циклом называется замкнутый маршрут, в котором  каждое ребро графа встречается  точно один раз. Для существования  такого маршрута в связном графе  необходимо и достаточно, чтобы степени  всех вершин были четными. Теперь рассмотрим алгоритм, который находит эйлеров цикл в заданном графе при условии, что условия связности и четности степеней выполнены.
     Этот  алгоритм похож на алгоритм поиска в глубину: начиная с произвольно  выбранной стартовой вершины  ?, строим путь, выбирая каждый раз  для дальнейшего продвижения  еще не пройденное ребро. Главное  отличие от поиска в глубину состоит  в том, что как пройденные помечаются именно ребра, а не вершины. Поэтому  одна и та же вершина может посещаться несколько раз, но каждое ребро проходится не более одного раза, так что  в полученном маршруте ребра не будут  повторяться. Вершины пути накапливаются  в стеке S. Через некоторое количество шагов неизбежно наступит тупик - все ребра, инцидентные активной (последней посещенной) вершине x, уже  пройдены. Так как степени всех вершин графа четны, в этот момент x=a и пройденные ребра образуют цикл, но он может включать не все ребра  графа. Для обнаружения еще не пройденных ребер возвращаемся по пройденному  пути, перекладывая вершины из стека S в другой стек C, пока не встретим вершину x, которой инцидентно непройденное ребро. Так как граф связен, такая  вершина обязательно встретится. Тогда возобновляем движение вперед по непройденным ребрам, пока не дойдем до нового тупика и т.д. Процесс заканчивается, когда в очередном тупике обнаруживается, что S пуст. В этот момент в стеке C находится последовательность вершин эйлерова цикла.
     Алгоритм 1. Построение эйлерова цикла  

     
    выбрать произвольно  вершину ?

    while S?O do
    x:= top(S)
    if имеется непройденное ребро (x, y)
    then пометить ребро (x, y) как пройденное

    else переместить вершину x из S в C
 
     Для обоснования алгоритма заметим  сначала, что первой в стек S помещается вершина ?, и она будет последней  перемещена из S в C. Следовательно, она  будет последней вершиной в стеке C. Далее, как было отмечено выше, первый раз, когда обнаружится, что все  инцидентные активной вершине ребра  пройдены (т.е. будет выполняться  ветвь else в строке 8), активной будет стартовая вершина ?. Значит, эта вершина будет первой перемещена из S в C. Итак, по окончании работы алгоритма в начале и в конце последовательности вершин, содержащейся в стеке C, находится вершина ?. Иначе говоря, если эта последовательность представляет маршрут (а далее будет показано, что так оно и есть), то этот маршрут замкнут.
     Далее отметим, что в конечном итоге  каждое ребро будет пройдено. Действительно, допустим, что в момент окончания  работы алгоритма имеются еще  не пройденные ребра. Поскольку граф связен, должно существовать хотя бы одно непройденное ребро, инцидентное посещенной вершине. Но тогда эта вершина  не могла быть удалена из стека S, и S не мог стать пустым.
     Будем говорить, что ребро (x, y) представлено в стеке (S или C), если в какой-то момент работы алгоритма в стеке рядом  находятся вершины x и y. Ясно, что  каждое ребро графа будет представлено в стеке S и что каждые две вершины, расположенные рядом в этом стеке, образуют ребро. Допустим, в какой-то момент из стека S в стек C перемещается вершина x, а непосредственно под  ней в стеке S находится вершина y. Возможно, что вершина y будет перемещена из S в C при следующем повторении цикла while, тогда ребро (x, y) будет представлено в стеке C. Другая возможность - между перемещением вершины x и следующим перемещением, т.е. следующим выполнением ветви else, будет несколько раз выполнена ветвь then (строки 6,\,7). Это означает, что будет пройдена некоторая последовательность ребер, начинающаяся в вершине y. Ввиду четности степеней эта последовательность может закончиться только в вершине y. Значит, и в этом случае следующей за вершиной x будет перемещена из S в C вершина y. В любом случае ребро (x, y) будет представлено в стеке C. Из этого рассуждения видно, что последовательность вершин в стеке C является маршрутом и что каждое ребро графа в конечном итоге будет содержаться в этом маршруте, причем один раз.
     При каждом повторении цикла while в рассмотренном алгоритме либо проходится одно ребро, либо одна вершина перемещается из S в C. Последнее можно трактовать как прохождение уже пройденного однажды ребра в обратном направлении. Каждое ребро в каждом направлении будет пройдено один раз, поэтому общая трудоемкость этого алгоритма оценивается как O(m). Необходимо только оговориться, что этот вывод, как и аналогичные заключения об алгоритмах обхода в первых разделах этой главы, справедлив лишь при определенных предположениях о том, как задан граф. Способ задания должен обеспечить возможность быстрого просмотра множества ребер, инцидентных данной вершине. Подходящим является, например, задание графа списками инцидентности, в которых для каждой вершины перечисляются инцидентные ей ребра. Необходимо также иметь возможность быстро пометить ребро как пройденное или проверить, пройдено ли данное ребро. Для этого подходящей структурой может служить характеристический массив на множестве ребер.

     Гамильтоновы пути и циклы

 
     Гамильтоновым циклом (путем) называют простой цикл (путь), содержащий все вершины графа.
     Внешне  определение гамильтонова цикла  похоже на определение эйлерова цикла. Однако есть кардинальное различие в  сложности решения соответствующих  задач распознавания и построения. Мы видели, что имеется достаточно простой критерий существования эйлерова цикла и эффективный алгоритм его построения. Для гамильтоновых же циклов (и путей) неизвестно никаких просто проверяемых необходимых и достаточных условий их существования, а все известные алгоритмы требуют для некоторых графов перебора большого числа вариантов.
     Гамильтонов цикл представляет собой, с комбинаторной  точки зрения, просто перестановку вершин графа. При этом в качестве начальной вершины цикла можно  выбрать любую вершину, так что  можно рассматривать перестановки с фиксированным первым элементом. Самый бесхитростный план поиска гамильтонова цикла состоит в  последовательном рассмотрении всех этих перестановок и проверке для каждой из них, представляет ли она цикл в  данном графе. Такой способ действий уже при не очень большом числе  вершин становится практически неосуществимым ввиду быстрого роста числа перестановок - имеется (n-1)! перестановок из n элементов  с фиксированным первым элементом.
     Более рациональный подход состоит в рассмотрении всевозможных простых путей, начинающихся в произвольно выбранной стартовой  вершине ?, до тех пор, пока не будет  обнаружен гамильтонов цикл или  все возможные пути не будут исследованы. По сути дела, речь тоже идет о переборе перестановок, но значительно сокращенном - если, например, вершина b не смежна с  вершиной ?, то все (n-2)! перестановок, у  которых на первом месте стоит  ?, а на втором b, не рассматриваются.
     Рассмотрим  этот алгоритм подробнее. Будем считать, что граф задан окрестностями  вершин: для каждой вершины x задано множество вершин, смежных с x. На каждом шаге алгоритма имеется уже  построенный отрезок пути, он хранится в стеке PATH. Для каждой вершины x, входящей в PATH, хранится множество N(x) всех вершин, смежных с x, которые еще не рассматривались в качестве возможных продолжений пути из вершины x. Когда вершина x добавляется к пути, множество N(x) полагается равным V(x). В дальнейшем рассмотренные вершины удаляются из этого множества. Очередной шаг состоит в исследовании окрестности последней вершины x пути PATH. Если N(x) ?O и в N(x) имеются вершины, не принадлежащие пути, то одна из таких вершин добавляется к пути. В противном случае вершина x исключается из стека. Когда после добавления к пути очередной вершины оказывается, что путь содержит все вершины графа, остается проверить, смежны ли первая и последняя вершины пути, и при утвердительном ответе выдать очередной гамильтонов цикл. 

     Этот  алгоритм очень похож на алгоритм поиска в глубину и отличается от него по существу только тем, что  открытая вершина, когда вся ее окрестность  исследована, не закрывается, а опять  становится новой (исключается из стека). В начале все вершины новые. Процесс  заканчивается, когда все вершины  опять станут новыми. На самом деле это и есть поиск в глубину, только не в самом графе, а в  дереве путей. Вершинами этого дерева являются всевозможные простые пути, начинающиеся в вершине ?, а ребро  дерева соединяет два пути, один из которых получается из другого  добавлением одной вершины в  конце.
     Если  допустить, что точки разветвления не произвольны, а берутся из некоторого множества, то задачу можно сформулировать так: построить кратчайшее дерево, покрывающее  заданное подмножество вершин взвешенного  графа. Данная задача, называемая задачей  Штейнера, является чрезвычайно сложной  с вычислительной точки зрения и  может быть практически решена только при небольшом количестве дополнительных вершин. В то же время, существует эффективный  приближенный алгоритм, строящий дерево, длина которого превышает длину  кратчайшего дерева не более чем  в два раза.  

 

       Теория массового обслуживания. Основные положения 

      1.1 Предмет и задачи теории массового обслуживания 

      Теория  массового обслуживания опирается  на теорию вероятностей и математическую статистику.
      На  первичное развитие теории массового  обслуживания оказали особое влияние  работы датского ученого А.К. Эрланга (1878-1929).
      Теория  массового обслуживания – область прикладной математики, занимающаяся анализом процессов в системах производства, обслуживания, управления, в которых однородные события повторяются многократно, например, на предприятиях бытового обслуживания; в системах приема, переработки и передачи информации; автоматических линиях производства и др.
      Предметом теории массового обслуживания является установление зависимостей между характером потока заявок, числом каналов обслуживан6ия, производительностью отдельного канала и эффективным обслуживанием с целью нахождения наилучших путей управления этими процессами.
      Задача  теории массового  обслуживания – установить зависимость результирующих показателей работы системы массового обслуживания (вероятности того, что заявка будет обслужена; математического ожидания числа обслуженных заявок и т.д.) от входных показателей (количества каналов в системе, параметров входящего потока заявок и т.д.). Результирующими показателями или интересующими нас характеристиками СМО являются – показатели эффективности СМО, которые описывают способна ли данная система справляться с потоком заявок.
      Задачи  теории массового обслуживания носят  оптимизационный характер и в  конечном итоге включают экономический  аспект по определению такого варианта системы, при котором будет обеспечен  минимум суммарных затрат от ожидания обслуживания, потерь времени и ресурсов на обслуживание и простоев каналов  обслуживания. 

      1.2 Система массового обслуживания 

      Система обслуживания считается заданной, если известны:
      1) поток требований, его характер;
      2) множество обслуживающих приборов;
      3) дисциплина обслуживания (совокупность  правил, задающих процесс обслуживания).
      Каждая  СМО состоит из какого-то числа  обслуживающих единиц, которые называются каналами обслуживания. В качестве каналов могут фигурировать: линии  связи, различные приборы, лица, выполняющие  те или иные операции и т.п
      Всякая  СМО предназначена для обслуживания какого-то потока заявок, поступающих  в какие-то случайные моменты  времени. Обслуживание заявок продолжается какое-то случайное время, после  чего канал освобождается и готов  к приему следующей заявки. Случайный  характер потока заявок и времен обслуживания приводит к тому, что в какие-то периоды времени на входе СМО  скапливается излишне большое число  заявок (они либо становятся в очередь, либо покидают СМО не обслуженными); в другие же периоды СМО будет  работать с недогрузкой или вообще простаивать.
      Процесс работы СМО представляет собой случайный  процесс с дискретными состояниями  и непрерывным временем; состояние  СМО меняется скачком в моменты  появления каких-то событий ( или прихода новой заявки, или окончания обслуживания, или момента, когда заявка, которой надоело ждать, покидает очередь ).
 

       1.3 Классификация СМО 

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

      1.4 Характеристики СМО

      Перечень характеристик систем массового обслуживания можно представить следующим образом:

    среднее время  обслуживания;
    среднее время ожидания в очереди;
    среднее время пребывания в СМО;
    средняя длина очереди;
    среднее число заявок в СМО;
    количество каналов обслуживания;
    интенсивность входного потока заявок;
    интенсивность обслуживания;
    интенсивность нагрузки;
    коэффициент нагрузки;
    относительная пропускная способность;
    абсолютная пропускная способность;
    доля времени простоя СМО;
    доля обслуженных заявок;
    доля потерянных заявок;
    среднее число занятых каналов;
    среднее число свободных каналов;
    и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.