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

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

 

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

 

Логин:

Пароль:

 

Запомнить

 

 

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

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

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

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


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


курсовая работа Разработка приложения для Windows, представ-ляющего собой компьютерную игру Морской бой

Информация:

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

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


Основные данные о работе

Версия  шаблона 2.1
Филиал Самарский
Вид работы Курсовая работа
Название  дисциплины Программирование  на языке высокого уровня
Тема Разработка  приложения для Windows, представляющего собой компьютерную игру “Морской бой”
Фамилия студента Тухбатшин
Имя студента Ильнар
Отчество  студента Искандарович
№ контракта 03900090609362
 

Содержание

 
 


Введение

 
     Цель  курсовой работы – разработка приложения , моделирующего игру “Морской бой”.
     Для выполнения поставленной задачи использовалась среда программирования ИСР Delphi 7.0.
    ИСР Delphi – это среда разработки программ, ориентированных на работу в Windows. В основе идеологии Delphi лежит технология визуального проектирования и методология объектно-ориентированного программирования. Для представления программ в Delphi используется разработанный фирмой Borland язык Object Pascal, в основе которого лежит Turbo Pascal. Слово “Object” особо подчеркивает, что язык поддерживает концепцию объектно-ориентированного программирования.
     В основе Delphi лежит идеология RAD – Rapid Application Development). Основной составляющей среды быстрого создания приложений является технология, получившая название Two Ways Tools. Это значит, что при размещении или изменении компонента в какой-либо форме, соответствующая программа автоматически дополняется и модифицируется. И наоборот, все изменения, которые вносятся в программу при разработке приложения, автоматически отражаются на функциональных свойствах компонентов формы.
     Delphi представляет собой сложную среду  программирования, содержащую множество различных компонентов, с помощью которых можно быстро создавать игровые приложения.  
 
 

 


1. Разработка эскизного  и технического  проектов программы

    1.1. Назначение и область  применения

 
    Необходимо  разработать развлекательную программу, представляющую собой игру. Область  применения: досуг программиста. Разрабатываемая  программа должна работать только под управлением среды Windows 9х.

    1.2. Постановка задачи

 
    Данная  игра подразумевает игру между двумя  игроками. Перед началом игры, игрокам необходимо расставить на своих полях корабли. По правилам игры, корабли должны быть следующие: один 4-х палубный, два 3-х палубных,  три 2-х палубных и четыре однопалубных. Порядок расстановки не имеет значения, но должны соблюдаться следующие правила: корабли не должны пересекаться и должны находится на расстоянии друг от друга минимум через одну клетку. Расставлять корабли можно поворачивая их на угол 90° по вертикали или по горизонтали.
    Когда игрок начинает ход, то он говорит  координаты клетки предполагаемого удара. Если игрок промахнулся, то эта клетка помечается крестиком и право хода передаётся другому игроку. Если же игрок попал, то клетка заштриховывается, и игрок имеет право повторить ход. Координаты открытых клеток нельзя повторять в последующих ходах.

    1.3. Описание алгоритма

 
    Основным  действием алгоритма данной программы  является чередование ходов компьютера и игрока. Обобщённый алгоритм данного действия приведён на рис.1. Более детально можно представить блоки: «Расстановка кораблей компьютером» и «Ход компьютера». Алгоритмы этих блоков приведены на рис.2 и 3 соответственно.
    Описание  обобщённого алгоритма работы программы. После начала новый игры игрок расставляет свои корабли. Как только игрок завершит расстановку всех кораблей, программа автоматически сгенерирует расположение кораблей на своём поле. Т.к. право первого хода принадлежит игроку, то программа будет ждать первого хода игрока. Далее происходит графическая прорисовка хода. В случае попадания происходит проверка на наличие неподбитых кораблей компьютера. Если таковые есть, то игрок делает следующий ход, если нет, то игра заканчивается. В случае, если игрок промахнулся, то ход передаётся компьютеру, далее следует графическая прорисовка его хода, проверка на попадание и в случае промаха ход передаётся игроку. В случае попадания происходит проверка на наличие неподбитых кораблей игрока, если таковых нет, игра завершается, в противном случае компьютер повторяет свой ход.
    Описание  алгоритма расстановки кораблей компьютером. Т.к. кол-во палуб кораблей обратно пропорционально кол-ву кораблей, то в алгоритме используются два цикла. В первом цикле переменной X присваивается значение 4, которое в дальнейшем уменьшается на 1 до 1 и означает кол-во палуб корабля. Во вложенном цикле, переменной Y присваивается значение переменной X, в дальнейшем оно изменяется до 4 с шагом в 1, и означает кол-во кораблей с кол-вом палуб X. 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис.1. Обобщённая схема алгоритма
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис. 2. Алгоритм расстановки кораблей компьютером
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 

Рис. 3. Алгоритм хода компьютера 

    При расстановке каждого корабля  происходит очистка массива, сохраняющего пройденные направления. Расстановка осуществляется выбором начальных координат по X и Y, затем случайным образом выбирается направление размещения (вверх, вниз вправо или влево), производится расчёт конечных координат по X и Y и если корабль можно разместить на данном участке (если корабли не пересекаются, не накладываются друг на друга, и не выходят за границы массива), то происходит его регистрация в массиве. Если все направления проверены, и корабль невозможно разместить, то происходит их обнуление, генерация новых начальных координат X и Y, и перебор направлений повторяется. Так продолжается до завершения расстановки всех кораблей.
    Описание  алгоритма хода компьютера. В начале алгоритма происходит проверка координат удара, на случай, если корабль в прошлом ходу был подбит, но не уничтожен. Если координаты равны нулю, то происходит их случайная генерация (если ячейка с новыми координатами открыта, то генерация продолжится). Далее производится графический вывод состояния ячейки и проверка на полное уничтожение корабля, если корабль полностью подбит, то следует генерация новых координат. Если корабль не уничтожен, то следует проверка на присутствие его палубы в данной клетке, если ячейка пуста, то происходит обнуление координат, сброс направлений и передача хода игроку. Если ячейка не пуста, то происходит случайный выбор направления и проверка ячейка со смещением в выбранном направлении. Если ячейка открыта, то генерация направления повторяется, если нет, то происходит приращение координат X или Y в выбранном направлении, графический вывод состояния ячейки. Если корабль полностью открыт, то координаты и направления обнуляются и ход заканчивается. Для исключения ошибки, связанной с обращением к несуществующим ячейкам массива, введена следующая проверка на выход координат за его пределы: если координаты вышли за пределы размера массива, то происходит инверсия направления (если направление было вверх, то стало вниз, если было вправо, то изменяется на лево и т.д.) и продолжение хода компьютера. Если же координаты в норме, то следует проверка на наличие палубы корабля в данной открытой ячейке и если обнаруживается её присутствие, то происходит дальнейшее приращение координат в выбранном направлении. Если текущие координаты менее 0, то происходит сброс направлений (однако при следующем ходе компьютера, оно будет выбрано случайно и отсчитываться из данной ячейки) и завершение хода компьютера. Если координаты больше 0, то происходит инверсия направления, приращение координат в выбранном направлении. Затем ячейка проверяется, была ли она открыта или нет. Если ячейка была открыта, то происходит сброс направлений и завершение хода компьютера, если нет, то просто завершение хода. 
 

    1.4. Организация входных и выходных данных

 
    Входные данные – массивы значений, которые формируются в процессе работы программы. В них хранятся значения игровых полей, значения: 0 – клетка поля не открыта и не содержит корабля; 1 – клетка не открыта, но содержит палубу корабля; 2 – клетка открыта, корабля в ней нет; 3 – клетка открыта и содержит палубу корабля.
    Выходные  данные – графическое представление  данных массивов входных данных на компонентах TDrawGrid. Неоткрытая клетка ничем не помечается, открытая клетка, не содержащая корабля помечается крестиком, клетка открытая, с палубой корабля помечается красным квадратом.

    1.5. Выбор состава технических и программных средств

 
    При разработке данной программы необходимо использовать интегральную среду разработки программ Delphi. Среда Delphi позволяет достаточно быстро разрабатывать приложения для Windows. Технические характеристики компьютера: Pentium 100 и выше; объём оперативной памяти не менее 8 Мб; жёсткий диск объёмом не менее 500 Мб. Именно эти параметры создают условия для полноценной работы IDE Delphi 5 и программ, созданных в этой среде. Дополнительных средств (принтер, сканер, дополнительные дисководы и т.д.)  не требуется.
 


2. Разработка рабочего  проекта

    2.1. Разработка программы

 
    Для разработки приложения игры “Морской бой” используется среда визуального программирования “Delphi”. Проект программы содержит одно окно – Mainform – игровое поле.
    Вид окна Mainform на этапе разработки приведён на рис. 4. 


Рис.4. Главное  окно программы - Mainform 

Компонент Mainform.
Свойства:
Caption – “Морской бой”;
Border – BsSingle;
Name –  Mainform.
События:
FormCreate – включение генератора случайных числе и сброс координат и направлений в ноль;
FormPaint – перерисовка игровых полей Manpole и Comppole при перерисовке формы Mainform. 

1 – компонент TLabel1.
Свойства:
Font – ярко-зелёный, размер 10;
Caption – “Ваше поле:”. 

2 – компонент TMainMenu.
Свойства:
Items
Игра (Menu1)
Начать  новую (Menu2)
Выход (Menu3)
События:
Menu2 – начать новую игру;
Menu3 – закончить работу с приложением. 

3 – компонент Comppole.
Свойства:
ColCount – 10;
DefaultColWidth – 20;
DefaultRowHeight – 20;
RowCount –  10;
События:
ComppoleMouseDown – используется при расстановке игроком кораблей на поле, сохраняет начальную координату корабля;
ComppoleMouseUp – используется при расстановке  игроком кораблей на поле, сохраняет конечную координату корабля. 

4 – компонент TLabel2.
Свойства:
Font – ярко-зелёный, размер 10;
Caption – “Поле компьютера:”.
5 – компонент Manpole.
Свойства:
ColCount –  10;
DefaultColWidth – 20;
DefaultRowHeight – 20;
RowCount – 10;
События:
ManpoleClick – происходит при выборе игроком координаты удара.

    2.2 Спецификация программы

 
    Исполняемый файл программы “Игра “Морской бой”” имеет название SeaWar.exe и расположен на диске A в каталоге Kursgame. Состав проекта приведён в таблице №1.
Таблица 1. Состав проекта
Наименование Обозначение Примечание
SeaWar.Cfg Конфигурационный  файл проекта Содержит установки  проекта
SeaWar.Dof Файл параметров проекта Содержит текущие  установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы
SeaWar.Dpr Файл проекта Связывает все  файлы, из которых состоит приложение
SeaWar.Res Файл ресурсов Содержит пиктограммы
Unit1.Pas Файл программного модуля для формы №1 Определяет  функциональность формы №1
Unit1.Dfm Файл формы №1 Содержит список всех компонентов, включённых в форму №1
Unit1.Dcu Объектный файл для Unit1.Pas Откомпилированная версия Unit1.Pas

    2.3 Текст программы

 
unit Unit1; 

interface 

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids,
  Menus, StdCtrls, ExtCtrls; 

type
 Arr= Array [1..10,1..10] of byte;
// Массив поля, в  который записываются  координаты кораблей
 TMainform = class(TForm)
  Comppole: TDrawGrid;
  MainMenu1: TMainMenu;
  Menu1: TMenuItem;
  Menu2: TMenuItem;
  Menu3: TMenuItem;
  Manpole: TDrawGrid;
  Label1: TLabel;
  Label2: TLabel;
  procedure Menu3Click(Sender: TObject);
  procedure ManpoleClick(Sender: TObject);
  procedure Menu2Click(Sender: TObject);
  function Proverka(XStart,YStart:Byte;Target_obj:TDrawGrid;var Ar:Arr):Boolean;
  procedure Generate;
  procedure ComppoleMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
  procedure ComppoleMouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
  procedure CompRun;
  procedure FormCreate(Sender: TObject);
  procedure FormPaint(Sender: TObject);
  function Win:Boolean;
  function ArRound(Ar:Arr; var Xn,Yn,Xe,Ye:Integer):Boolean;
private
  { Private declarations }
 public
  { Public declarations }
end; 
 

var
  Mainform: TMainform;
  x, y, mx, my, vx, vy: integer;
  // X, Y - текущие координаты "удара" компьютера
  // mX, mY - случайное направление   продолжения удара  компьютера
  // vX, vY - вспомогательные  переменные 
  Size: byte;
  // Size - для определения  количества ещё  не расставленных  кораблей в начале  игры
  Man, Comp: Arr;
  // Массивы полей компьютера и игрока
  Boat: array[1..10] of byte;
  // Вспомогательный массив, используется компьютером при расстановке кораблей 

implementation 

{$R *.DFM} 

procedure TMainform.Menu3Click(Sender: TObject);
// Закрытие главного окна, при выборе в главном меню пункта "Выход"
begin
 Mainform.Close;
end; 

Procedure Draw(X,Y:Byte;Tr:Boolean;Obj:TDrawGrid;var Ar:Arr);
// Вывод на компонент  DrawGrid состояния ячейки  массива Ar
Begin
If (Tr)and(Ar[X,Y]=1) Then
  Begin
   With Mainform do
    If Obj.Name='Comppole' Then Comppole.Tag:=Comppole.Tag-1
                           Else Manpole.Tag:=Manpole.Tag-1;
  End;
If (Tr)And(Ar[X,Y]<2) Then Ar[X,Y]:=Ar[X,Y]+2;
 Case Ar[x,y] of
1:If Obj.Name='Comppole' then
    Begin
     Obj.Canvas.Brush.Color:=ClAqua;
     Obj.Canvas.FillRect(Rect(21*(x-1),21*(y-1),21*(x-1)+20,21*(y-1)+20));
    End;
2:Begin
    Obj.Canvas.Pen.Color:=ClFuchsia;
    Obj.Canvas.Pen.Width:=2;
    Obj.Canvas.MoveTo(21*(x-1)+2,21*(y-1)+2);
    Obj.Canvas.LineTo(21*(x-1)+18,21*(y-1)+18);
    Obj.Canvas.MoveTo(21*(x-1)+18,21*(y-1)+2);
    Obj.Canvas.LineTo(21*(x-1)+2,21*(y-1)+18);
   End;
3:Begin
    Obj.Canvas.Brush.Color:=ClRed;
    Obj.Canvas.FillRect(Rect(21*(x-1),21*(y-1),21*(x-1)+20,21*(y-1)+20));
   End;
 End;
End; 

function TMainForm.Proverka(XStart,YStart:Byte;Target_obj:TDrawGrid; var Ar:Arr):Boolean;
// Проверка полного  уничтожения корабля  и вывод его  состояния
var Vx,Vy:byte;
Begin
Vx:=0; Vy:=0;
Proverka:=False;
If (Ar[XStart,YStart] in [0,2]) then exit;
If (XStart>1)And(Ar[XStart-1,YStart] in [1,3]) or
    (XStart<10)And(Ar[XStart+1,YStart] in [1,3]) Then Vx:=1;
If (YStart>1)And(Ar[XStart,YStart-1] in [1,3]) or
    (YStart<10)And(Ar[XStart,YStart+1] in [1,3]) Then Vy:=1;
// Проверка по оси  X
 If Vx=1 then
  Begin
   Vx:=XStart;
   While Ar[Vx,YStart]=3 Do
   If Vx<10 Then inc(Vx)
            Else break;
   If Ar[Vx,YStart]=1 Then Exit;
   Vx:=XStart;
   While Ar[Vx,YStart]=3 Do
    If Vx>1 Then dec(Vx)
            Else Break;
   If Ar[Vx,YStart]=1 Then Exit;
   Vx:=1;
  End;
// Проверка по оси  Y
 If Vy=1 then
  Begin
   Vy:=YStart;
   While Ar[XStart,Vy]=3 Do
    If Vy<10 Then inc(Vy)
             Else break;
   If Ar[XStart,Vy]=1 Then Exit;
   Vy:=YStart; 
 

   While Ar[XStart,Vy]=3 Do
    If Vy>1 Then dec(Vy)
            Else Break;
   If Ar[XStart,Vy]=1 Then Exit;
   Vy:=1;
  End;
Proverka:=True;
If (Vx=0)And(Vy=0) Then
  Begin
   Vx:=1;
   Vy:=1;
  End;
// Прорисовка корабля  по оси X
 If Vx=1 then
  Begin
  Vx:=XStart+1;
   Repeat
    dec(Vx);
    If YStart>1 Then Draw(Vx,YStart-1,True,Target_obj,Ar);
    If YStart<10 Then Draw(Vx,YStart+1,True,Target_obj,Ar);
   Until (Ar[Vx,YStart]<>3)or(Vx<2);
   If Vx>0 then Draw(Vx,YStart,True,Target_obj,Ar);
   Vx:=XStart-1;
   Repeat
    inc(Vx);
    If YStart>1 Then Draw(Vx,YStart-1,True,Target_obj,Ar);
    If YStart<10 Then Draw(Vx,YStart+1,True,Target_obj,Ar);
   Until (Ar[Vx,YStart]<>3)or(Vx>9);
   If Vx<11 then Draw(Vx,YStart,True,Target_obj,Ar);
  End;
// Прорисовка корабля  по оси Y
 If Vy=1 then
  Begin
   Vy:=YStart+1;
   Repeat
    dec(Vy);
    If XStart>1 then Draw(XStart-1,Vy,True,Target_obj,Ar);
    If XStart<10 then Draw(XStart+1,Vy,True,Target_obj,Ar);
   Until (Ar[XStart,Vy]<>3)or(Vy<2);
  If Vy>0 then Draw(XStart,Vy,True,Target_obj,Ar);
   Vy:=YStart-1;
   Repeat
    inc(Vy);
    If XStart>1 then Draw(XStart-1,Vy,True,Target_obj,Ar);
    If XStart<10 then Draw(XStart+1,Vy,True,Target_obj,Ar);
   Until (Ar[XStart,Vy]<>3)or(Vy>9);
   If Vy<11 then Draw(XStart,Vy,True,Target_obj,Ar);
  End;
End; 

function TMainform.Win:Boolean;
// Проверка победы компьютера или игрока
// Возвращает значение True, если значение Tag равно нулю
Begin
Win:=False;
// Проверка победы игрока
If Manpole.Tag=0 then
  Begin
   Manpole.Enabled:=False;
   Win:=True;
   if MessageDlg('Вы выиграли!'+#13+#10+'Переиграть?',mtConfirmation,[MbOk,
      MbCancel],0)=1 Then Menu2.Click
                   Else Mainform.Close;
  End; 

// Проверка победы компьютера
 If Comppole.Tag=0 then
  Begin
   Manpole.Enabled:=False;
   Win:=True;
  If MessageDlg('Вы проиграли!'+#13+#10+'Переиграть?',mtConfirmation,[MbOk,
      MbCancel],0)=1 Then Menu2.Click
                     Else Mainform.Close;
  End;
End; 

function TMainForm.ArRound(Ar:Arr; var Xn,Yn,Xe,Ye:Integer):Boolean;
// Защита от расстановки  кораблей друг  на друга
var t1,t2:integer;
    // Вспомогательные переменные
    cu,cd,cr,cl:byte;
    // Направление проверки: cu - вверх, cd - вниз, cr - вправо, cl - влево
Begin
ArRound:=True;
If Xn>Xe Then
  Begin
   t1:=Xn;
   Xn:=Xe;
   Xe:=t1;
  End;
If Yn>Ye Then
  Begin
   t1:=Yn;
   Yn:=Ye;
   Ye:=t1;
  End;
cu:=1; cd:=1; cl:=1; cr:=1;
If Yn=1 Then cu:=0;
If Ye=10 Then cd:=0;
If Xn=1 Then cl:=0;
If Xe=10 Then cr:=0;
For t1:=Xn-cl to Xe+cr do
  For t2:=Yn-cu to Ye+cd do
   If Ar[t1,t2]=1 Then
    Begin
     ArRound:=False;
     Exit;
    End;
end; 

procedure TMainform.CompRun;
// Процедура хода  компьютера
Label 1;
Begin
// Выбор случайной  координаты, если  они не равны  нулю
1:If (mX=0)and(mY=0) then repeat
                           mX:=random(10)+1;
                           mY:=random(10)+1;
                           If Win Then Exit;
                          until Comp[mX,mY]<2;
Draw(mX,mY,True,Comppole,Comp);
If Proverka(mX,mY,Comppole,Comp) then
  Begin
   mX:=0;
   mY:=0;
   Goto 1;
  End;
If Comp[mX,mY]=2 then
  Begin
   mX:=0;
   mY:=0;
   vX:=0;
   vY:=0;
   Exit;
  End;
 If (vX=0)and(vY=0) then Repeat
                          Case random(4) of
                           0:vY:=-1;
                           1:vX:=-1;
                          2:vX:=1;
                          3:vY:=1;
                         End;
                          If (Comp[mX+vX,mY+vY]>1)or(mX+vX=0)or(mY+vY=0)or(mX+vX=11)
                             or(mY+vY=11) Then
                           Begin
                            vX:=0;
                           vY:=0;
                           End;
                        Until Comp[mX+vX,mY+vY]<2;
 Repeat
  mX:=mX+vX;
  mY:=mY+vY;
  Draw(mX,mY,True,Comppole,Comp);
  If Proverka(mX,mY,Comppole,Comp) then
   Begin
    mX:=0;
    mY:=0;
    vX:=0;
    vY:=0;
    Goto 1;
   End
  else If ((mX+vX=0)or(mX+vX=11)or(mY+vY=0)or(mY+vY=11))and(Comp[mX,mY]<>2) Then
   Begin
    vX:=-vX;
    vY:=-vY;
    Goto 1;
   End;
 Until Comp[mX,mY]=2;
If (mX>0)or(mY>0) then
  Begin
   vX:=-vX;
   vY:=-vY;
   mX:=mX+vX;
   mY:=mY+vY;
  If (Comp[mX+vX,mY+vY]=2)or(mX+vX<1)or(mY+vY<1) then
    Begin
     vX:=0;
     vY:=0;
    End;
  End
Else
  Begin
   vX:=0;
   vY:=0;
  End;
End; 

procedure TMainform.ManpoleClick(Sender: TObject);
// Процедура хода игрока
Begin
// Определение координат  щелчка мыши
 X:=Manpole.Selection.Right+1;
Y:=Manpole.Selection.Bottom+1;
  // Если ячейка открыта, то выходим
 If Man[X,Y] in [2,3] Then Exit;
 Draw(X,Y,True,Manpole,Man);
Proverka(X,Y,Manpole,Man);
  // Проверка на победу одной из сторон
 If Win Then Exit;
// Если в ячейке  ничего нет, то - ход компьютера
 If Man[X,Y]=2 then CompRun;
end; 

procedure TMainForm.Generate;
и т.д.................


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


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


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


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


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