Моделирование работы сложного механизма

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.08.2013
Размер файла 143,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

5

Размещено на http://www.allbest.ru/

1

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

САМАРСКИЙ ГОСУДАРСТВЕННЫЙ

АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ

имени академика С.П. КОРОЛЕВА

Кафедра летательных аппаратов

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по информатике

МОДЕЛИРОВАНИЕ РАБОТЫ СЛОЖНОГО МЕХАНИЗМА

Самара 2010

ЗАДАНИЕ

Разработать программу, моделирующую движение сложного механизма.

1. Программу разрабатывать в среде Delphi 7 с учетом дополнительных требований для курсовых работ специальности 230301.

2. Представить электронную версию программы.

3. Оформить пояснительную записку.

4. Программу и пояснительную записку разрабатывать в соответствии с требованиями и рекомендациями следующих методических указаний

· Информатика: Метод. Указания и контрольные задания (курсовая работа) для студентов заочной формы обучения / Самар.гос.аэрокосм. ун-т; Сост. В.И.Куренков. Самара 1999. 23 с.

· СТО СГАУ 02068410-004-2007 «Общие требования к оформлению учебных текстовых документов.» Самара, 2007.

· «Построение, изложение и оформление программных документов» / Автор-составитель В.Д.Еленев, Куйбышев. авиац. ин-т. Куйбышев, 1987.

РЕФЕРАТ

Пояснительная записка 30 страниц, 7 рисунков, 3 источника.

ДВИЖЕНИЕ МЕХАНИЗМА, СКОРОСТЬ, УСКОРЕНИЕ, УРАВНЕНИЕ ДВИЖЕНИЯ СИСТЕМЫ ТЕЛ, МОДЕЛИРОВАНИЕ, УРАВНЕНИЕ ПРЯМОЙ

Цель курсовой работы: смоделировать работу механизма и найти скорости и ускорения точек.

СОДЕРЖАНИЕ

Введение

1. Математическая часть задачи

2. Алгоритм работы программы

3. Руководство пользователя

Заключение

Список использованных источников

Приложение А

Введение

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

алгоритм программное моделирование ускорение точка

1. Математическое описание

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

Уравнение движения ведущего звена:

Уравнения движения точки C:

Уравнение движения точки D:

Условия корректности задания координат:

1.

BCкритическое вычисляется при крайнем значении координат точки B, исходя из положения точки C

2.

CEкритическое вычисляется при крайнем положении точки В, исходя из положения точки С

CEкритическое2 вычисляется при втором крайнем положении точки В.

2. Алгоритм работы программы

Общий алгоритм работы программы представлен в виде блок-схемы на рисунке 2.

Рисунок - Блок-схема программы

3. Руководство пользователя

Первое, что нужно сделать пользователю - это проверить задание длин соединений между элементами системы на корректность. Далее нажать на кнопку «запуск». Программа отображает правильное движение механизма, соответствуя законам физики. Длины соединений изменяются с помощью специальных полей, расположенных внизу формы.

Рисунок 3 - Окно программы

Зависимость v(t) и a(t)

Рисунок - зависимость скорости и ускорения точки B от t

Рисунок - зависимость скорости и ускорения точки C от t

Рисунок 10 - зависимость скорости и ускорения точки D от t

Заключение

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

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

Список использованных источников

1. Фаронов, В.В. Delphi 7. Справочное пособие. Санкт-Петербург "Питер" 2006.

2. Архангельский, А.Я. Язык Pascal и основы программирования в Delphi. Учебное пособие. Москва «Бином» 2004

3. СТО СГАУ 02068410-004-2007. Общие требования к учебным текстовым документам. Самара 2007

ПРИЛОЖЕНИЕ А

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Math, Menus, ComCtrls, Spin;

type

Pnt = record

x,y:integer;

end;

TForm1 = class(TForm)

img: TImage;

Timer1: TTimer;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

Panel1: TPanel;

Label11: TLabel;

L1: TSpinEdit;

L3: TSpinEdit;

L5: TSpinEdit;

L2: TSpinEdit;

L7: TSpinEdit;

L4: TSpinEdit;

L6: TSpinEdit;

Button1: TButton;

N2: TMenuItem;

N3: TMenuItem;

Label16: TLabel;

Label17: TLabel;

Label12: TLabel;

Label18: TLabel;

Label19: TLabel;

Label14: TLabel;

L8: TSpinEdit;

Label13: TLabel;

procedure N1Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure MoveB;

procedure MoveAB;

procedure MoveBC;

procedure MoveCD;

procedure MoveDE;

procedure DrawC;

procedure Reset;

procedure Dif(f1,f2:integer; var fp:real);

procedure DifDif(f1,f2,f3:integer; var fpp:real);

procedure Count(c,e:pnt; var d:pnt);

procedure DrawD(c,e:Pnt);

procedure TrackBar1Change(Sender: TObject);

procedure TrackBar2Change(Sender: TObject);

procedure L1Change(Sender: TObject);

procedure L3Change(Sender: TObject);

procedure L5Change(Sender: TObject);

procedure L2Change(Sender: TObject);

procedure L7Change(Sender: TObject);

procedure L4Change(Sender: TObject);

procedure DxChange(Sender: TObject);

procedure L6Change(Sender: TObject);

procedure ExChange(Sender: TObject);

procedure EyChange(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Check(var ErrMsg:byte);

procedure ShowErr(ErrMsg:byte);

procedure Redraw;

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

dx,dy,bc,ab,cd,de: integer;

t,dt,h:real;

A,B,C,D,E,b_old,b_next,c_old,c_next: Pnt;

ErrMsg:byte;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.N1Click(Sender: TObject);

begin

if N1.Caption='Запуск' then begin

N1.Caption:='Остановка';

Panel1.Enabled:=false;

Button1.Enabled:=false;

end

else begin

N1.Caption:='Запуск';

Panel1.Enabled:=true;

Button1.Enabled:=true;

img.Canvas.Pen.Color:=ClWhite;

Redraw;

img.Canvas.Pen.Color:=ClBlack;

Reset;

end;

Timer1.Enabled:=Timer1.Enabled xor true;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

Form2.ShowModal;

end;

procedure TForm1.MoveB;

var fp:real;

begin

img.Canvas.Pen.Color:=ClWhite;

img.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);

img.Canvas.Pen.Color:=clBlack;

b_old.x:=a.x+round(ab*cos(t-dt));

b_old.y:=a.y-round(ab*sin(t-dt)); //Сохранение точки со старыми координатами

b.x:=a.x+round(ab*cos(t)); //параметрическое задание ф-ции окружности

b.y:=a.y-round(ab*sin(t));

b_next.x:=a.x+round(ab*cos(t+dt));

b_next.y:=a.y-round(ab*sin(t+dt));

Dif(b_next.x,b_old.x,fp);

Label1.Caption:='Скорость точки B по Х = '+floattostr(fp);

Dif(b_next.y,b_old.y,fp);

Label2.Caption:='Скорость точки B по Y = '+floattostr(-fp);

DifDif(b_next.x,b.x,b_old.x,fp);

Label6.Caption:='Ускорение точки B по Х = '+floattostr(fp);

DifDif(b_next.y,b.y,b_old.y,fp);

Label7.Caption:='Ускорение точки B по Y = '+floattostr(-fp);

img.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);

end;

procedure TForm1.MoveAB;

begin

img.Canvas.MoveTo(a.x,a.y);

img.Canvas.LineTo(b.x,b.y);

end;

procedure TForm1.MoveBC;

begin

img.Canvas.MoveTo(c.x,c.y);

img.Canvas.LineTo(b.x,b.y);

end;

procedure TForm1.MoveCD;

begin

img.Canvas.MoveTo(c.x,c.y);

img.Canvas.LineTo(d.x,d.y);

end;

procedure TForm1.MoveDE;

begin

img.Canvas.MoveTo(e.x,e.y);

img.Canvas.LineTo(d.x,d.y);

end;

procedure TForm1.Redraw;

begin

img.Canvas.Ellipse(a.x-10,a.y-10,a.x+10,a.y+10);

img.Canvas.Rectangle(a.x-10,a.y+5,a.x+10,a.y+10);

img.Canvas.Ellipse(b.x-10,b.y-10,b.x+10,b.y+10);

img.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);

img.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);

img.Canvas.MoveTo(10,c.y+9);

img.Canvas.LineTo(img.Width-10,c.y+9);

img.Canvas.Ellipse(e.x-10,e.y-10,e.x+10,e.y+10);

img.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);

MoveAB;

MoveBC;

MoveCD;

MoveDE;

end;

procedure TForm1.L1Change(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.L3Change(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.Check(var ErrMsg: Byte);

var bb,temp_ac,temp_bc,ac,ce:integer;

k,temp_alpha,alpha:real;

c_temp,b_temp,d_temp:pnt;

begin

ErrMsg:=0;

ab:=round(sqrt(sqr(b.x-a.x)+sqr(b.y-a.y)));

bc:=round(sqrt(sqr(b.x-c.x)+sqr(b.y-c.y)));

cd:=round(sqrt(sqr(d.x-c.x)+sqr(d.y-c.y)));

de:=round(sqrt(sqr(d.x-e.x)+sqr(d.y-e.y)));

temp_ac:=bc-ab;

c_temp.y:=c.y;

temp_alpha:=(c.y-a.y)/temp_ac;

if (temp_alpha>=-1) and (temp_alpha<=1) then begin

alpha:=arccos(temp_alpha);

c_temp.x:=round(temp_ac*sin(alpha))+a.x;

k:=(a.y-c.y)/(a.x-c.x);

bb:=round(a.y-k*a.x);

b_temp.x:=a.x-round(ab*sin(alpha));

b_temp.y:=a.y-round(ab*cos(alpha));

ac:=round(sqrt(sqr(c_temp.x-a.x)+sqr(c_temp.y-a.y)));

temp_bc:=round(sqrt(sqr(b_temp.x-c_temp.x)+sqr(b_temp.y-c_temp.y)));

if temp_bc>bc then ErrMsg:=1;

ce:=round(sqrt(sqr(c_temp.x-e.x)+sqr(c_temp.y-e.y)));

if de+cd<=ce then ErrMsg:=2;

if (a.y+ab>=c.y-10) or (a.x-ab<=10) then ErrMsg:=3;

c_temp.x:=a.x+round(sqrt(sqr(ab+bc)-sqr(c.y-a.y)));

// Count(c_temp,e,d_temp);

// if (d_temp.x>img.Width) or (d_temp.y>c.y) then ErrMsg:=4;

ce:=round(sqrt(sqr(c_temp.x-e.x)+sqr(c_temp.y-e.y)));

if de+cd<=ce then ErrMsg:=5;

end

else

ErrMsg:=1;

end;

procedure TForm1.ShowErr(ErrMsg: Byte);

var s:string;

begin

case ErrMsg of

1: s:='Ошибка задания координат точек A, B, C. Необходимо уменьшить отрезок AB, либо увеличить BC.';

2: s:='Ошибка задания координат точек C, D, E. Необходимо увеличить отрезки CD и DE.';

3: s:='Ошибка задания координат точки A и B. Слишком большой радиус вращения или слишком маленькое расстояние до краев области моделирования.';

4: s:='Ошибка задания координат точек A, B, С или E. Точка D выходит за границы области моделирования в процессе движения системы.';

5: s:='Ошибка задания координат точек. Отрезок ВС слишком большой.';

end;

MessageDlg(s,mtError,[mbOk],0);

end;

procedure TForm1.Button1Click(Sender: TObject);

var alpha:real;

begin

img.Canvas.Pen.Color:=clWhite;

Redraw;

a.y:=c.y-L5.Value;

b.x:=a.x+L1.Value;

b.y:=a.y-L6.Value;

bc:=L2.Value;

alpha:=arccos((L6.Value+L5.Value)/bc);

c.x:=b.x+round(bc*sin(alpha));

cd:=l3.Value;

de:=L4.Value;

e.x:=c.x+L7.Value;

e.y:=c.y-L8.Value;

Count(c,e,d);

img.Canvas.Pen.Color:=clBlack;

Redraw;

Check(ErrMsg);

if ErrMsg<>0 then ShowErr(ErrMsg) else begin

N1.Enabled:=true;

end;

end;

rocedure TForm1.L5Change(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.L2Change(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.Count(c,e:pnt; var d:pnt);

var CE,CF,DF:integer;

beta,alpha,g:real;

begin

CE:=round(sqrt(sqr(c.x-e.x)+sqr(c.y-e.y)));

beta:=arcsin((e.x-c.x)/CE);

alpha:=arccos((sqr(ce)+sqr(cd)-sqr(de))/(2*ce*cd));

g:=pi/2-beta-alpha;

CF:=round(CD*cos(g));

DF:=round(CD*sin(g));

d.x:=c.x+CF;

d.y:=c.y-DF;

end;

procedure TForm1.L7Change(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.L4Change(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.DrawD(c,e:Pnt);

var d_old,d_next:pnt;

fp:real;

begin

img.Canvas.Pen.Color:=clWhite;

img.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);

Count(c_old,e,d_old);

Count(c,e,d);

Count(c_next,e,d_next);

Dif(d_next.x,d_old.x,fp);

Label4.Caption:='Скорость точки D по Х = '+floattostr(fp);

Dif(d_next.y,d_old.y,fp);

Label5.Caption:='Скорость точки D по Y = '+floattostr(-fp);

DifDif(d_next.x,d.x,d_old.x,fp);

Label9.Caption:='Ускорение точки D по Х = '+floattostr(fp);

DifDif(d_next.y,d.y,d_old.y,fp);

Label10.Caption:='Ускорение точки D по Y = '+floattostr(-fp);

img.Canvas.Pen.Color:=clBlack;

img.Canvas.Ellipse(d.x-10,d.y-10,d.x+10,d.y+10);

end;

procedure TForm1.DxChange(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.L6Change(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.ExChange(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.EyChange(Sender: TObject);

begin

N1.Enabled:=false;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

t:=t+dt;

if t=2*pi then t:=0;

img.Canvas.Pen.Color:=clWhite; //изменение цвета кисти на белый

MoveAB; //удаление отрезков со старыми координатами

MoveBC;

MoveCD;

MoveDE;

MoveB; //Сдвиг ведущей точки B

DrawC; //Сдвиг точки С

DrawD(c,e); //Вычисление точки D

img.Canvas.Pen.Color:=clBlack; //Изменение цвет кисти на черный

img.Canvas.Ellipse(a.x-10,a.y-10,a.x+10,a.y+10);

img.Canvas.Rectangle(a.x-10,a.y+5,a.x+10,a.y+10);

img.Canvas.MoveTo(10,c.y+9);

img.Canvas.LineTo(img.Width-10,c.y+9);

img.Canvas.Ellipse(e.x-10,e.y-10,e.x+10,e.y+10);

MoveAB; //Прорисовка отрезков с новыми координатами

MoveBC;

MoveCD;

MoveDE;

end;

procedure TForm1.TrackBar1Change(Sender: TObject);

begin

Timer1.Interval:=TrackBar1.Position*10;

end;

procedure TForm1.TrackBar2Change(Sender: TObject);

begin

dt:=TrackBar2.Position/100;

end;

procedure TForm1.DrawC;

var fp:real;

begin

img.Canvas.Pen.Color:=clWhite;

img.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);

img.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);

c_old.x:=b_old.x+round(sqrt(sqr(bc)-sqr(c.y-b_old.y)));

c.x:=b.x+round(sqrt(sqr(bc)-sqr(c.y-b.y)));

c_next.x:=b_next.x+round(sqrt(sqr(bc)-sqr(c.y-b_next.y)));

c_old.y:=c.y;

c_next.y:=c.y;

Dif(c_next.x,c_old.x,fp);

Label3.Caption:='Скорость точки С = '+floattostr(fp);

DifDif(c_next.x,c.x,c_old.x,fp);

Label8.Caption:='Ускорение точки C = '+floattostr(fp);

img.Canvas.Pen.Color:=clBlack;

img.Canvas.Rectangle(c.x-20,c.y-10,c.x+20,c.y+10);

img.Canvas.Ellipse(c.x-10,c.y-10,c.x+10,c.y+10);

end;

procedure TForm1.Dif(f1,f2:integer; var fp:real);

begin

fp:=(f1-f2)/2*h;

end;

procedure TForm1.DifDif(f1: Integer; f2: Integer; f3: Integer; var fpp: Real);

begin

fpp:=(f1-2*f2+f3)/sqr(h);

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Reset;

end;

procedure TForm1.Reset;

begin

t:=1;

dt:=0.01;

h:=Timer1.Interval/100;

b.x:=280; b.y:=120;

a.x:=200; a.y:=200;

c.x:=500; c.y:=330;

d.x:=650; d.y:=270;

e.x:=530; e.y:=100;

// Ax.Value:=a.x;

// Ay.Value:=a.y;

// Bx.Value:=b.x;

// By.Value:=b.y;

// Cx.Value:=c.x;

// Cy.Value:=c.y;

// Dx.Value:=d.x;

// Dy.Value:=d.y;

// Ex.Value:=e.x;

// ab:=round(sqrt(sqr(b.x-a.x)+sqr(b.y-a.y)));

bc:=round(sqrt(sqr(b.x-c.x)+sqr(b.y-c.y)));

cd:=round(sqrt(sqr(d.x-c.x)+sqr(d.y-c.y)));

de:=round(sqrt(sqr(d.x-e.x)+sqr(d.y-e.y)));

// CD:=220;

// DE:=150;

ab:=100;

// Redraw

end;

Размещено на Allbest.ru


Подобные документы

  • Проект оболочки моделирования кривошипно-шатунного механизма в среде MS Visual Studio. Разработка его математической модели. Исследование кинематики точек В, С, М. Алгоритм и код программы. Анимация движения механизма и график движения основных точек.

    курсовая работа [422,2 K], добавлен 13.03.2016

  • Написание программы, состоящей из двух модулей и реализующей простейший калькулятор. Разработка алгоритма решения задачи, реализация его в среде программирования Delphi. Список использованных переменных. Блок-схема программы, руководство пользователя.

    курсовая работа [106,6 K], добавлен 16.06.2014

  • Написание программы на языке Delphi для определения суммарного напряжения крюковой подвески: расчет мощности электродвигателя по среднеквадратической нагрузке, по максимальному усилию в стреловом полиспасте, составление блок-схем, описание алгоритма.

    курсовая работа [3,2 M], добавлен 31.05.2010

  • Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.

    курсовая работа [1,4 M], добавлен 04.06.2013

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

    курсовая работа [1,7 M], добавлен 15.04.2015

  • Программа, моделирующая систему массового обслуживания (СМО). Моделирование программы имитации работы турникетов на стадионе (многоканальная СМО) в визуальной среде Delphi 7. Описание программного модуля, листинг программы и руководство пользователя.

    курсовая работа [3,8 M], добавлен 20.08.2009

  • Написание программы для работы с клиентами средствами языка Delphi, которая предусматривает ввод, редактирование и удаление информации. Разработка алгоритма решения задачи, описание переменных, вспомогательных процедур, входных и выходных данных.

    курсовая работа [355,7 K], добавлен 21.09.2010

  • Разработка программы для нахождения корней нелинейных уравнений несколькими методами: методом хорд, касательных, половинного деления, итераций. Реализации программы с помощью системы программирования Delphi 7. Методика работы пользователя с программой.

    курсовая работа [1,3 M], добавлен 11.02.2013

  • Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.

    курсовая работа [506,5 K], добавлен 21.02.2011

  • Характеристика функциональных возможностей разрабатываемой программы в среде Delphi для регистрации абитуриентов. Описание алгоритма и структуры данной программы. Поиск данных в базе по заданным параметрам. Описание модулей и листинг программы.

    курсовая работа [801,5 K], добавлен 19.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.