Разработка виртуального практического занятия "Построение сетей на базе протокола H.323"

Анализ построения сетей на базе протокола H.323. Основные преимущества сетей IP-телефонии. Назначение и возможности виртуального практического занятия. Анализ средств разработки приложения. Разработка графического интерфейса, блок-схемы программы.

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

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

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

Технические методы увеличения безопасности работы за компьютером

Эргономичное аппаратное оборудование

Чтобы работа была комфортной и безопасной необходимо позаботиться об аппаратном оборудовании компьютера. Как правило, набольший вред здоровью пользователя компьютера наносят устройства ввода-вывода: монитор, клавиатура, мышь.

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

FCC Class B - этот стандарт разработан канадской федеральной комиссией по коммуникациям для обеспечения приемлемой защиты окружающей среды от влияния радиопомех в замкнутом пространстве. Оборудование, соответствующее требованиям FCC Class B, не должно мешать работе теле- и радио аппаратуры.

MPR-II - этот стандарт был выпущен в Шведским национальным департаментом. MPR-II налагает ограничения на излучения от компьютерных мониторов и промышленной техники, используемой в офисе.

TCO'95 (а также современный TCO'99) - рекомендация, разработанная Шведской конференцией профсоюзов и Национальным советом индустриального и технического развития Швеции (NUTEK), регламентирует взаимодействие с окружающей средой. Она требует уменьшения электрического и магнитного полей до технически возможного уровня с целью защиты пользователя. Для того, чтобы получить сертификат TCO'95 (TCO'99), монитор должен отвечать стандартам низкого излучения (Low Radiation), т.е. иметь низкий уровень электромагнитного поля, обеспечивать автоматическое обеспечивать автоматическое снижение энергопотребления при долгом не использовании, отвечать европейским стандартам пожарной и электрической безопасности

EPA Energy Star VESA DPMS - согласно этому стандарту монитор должен поддерживать три энергосберегающих режима - ожидание (stand-by), приостановку (suspend) и “сон” (off). Такой монитор при долгом простое компьютера переводится в соответствующий режим, с низким энергопотреблением.

Необходимо также чтобы монитор имел возможность регулировки параметров изображения (яркость, контраст и т.д.). Рекомендуется, чтобы при работе с компьютером частота вертикальной развертки монитора была не ниже 75Гц (при этом пользователь перестает замечать мерцание изображения, которое ведет к быстрому уставанию глаз).

В настоящее время многие фирмы производители мониторов начали массовый выпуск так называемых плоскопанельных мониторов (LCD), которые лишены многих экологических недостатков, присущих мониторам с электронно-лучевой трубкой, как то: электромагнитное излучение, магнитное поле, мерцание и т.д.

Устройства ввода информации

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

Эргономичная организация рабочего места

Даже самое эргономичное оборудование в мире не поможет вам избежать заболеваний, если использовать его неправильно. Следуя простым советам по эргономичной организации рабочего места, можно предотвратить дальнейшее развитие заболеваний.

Рабочее пространство

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

Работа с клавиатурой

Неправильное положение рук при печати на клавиатуре приводит к хроническим растяжениям кисти. Важно не столько отодвинуть клавиатуру от края стола и опереть кисти о специальную площадку, сколько держать локти параллельно поверхности стола и под прямым углом к плечу. Поэтому клавиатура должна располагаться в 10-15 см (в зависимости от длины локтя) от края стола. В этом случае нагрузка приходится не на кисть, в которой вены и сухожилия находятся близко к поверхности кожи, а на более "мясистую" часть локтя. Современные, эргономичные модели имеют оптимальную площадь для клавиатуры за счет расположения монитора в самой широкой части стола. Глубина стола должна позволяет полностью положить локти на стол, отодвинув клавиатуру к монитору.

Расположение монитора

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

Именно поэтому конструкция современных столов позволяет менять глубину положения монитора в широком диапазоне. Верхняя граница на уровне глаз или не ниже 15 см ниже уровня глаз.

Внутренний объем

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

Кресло

Казалось бы, требования к нему сформулировать предельно просто, - оно должно быть удобным. Но это еще не все. Кресло должно обеспечивать физиологически рациональную рабочую позу, при которой не нарушается циркуляция крови и не происходит других вредных воздействий. Кресло обязательно должно быть с подлокотниками и иметь возможность поворота, изменения высоты и угла наклона сиденья и спинки. Желательно иметь возможность регулировки высоты и расстояния между подлокотниками, расстояния от спинки до переднего края сиденья. Важно, чтобы все регулировки были независимыми, легко осуществимыми и имели надежную фиксацию. Кресло должно быть регулируемым, с возможность вращения, чтобы дотянуться до далеко расположенных предметов.

Положение за компьютером

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

Поставьте ступни плоско на пол или на подножку.

Поясница слегка выгнута, опирается на спинку кресла.

Руки должны удобно располагаться по сторонам.

Линия плеч должна располагаться прямо над линией бедер.

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

Локти согнуты и находятся примерно в 3 см от корпуса.

Запястья должны принять нейтральное положение (ни подняты, ни опущены).

Выводы

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

Компьютерная техника развивается сегодня особенно стремительно, с необычайной быстротой появляются, и также быстро устаревают и отмирают различные технические решения и стандарты. По прогнозам различных экономико-социологических организаций компьютерная техника и телекоммуникации будут оставаться одной из наиболее развивающихся отраслей мировой индустрии еще по крайней мере в течение 10 - 15 лет. Так что уменьшения числа людей, работающих за компьютерами ждать не приходиться. Наоборот, повальная компьютеризация, уже давно охватившая бизнес-сектор, сегодня все больше захватывает массового потребителя. В подобной гонке, где нет ничего постоянного, сложно давать рекомендации, принимать какие-либо долговечные решения, а тем паче устанавливать стандарты. А потому, пока компьютерный бум не пойдет на убыль, перед эргономикой и эргономистами будут вставать все новые задачи, касающиеся организации безопасных и комфортных условий для людей работающих с компьютерами .

Заключение

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

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

Данная программа призвана обучить студентов основам построения сетей IP-телефонии. Имея дружественный интерфейс, программа обладает достаточно сложной функциональной начинкой, и имеет огромный потенциал для усовершенствования. В настоящее время основной ее функцией является проверка правильности построения сети на основе анализа ее структуры и составных элементов. В дальнейшем возможно введение дополнительных модулей анализа, дополнительных устройств и начальных данных. Например, можно составить программу для анализа загруженности каналов, учитывая нагрузку, создаваемую каждым терминалом. Возможно, даже составить полноценную программу - анализатор наподобие OPNET, но для этого требуется много времени, труд не одного человека и сотрудничество с компаниями - производителями оборудования IP-телефонии.

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

Использование при создании данного приложения среды разработки Adobe Flash так же дает программе преимущество перед аналогичными программами. Первый плюс - это размер программы. Если на компьютере установлен Adobe Flash Player, то размер программы не превышает 70 КБ. Так же к плюсам можно отнести возможность взаимодействия с веб-приложениями, и публикации программы непосредственно на веб-странице. При этом даже обладатели подключения к Интернету по технологии Dial - Up на скорости 56 Кбит/с потратят на загрузку приложения не более 15 - 20 с. Еще одним преимуществом является возможность быстро внести изменения и в программную и в графическую часть программы, не используя дополнительных приложений.

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

Литература

1. Б.С. Гольдштейн, А.В. Пинчук, А.Л. Суховицкий. IP-Телефония. Москва «Радио и связь». 2001

2. Д. Ф. Куроуз, К. В. Росс. Компьютерные сети. Многоуровневая структура Интернета. 2-е издание. «Питер». 2004

3. А.Б. Гольдштейн, Б.С. Гольдштейн. Softswitch. «БХВ - Санкт-Петербург». 2006

4. Cisco IP Telephony Network Design Guide

5. Toga J., Ott J. ITU-T standardization activities for interactive multimedia communications on packet-based networks: H.323 and related recommendations. Computer Networks. 1999.

6. Д. Лотт, Д. Шалл, К. Питере. ActionScript 3.0 Сборник рецептов. Санкт-Петербург - Москва. 2008

7. Adobe® Flash® CS3 Professional Руководство Пользователя. Adobe Inc. 2007

8. Программирование на Adobe® ActionScript® 3.0. Adobe Inc. 2007

9. R. Braunstein, M. H. Wright, J. J. Noble. ActionScript ™ 3.0 Bible. Wiley Publishing, Inc. 2008

10. Э. А. Арустамов. Безопасность жизнедеятельности. Москва. 2006

11. www.Flasher.ru

12. www.Wikipedia.org

13. www.AskDoctor.Ru

14. www.mhts.ru

Приложение 1

Листинг программы

Текст первого кадра основной сцены (основной код, описывающий взаимодействие между всеми элементами).

import Sub.Device;

import Sub.Hardware;

import Sub.DrawingCanvas;

import Sub.Variant;

FirstAddBtn.addEventListener(MouseEvent.CLICK, addDevice1);

SecondAddBtn.addEventListener(MouseEvent.CLICK, addDevice2);

ThirdAddBtn.addEventListener(MouseEvent.CLICK, addDevice3);

CableAddBtn.addEventListener(MouseEvent.CLICK, addCable);

TestBtn.addEventListener(MouseEvent.CLICK, test);

stage.addEventListener(KeyboardEvent.KEY_DOWN, onDelPress);

stage.addEventListener(Event.ENTER_FRAME, PlayClip);

stage.addEventListener(Event.ENTER_FRAME, Indicator);

stop();

var IndexH:int = 1;

var IndexD:int = 1;

function addDevice1(e:MouseEvent):void {

Canvas1.addDev(1, DeviceCh.value, 1, IndexH);

IndexH +=1;

}

function addDevice2(e:MouseEvent):void {

Canvas1.addDev(1, DeviceCh.value, 2, IndexH);

IndexH +=1;

}

function addDevice3(e:MouseEvent):void {

Canvas1.addDev(1, DeviceCh.value, 3, IndexH);

IndexH +=1;

}

function addCable(e:MouseEvent):void {

Canvas1.addDev(2, CableCh.value, 0, IndexD);

IndexD +=1;

}

function onDelPress(event:KeyboardEvent):void {

if (event.keyCode == 46) {

this.Canvas1.DeleteDev(Device.selectedDevice);

}

}

function test(e:MouseEvent):void {

Canvas1.TestRun();

}

function PlayClip(event:Event):void {

if (Variant1.flagStart) {

Canvas1.CodeV = Variant1.Code;

Canvas1.VP = Variant1.VP;

stage.removeEventListener(Event.ENTER_FRAME, PlayClip);

play();

}

}

function Indicator(event:Event):void {

if (Canvas1.CreateLink) {

LinkIndikator.gotoAndStop(2);

} else {

LinkIndikator.gotoAndStop(1);

}

}

Текст 15 кадра (отслеживание правильного решения)

this.stop();

stage.addEventListener(Event.ENTER_FRAME, End);

function End(event:Event):void {

if (Canvas1.flagTest) {

play();

stage.removeEventListener(Event.ENTER_FRAME, End);

}

}

Текст модуля рабочего поля DrawingCanvas.as.

package Sub{

import Sub.Device;

import flash.events.*;

import flash.events.MouseEvent;

import flash.display.MovieClip;

import flash.display.SimpleButton;

import flash.display.Sprite;

import flash.display.DisplayObjectContainer;

import flash.display.DisplayObject;

public class DrawingCanvas extends Sprite {

public var flagchange1:Boolean;

public var flagTestA:Boolean=false;

public var flagTestV:Boolean=false;

public var flagTestF:Boolean=false;

public var flagTest:Boolean=false;

public var CreateLink:Boolean=false;

public var selectedDevice:Device=Device.selectedDevice;

public var currentDevice:Device=Device.currentDevice;

public var CodeV:String;

public var Code:String;

public var TAq,PCq,TH323q,GVH323q,GKH323q,SERVq,HUBq,ROPTq,RVPq,RE1q:Number;

public var VP:Boolean;

public function DrawingCanvas():void {

this.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);

}

public function TestRun():void {

flagTest=false;

TestActive();

TestVar();

TestActive();

trace("CodeV: ",CodeV);

trace("Code: ",Code);

trace("FA: ",flagTestA);

trace("FV: ",flagTestV);

trace("FF: ",flagTestF);

trace("F: ",flagTest);

if (flagTestA && flagTestV && flagTestF) {

flagTest=true;

}

}

public function TestActive():void {

var Dev:Device;

var activebefore:Boolean;

for (var i1:Number=0; i1 <= this.numChildren - 1; i1++) {

Dev=this.getChildAt(i1) as Device;

Dev.Reset();

}

do {

flagchange1=false;

for (var i2:Number=0; i2 <= this.numChildren - 1; i2++) {

Dev=this.getChildAt(i2) as Device;

activebefore=Dev.Active;

Dev.TestDevice();

if (activebefore != Dev.Active) {

flagchange1=true;

}

}

} while (flagchange1);

TestFil();

flagTestA=true;

for (var i3:Number=0; i3 <= this.numChildren - 1; i3++) {

Dev=this.getChildAt(i3) as Device;

if (Dev.Active == false) {

flagTestA=false;

}

}

}

public function TestFil():void {

var Dev:Device;

var flagTestF2:Boolean=false;

var flagTestF3:Boolean=false;

for (var i3:Number=0; i3 <= this.numChildren - 1; i3++) {

Dev=this.getChildAt(i3) as Device;

if (Dev.DType == "Cable") {

Dev.TestDeviceBranch2(VP);

Dev.TestDeviceBranch3();

if (Dev.flagF2) {

flagTestF2=true;

}

if (Dev.flagF3) {

flagTestF3=true;

}

}

}

if (flagTestF2 && flagTestF3) {

flagTestF=true;

} else {

flagTestF=false;

}

}

public function TestVar():void {

flagTestV=false;

TAq=0,PCq=0,TH323q=0,GVH323q=0,GKH323q=0,SERVq=0,HUBq=0,ROPTq=0,RVPq=0,RE1q=0;

var Dev:Device;

for (var i1:Number=0; i1 <= this.numChildren - 1; i1++) {

Dev=this.getChildAt(i1) as Device;

if (Dev.Branch == 1) {

switch (Dev.Type) {

case "TA" :

TAq++;

trace(TAq);

break;

case "PC" :

PCq++;

break;

case "TH323" :

TH323q++;

break;

case "GVH323" :

GVH323q++;

break;

case "GKH323" :

GKH323q++;

break;

case "SERV" :

SERVq++;

break;

case "HUB" :

HUBq++;

break;

case "ROPT" :

ROPTq++;

break;

case "RVP" :

RVPq++;

break;

case "RE1" :

RE1q++;

break;

}

}

}

Code="";

Code+= TAq.toString() + PCq.toString() + TH323q.toString() + GVH323q.toString() + GKH323q.toString() + SERVq.toString() + HUBq.toString() + ROPTq.toString() + RVPq.toString() + RE1q.toString() + "_";

TAq=0,PCq=0,TH323q=0,GVH323q=0,GKH323q=0,SERVq=0,HUBq=0,ROPTq=0,RVPq=0,RE1q=0;

for (var i2:Number=0; i2 <= this.numChildren - 1; i2++) {

Dev=this.getChildAt(i2) as Device;

if (Dev.Branch == 2) {

switch (Dev.Type) {

case "TA" :

TAq++;

break;

case "PC" :

PCq++;

break;

case "TH323" :

TH323q++;

break;

case "GVH323" :

GVH323q++;

break;

case "GKH323" :

GKH323q++;

break;

case "SERV" :

SERVq++;

break;

case "HUB" :

HUBq++;

break;

case "ROPT" :

ROPTq++;

break;

case "RVP" :

RVPq++;

break;

case "RE1" :

RE1q++;

break;

}

}

}

Code+= TAq.toString() + PCq.toString() + TH323q.toString() + GVH323q.toString() + GKH323q.toString() + SERVq.toString() + HUBq.toString() + ROPTq.toString() + RVPq.toString() + RE1q.toString() + "_";

TAq=0,PCq=0,TH323q=0,GVH323q=0,GKH323q=0,SERVq=0,HUBq=0,ROPTq=0,RVPq=0,RE1q=0;

for (var i3:Number=0; i3 <= this.numChildren - 1; i3++) {

Dev=this.getChildAt(i3) as Device;

if (Dev.Branch == 3) {

switch (Dev.Type) {

case "TA" :

TAq++;

break;

case "PC" :

PCq++;

break;

case "TH323" :

TH323q++;

break;

case "GVH323" :

GVH323q++;

break;

case "GKH323" :

GKH323q++;

break;

case "SERV" :

SERVq++;

break;

case "HUB" :

HUBq++;

break;

case "ROPT" :

ROPTq++;

break;

case "RVP" :

RVPq++;

break;

case "RE1" :

RE1q++;

break;

}

}

}

Code+= TAq.toString() + PCq.toString() + TH323q.toString() + GVH323q.toString() + GKH323q.toString() + SERVq.toString() + HUBq.toString() + ROPTq.toString() + RVPq.toString() + RE1q.toString();

if (Code == CodeV) {

flagTestV=true;

} else {

flagTestV=false;

}

}

public function DeleteDev(Dev:Device):void {

var ContactCable:Device;

if (Dev.DType == "Hard") {

for (var i:Number=this.numChildren - 1; i >= 0; i--) {

ContactCable=this.getChildAt(i) as Device;

if (ContactCable.DType == "Cable") {

if (ContactCable.CChild1 == Dev || ContactCable.CChild2 == Dev) {

switch (ContactCable.CChild2P) {

case "In" :

ContactCable.CChild2.portsIn.amountFree++;

break;

case "Out" :

ContactCable.CChild2.portsOut.amountFree++;

break;

}

switch (ContactCable.CChild1P) {

case "In" :

ContactCable.CChild1.portsIn.amountFree++;

break;

case "Out" :

ContactCable.CChild1.portsOut.amountFree++;

break;

}

this.removeChild(ContactCable);

}

}

}

this.removeChild(Dev);

}

if (Dev.DType == "Cable") {

switch (Dev.CChild1P) {

case "In" :

Dev.CChild1.portsIn.amountFree++;

break;

case "Out" :

Dev.CChild1.portsOut.amountFree++;

break;

}

switch (Dev.CChild2P) {

case "In" :

Dev.CChild2.portsIn.amountFree++;

break;

case "Out" :

Dev.CChild2.portsOut.amountFree++;

break;

}

this.removeChild(Dev);

}

}

public function addDev(DeviceTypeIndex:int,DeviceSubTypeIndex:String,Branch:int,Index:int):void {

var newDevice:Device;

switch (DeviceTypeIndex) {

case 1 :

newDevice=new Hardware ;

newDevice.Branch=Branch;

newDevice.Index=Index;

newDevice.Type=DeviceSubTypeIndex;

newDevice.SetupDevice();

newDevice.SetupBounds();

newDevice.x=newDevice.rectBounds.x + newDevice.rectBounds.width / 2;

newDevice.y=newDevice.rectBounds.y + newDevice.rectBounds.height / 2;

this.addChild(newDevice);

break;

case 2 :

newDevice=new Cable ;

newDevice.Type=DeviceSubTypeIndex;

CreateLink = true;

this.addEventListener(MouseEvent.CLICK,CreateBegin);

this.addChild(newDevice);

Device.currentDevice=newDevice;

stage.addEventListener(KeyboardEvent.KEY_DOWN,CancelCreate);

this.setChildIndex(newDevice,0);

break;

}

}

public function CreateBegin(event:MouseEvent):void {

if (Device.selectedDevice.portsIn.Type == Device.currentDevice.Type && Device.selectedDevice.portsIn.amountFree > 0) {

CreateLink = true;

Device.currentDevice.SetupDevice();

Device.currentDevice.StartCreateIn(Device.selectedDevice);

this.removeEventListener(MouseEvent.CLICK,CreateBegin);

this.addEventListener(MouseEvent.CLICK,CreateEnd);

} else {

if (Device.selectedDevice.portsOut.Type == Device.currentDevice.Type && Device.selectedDevice.portsOut.amountFree > 0) {

CreateLink = true;

Device.currentDevice.SetupDevice();

Device.currentDevice.StartCreateOut(Device.selectedDevice);

this.removeEventListener(MouseEvent.CLICK,CreateBegin);

this.addEventListener(MouseEvent.CLICK,CreateEnd);

} else {

this.removeEventListener(MouseEvent.CLICK,CreateBegin);

CreateLink = false;

this.removeEventListener(MouseEvent.CLICK,CreateEnd);

this.removeChild(Device.currentDevice);

}

}

}

public function CancelCreate(event:KeyboardEvent):void {

if (event.keyCode == 27) {

CreateLink = false;

if (Device.currentDevice.CChild1 != null) {

if (Device.currentDevice.CChild1P == "In") {

Device.currentDevice.CChild1.portsIn.amountFree=Device.currentDevice.CChild1.portsIn.amountFree + 1;

}

if (Device.currentDevice.CChild1P == "Out") {

Device.currentDevice.CChild1.portsOut.amountFree=Device.currentDevice.CChild1.portsOut.amountFree + 1;

}

}

if (Device.currentDevice.CChild2 != null) {

if (Device.currentDevice.CChild2P == "In") {

Device.currentDevice.CChild2.portsIn.amountFree=Device.currentDevice.CChild2.portsIn.amountFree + 1;

}

if (Device.currentDevice.CChild2P == "Out") {

Device.currentDevice.CChild2.portsOut.amountFree=Device.currentDevice.CChild2.portsOut.amountFree + 1;

}

}

stage.removeEventListener(KeyboardEvent.KEY_DOWN,CancelCreate);

this.removeEventListener(MouseEvent.CLICK,CreateBegin);

this.removeEventListener(MouseEvent.CLICK,CreateEnd);

this.removeChild(Device.currentDevice);

}

}

public function CreateEnd(event:MouseEvent):void {

var Device1:Device=Device.selectedDevice;

CreateLink = false;

if (Device.selectedDevice.portsIn.Type == Device.currentDevice.Type && Device.selectedDevice.portsIn.amountFree > 0) {

Device.currentDevice.EndCreateIn(Device1);

stage.removeEventListener(KeyboardEvent.KEY_DOWN,CancelCreate);

this.removeEventListener(MouseEvent.CLICK,CreateEnd);

} else {

if (Device.selectedDevice.portsOut.Type == Device.currentDevice.Type && Device.selectedDevice.portsOut.amountFree > 0) {

Device.currentDevice.EndCreateOut(Device1);

stage.removeEventListener(KeyboardEvent.KEY_DOWN,CancelCreate);

this.removeEventListener(MouseEvent.CLICK,CreateEnd);

}

}

}

public function onMouseUp(evt:MouseEvent):void {

if (selectedDevice != null && selectedDevice.Selected) {

selectedDevice.onMouseUp(evt);

}

}

}

}

Текст модуля Device.as

package Sub{

import Sub.Port;

import Sub.Hardware;

import Sub.Cable;

import flash.events.*;

import flash.geom.*;

import flash.text.*;

import flash.display.MovieClip;

import flash.display.SimpleButton;

import flash.display.Sprite;

import flash.display.DisplayObjectContainer;

import flash.display.DisplayObject;

import flash.filters.GlowFilter;

import flash.filters.BitmapFilterQuality;

import flash.utils.Timer;

public class Device extends MovieClip {

public var Selected:Boolean = false;

public var Index:int = 1;

public var DType:String;

private var selectGlow:GlowFilter = new GlowFilter;

private var filterArray:Array = new Array(selectGlow);

public var Active:Boolean = false;

public var Type:String;

public var portsIn:Port = new Port();

public var portsOut:Port = new Port();

public var Branch:int = 1;

public var rectBounds:Rectangle = new Rectangle();

public var x1:Number,y1:Number,x2:Number,y2:Number;

public var FieldContainer:Sprite = new Sprite();

public var color:uint = 0xFF0000;

public var colorP:uint = 0xFF0000;

public var colorA:uint = 0xFF0000;

public var CChild1:Device;

public var CChild1P:String;

public var CChild2:Device;

public var CChild2P:String;

public var NoLockSelect:Boolean = true;

public var Dragging:Boolean = false;

public var flagF2:Boolean = false;

public var flagF3:Boolean = false;

public var podskazkaText:String;

public static var selectedDevice:Device;

public static var currentDevice:Device;

public function DeleteDev(Device3:Device):void {

super.DeleteDev(Device3);

}

public function Device():void {

setupGlow();

SetupDevice();

this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);

this.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);

}

public function TestDevice():void {

}

public function TestDeviceBranch3():void {

}

public function TestDeviceBranch2(VP:Boolean):void {

}

public function StartCreateIn(Device1:Device):void {

}

public function StartCreateOut(Device1:Device):void {

}

public function EndCreateIn(Device1:Device):void {

}

public function EndCreateOut(Device1:Device):void {

}

public function SetupDevice():void {

}

private function onMouseDown(evt:MouseEvent):void {

this.select();

if (DType == "Hard") {

trace("In:", this.portsIn.amountFree);

trace("Out:", this.portsOut.amountFree);

this.startDrag(false, rectBounds);

Dragging = true;

}

}

public function onMouseUp(evt:MouseEvent):void {

this.stopDrag();

Dragging = false;

}

public function select():void {

if (NoLockSelect) {

this.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 80, 0);

this.filters = filterArray;

Selected = true;

if (Device.selectedDevice != this) {

if (Device.selectedDevice != null) {

Device.selectedDevice.deselect();

}

Device.selectedDevice = this;

}

}

}

public function deselect():void {

this.filters = null;

this.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);

Selected = false;

}

public function Reset():void {

}

public function SetupBounds():void {

switch (Branch) {

case 1 :

rectBounds.x = 20;

rectBounds.y = 75;

rectBounds.width = 440;

rectBounds.height = 310;

break;

case 2 :

rectBounds.x = 510;

rectBounds.y = 75;

rectBounds.width = 440;

rectBounds.height = 310;

break;

case 3 :

rectBounds.x = 265;

rectBounds.y = 412;

rectBounds.width = 440;

rectBounds.height = 310;

break;

}

}

private function setupGlow():void {

selectGlow.color = 0x3C9DFF;

selectGlow.quality = BitmapFilterQuality.HIGH;

selectGlow.blurX=5;

selectGlow.blurY=5;

}

}

}

Текст модуля Hardware.as

package Sub{

import Sub.Port;

import Sub.Device;

import flash.events.*;

import flash.geom.*;

import flash.display.MovieClip;

import flash.display.SimpleButton;

import flash.display.Sprite;

import flash.display.DisplayObjectContainer;

import flash.display.DisplayObject;

import flash.filters.GlowFilter;

import flash.filters.BitmapFilterQuality;

public class Hardware extends Device {

private var PicIndex:int = 1;

public function Hardware():void {

SetupDevice();

}

public override function Reset():void {

this.Active = false;

deactivate();

portsIn.Active = false;

portsOut.Active = false;

}

public override function TestDevice():void {

switch (Type) {

case "TA" :

if (portsIn.Active) {

this.Active = true;

activate();

} else {

this.Active = false;

deactivate();

}

break;

case "PC" :

if (portsIn.Active) {

this.Active = true;

activate();

} else {

this.Active = false;

deactivate();

}

break;

case "TH323" :

if (portsIn.Active) {

this.Active = true;

activate();

} else {

this.Active = false;

deactivate();

}

break;

case "GVH323" :

if (portsIn.Active) {

portsOut.Active = true;

this.Active = true;

activate();

} else {

portsOut.Active = false;

this.Active = false;

deactivate();

}

break;

case "GKH323" :

if (portsIn.Active) {

this.Active = true;

activate();

} else {

this.Active = false;

deactivate();

}

break;

case "SERV" :

if (portsIn.Active) {

this.Active = true;

activate();

} else {

this.Active = false;

deactivate();

}

break;

case "HUB" :

portsOut.Active = true;

this.Active = true;

activate();

break;

case "ROPT" :

if (portsIn.Active) {

portsOut.Active = true;

this.Active = true;

activate();

} else {

portsOut.Active = false;

this.Active = false;

deactivate();

}

break;

case "RVP" :

if (portsIn.Active) {

portsOut.Active = true;

this.Active = true;

activate();

} else {

portsOut.Active = false;

this.Active = false;

deactivate();

}

break;

case "RE1" :

if (portsIn.Active) {

portsOut.Active = true;

this.Active = true;

activate();

} else {

portsOut.Active = false;

this.Active = false;

deactivate();

}

}

}

public override function SetupDevice():void {

switch (Type) {

case "TA" :

podskazkaText = "Телефонный аппарат";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 0;

portsOut.amountFree = 0;

portsIn.Type = "RJ11";

portsOut.Type = "NA";

PicIndex = 1;

break;

case "PC" :

podskazkaText = "Персональный компьютер";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 0;

portsOut.amountFree = 0;

portsIn.Type = "RJ45";

portsOut.Type = "NA";

PicIndex = 2;

break;

case "TH323" :

podskazkaText = "Видеотелефон";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 0;

portsOut.amountFree = 0;

portsIn.Type = "RJ45";

portsOut.Type = "NA";

PicIndex = 3;

break;

case "GVH323" :

podskazkaText = "Шлюз ТФОП/IP";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 16;

portsOut.amountFree = 16;

portsIn.Type = "RJ45";

portsOut.Type = "RJ11";

PicIndex = 4;

break;

case "GKH323" :

podskazkaText = "Привратник";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 0;

portsOut.amountFree = 0;

portsIn.Type = "RJ45";

portsOut.Type = "NA";

PicIndex = 5;

break;

case "SERV" :

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 0;

portsOut.amountFree = 0;

portsIn.Type = "RJ45";

portsOut.Type = "NA";

PicIndex = 6;

break;

case "HUB" :

podskazkaText = "HUB";

portsIn.amount = 0;

portsIn.amountFree = 0;

portsOut.amount = 32;

portsOut.amountFree = 32;

portsIn.Type = "NA";

portsOut.Type = "RJ45";

PicIndex = 7;

break;

case "ROPT" :

podskazkaText = "Оптический маршрутизатор";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 1;

portsOut.amountFree = 1;

portsIn.Type = "RJ45";

portsOut.Type = "OPT";

PicIndex = 8;

break;

case "RVP" :

podskazkaText = "Ethernet маршрутизатор";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 1;

portsOut.amountFree = 1;

portsIn.Type = "RJ45";

portsOut.Type = "RJ45";

PicIndex = 9;

break;

case "RE1" :

podskazkaText = "E1 маршрутизатор";

portsIn.amount = 1;

portsIn.amountFree = 1;

portsOut.amount = 1;

portsOut.amountFree = 1;

portsIn.Type = "RJ45";

portsOut.Type = "E1";

PicIndex = 10;

break;

}

gotoAndStop(PicIndex);

SetupBounds();

DType = "Hard";

}

private function activate():void {

if ((PicIndex >= 1)&&(PicIndex < 11)) {

PicIndex += 10;

}

gotoAndStop(PicIndex);

}

private function deactivate():void {

if ((PicIndex >= 10)&&(PicIndex < 21)) {

PicIndex -= 10;

}

gotoAndStop(PicIndex);

}

}

}

Текст модуля Cable.as

package Sub{

import Sub.Port;

import Sub.Device;

import flash.events.*;

import flash.geom.*;

import flash.display.MovieClip;

import flash.display.SimpleButton;

import flash.display.Sprite;

import flash.display.DisplayObjectContainer;

import flash.display.DisplayObject;

import flash.filters.GlowFilter;

import flash.filters.BitmapFilterQuality;

public class Cable extends Device {

private var flagDragging:Boolean=false;

private var drawed:Boolean=false;

public function Cable():void {

SetupDevice();

}

public override function Reset():void {

this.Active=false;

color=colorP;

clearLine();

drawLine();

}

public override function TestDeviceBranch3():void {

if (CChild1.Branch == 1 && CChild2.Branch == 3 || CChild2.Branch == 1 && CChild1.Branch == 3) {

if (CChild1P == "Out" && CChild1.Type == "ROPT" && CChild1.Active && CChild2P == "Out" && CChild2.Type == "ROPT" && CChild2.Active) {

this.Active=true;

color=colorA;

clearLine();

drawLine();

flagF3=true;

} else {

flagF3=false;

}

} else {

flagF3=false;

}

}

public override function TestDeviceBranch2(VP:Boolean):void {

if (CChild1.Branch == 1 && CChild2.Branch == 2 || CChild2.Branch == 1 && CChild1.Branch == 2) {

if (VP && CChild1.Type == "RVP" && CChild1.Active && CChild2.Type == "RVP" && CChild2.Active) {

this.Active=true;

color=colorA;

clearLine();

drawLine();

flagF2=true;

} else {

if (VP == false && CChild1P == "Out" && CChild1.Type == "RE1" && CChild1.Active && CChild2P == "Out" && CChild2.Type == "RE1" && CChild2.Active) {

this.Active=true;

color=colorA;

clearLine();

drawLine();

flagF2=true;

} else {

flagF2=false;

}

}

} else {

flagF2=false;

}

}

public override function TestDevice():void {

if (CChild1.Branch == CChild2.Branch) {

if (CChild1P == "Out" && CChild1.portsOut.Active) {

this.Active=true;

color=colorA;

clearLine();

drawLine();

if (CChild2P == "In") {

CChild2.portsIn.Active=true;

}

if (CChild2P == "Out") {

CChild2.portsOut.Active=true;

}

}

if (CChild2P == "Out" && CChild2.portsOut.Active) {

this.Active=true;

color=colorA;

clearLine();

drawLine();

if (CChild1P == "In") {

CChild1.portsIn.Active=true;

}

if (CChild1P == "Out") {

CChild1.portsOut.Active=true;

}

}

}

}

public override function SetupDevice():void {

switch (Type) {

case "RJ11" :

podskazkaText="Телефонный кабель";

colorP=0x800000;

colorA=0xFF0000;

break;

case "RJ45" :

podskazkaText="Витая пара";

colorP=0x808000;

colorA=0xFFFF00;

break;

case "OPT" :

podskazkaText="Оптоволокно";

colorP=0x008000;

colorA=0x00FF00;

break;

case "E1" :

podskazkaText="Поток E1";

colorP=0x008080;

colorA=0x00FFFF;

break;

}

color=colorP;

addChild(FieldContainer);

DType="Cable";

}

public override function StartCreateIn(Device1:Device):void {

CChild1P="In";

CChild1=Device1;

CChild1.portsIn.amountFree-= 1;

NoLockSelect=false;

x1=Device1.x;

y1=Device1.y;

addEventListener(Event.ENTER_FRAME,BeginDraw);

}

public override function StartCreateOut(Device1:Device):void {

CChild1P="Out";

CChild1=Device1;

CChild1.portsOut.amountFree-= 1;

NoLockSelect=false;

x1=Device1.x;

y1=Device1.y;

addEventListener(Event.ENTER_FRAME,BeginDraw);

}

public override function EndCreateIn(Device1:Device):void {

CChild2=Device1;

CChild2P="In";

x2=Device1.x;

y2=Device1.y;

removeEventListener(Event.ENTER_FRAME,BeginDraw);

CChild2.portsIn.amountFree-= 1;

NoLockSelect=true;

addEventListener(Event.ENTER_FRAME,Watch);

}

public override function EndCreateOut(Device1:Device):void {

CChild2=Device1;

CChild2P="Out";

x2=Device1.x;

y2=Device1.y;

removeEventListener(Event.ENTER_FRAME,BeginDraw);

CChild2.portsOut.amountFree-= 1;

NoLockSelect=true;

addEventListener(Event.ENTER_FRAME,Watch);

}

public function BeginDraw(event:Event) {

clearLine();

x2=mouseX;

y2=mouseY;

drawLine();

}

public function EndDraw(event:Event) {

clearLine();

x2=CChild2.x;

y2=CChild2.y;

drawLine();

}

public function drawLine():void {

var graph:Sprite=new Sprite ;

var xsize:Number=x2 - x1;

var ysize:Number=y2 - y1;

var a:Number=xsize * 0.1;

var alfa=Math.atan(ysize / xsize * 0.8);

var b:Number=a * Math.cos(alfa);

var c:Number=a * Math.sin(alfa);

graph.graphics.lineStyle(2,color);

graph.graphics.moveTo(x1,y1);

graph.graphics.curveTo(x1 + a,y1,x1 + a + b,y1 + c);

graph.graphics.lineTo(x2 - a - b,y2 - c);

graph.graphics.curveTo(x2 - a,y2,x2,y2);

FieldContainer.addChild(graph);

drawed=true;

}

public function Watch(event:Event):void {

if (CChild1.Dragging) {

x1=CChild1.x;

y1=CChild1.y;

clearLine();

drawLine();

}

if (CChild2.Dragging) {

x2=CChild2.x;

y2=CChild2.y;

clearLine();

drawLine();

}

}

public function clearLine():void {

if (drawed) {

FieldContainer.removeChildAt(0);

drawed=false;

}

}

}

}

Текст модуля Variant.as

package Sub{

import flash.display.MovieClip;

import flash.display.SimpleButton;

import flash.events.MouseEvent;

import flash.display.Sprite;

import flash.text.*;

public class Variant extends Sprite {

public var flagStart:Boolean = false;

public var Var:Number;

public var Code:String;

public var VP:Boolean;

public function Variant():void {

SetupVar();

OK.addEventListener(MouseEvent.CLICK, startProg);

}

public function SetupVar():void {

VarInput.maxChars = 2;

VarInput.restrict = "0-9";

}

public function startProg(event:MouseEvent):void {

if (VarInput.text != "") {

if (VarInput.length == 1) {

Var = int(VarInput.text);

} else {

Var =int(VarInput.text.charAt(1));

}

flagStart = true;

VarChouse();

}

}

public function VarChouse():void{

switch(Var){

case 1:

Code = "8841111110_4521001010_3501001100";

VP = true;

break;

case 2:

Code = "6921111110_3601001010_4211001100";

VP = true;

break;

case 3:

Code = "8401101101_5301001001_2501001100";

VP = false;

break;

case 4:

Code = "5731111101_6411001001_3401001100";

VP = false;

break;

case 5:

Code = "4801101110_3301001010_5301001100";

VP = true;

break;

case 6:

Code = "9521111110_5401001010_4311001100";

VP = true;

break;

case 7:

Code = "6641111101_4621001001_3601001100";

VP = false;

break;

case 8:

Code = "8601101101_6201001001_5401001100";

VP = false;

break;

case 9:

Code = "5921111110_2501001010_3311001100";

VP = true;

break;

case 0:

Code = "6401101110_4301001010_4401001100";

VP = true;

break;

}

}

}

}

Текст модуля Port.as

package Sub{

public class Port extends Object{

public var Active:Boolean = false;

public var amount:int = 1;

public var amountFree:int = amount;

public var Type:String = "RJ45";

}

}

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

...

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

  • Основы безопасности виртуальных частных сетей (ВЧС). ВЧС на основе туннельного протокола PPTP. Шифрование и фильтрация ВЧС. Туннелирование по протоколу L2TP. Создание виртуального частного подключения в Windows. Использование программы Sniffer Pro.

    дипломная работа [2,0 M], добавлен 24.11.2010

  • Понятие сетей и связи их компонентов. Характеристики и структура сетей. Основные модели, описывающие поведение сетей. Проектирование и реализация взвешенных сетей: требования к интерфейсу, выбор среды разработки, структура приложения. Анализ результатов.

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

  • Основные виды сетевых атак на VIRTUAL PERSONAL NETWORK, особенности их проведения. Средства обеспечения безопасности VPN. Функциональные возможности технологии ViPNet(c) Custom, разработка и построение виртуальных защищенных сетей (VPN) на ее базе.

    курсовая работа [176,0 K], добавлен 29.06.2011

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

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

  • Анализ существующих виртуальных музеев. Формирование основных требований к виртуальному 3D музею. Анализ цифровой и текстовой информации о Московском Мультимедиа Арт Музее. Разработка структуры и интерфейса мобильного приложения виртуального музея.

    дипломная работа [3,8 M], добавлен 26.08.2017

  • Создание автоматизированной системы мониторинга состояния аппаратных средств компьютерных сетей на основе протокола SNMP в среде программирования С++Builder. Описание реляционной базы данных и ее визуальное представление. Разработка диаграммы классов.

    отчет по практике [2,2 M], добавлен 05.01.2016

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

    дипломная работа [2,9 M], добавлен 19.06.2014

  • Основные понятия IP телефонии и виды строения сетей IP телефонии. Голосовые шлюзы Cisco Systems для IP-телефонии. IP IVR как средство автоматического ответа на вызовы. Преимущества построения распределенного Контакт Центра, архитектура его построения.

    дипломная работа [3,0 M], добавлен 21.04.2016

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

    дипломная работа [573,3 K], добавлен 25.09.2014

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

    дипломная работа [3,8 M], добавлен 21.12.2012

  • Анализ создания виртуального окружения для разработки. Установка фреймворка Flask. Особенность настройки аутентификации и привилегий. Создание Python-файла и написание в нем простого веб-приложения. Запуск и проверка работоспособности приложения.

    лабораторная работа [2,1 M], добавлен 28.11.2021

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

    лабораторная работа [36,8 K], добавлен 03.12.2009

  • Применение электронных вычислительных машин. Создание локально-вычислительных сетей. Исследование принципов работы сети Ethernet. Изучение архитектуры прикладного интерфейса Windows. Назначение протокола NetBIOS и консольного приложения MyServer.

    контрольная работа [162,7 K], добавлен 19.01.2016

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

    дипломная работа [2,9 M], добавлен 03.09.2013

  • Обзор рынка мобильных приложений, социальных сетей, аналогов. Обзор инструментов разработки: Android Studio, Microsoft visual С# 2012, PostgreeSQL, API Открытых данных Вологодской области, API Социальных сетей. Программный код, разработка интерфейса.

    дипломная работа [2,6 M], добавлен 10.07.2017

  • Разработка и внедрение автоматизированной системы управления дорожным движением. Специфика применения программы интеллектуальных транспортных сетей, использующей принцип нейронных схем, в городе Хабаровске на языке программирования Turbo Pascal 7.0.

    дипломная работа [1,7 M], добавлен 19.06.2012

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

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

  • Классификация компьютерных сетей. Назначение компьютерной сети. Основные виды вычислительных сетей. Локальная и глобальная вычислительные сети. Способы построения сетей. Одноранговые сети. Проводные и беспроводные каналы. Протоколы передачи данных.

    курсовая работа [36,0 K], добавлен 18.10.2008

  • Механизмы обеспечения информационной безопасности корпоративных сетей от угроз со стороны сети Интернет. Механизм защиты информации на основе использования межсетевых экранов. Принципы построения защищенных виртуальных сетей (на примере протокола SKIP).

    реферат [293,2 K], добавлен 01.02.2016

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

    презентация [72,8 K], добавлен 04.05.2012

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