Предметна область системного аналізу Основні поняття системного аналізу

2







МІНІСТЕРСТВО ОСВІТИ І НАУКИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”





Кафедра інформаційних

систем та мереж











Практична робота №1

на тему:

ПРЕДМЕТНА ОБЛАСТЬ СИСТЕМНОГО АНАЛІЗУ. ОСНОВНІ ПОНЯТТЯ СИСТЕМНОГО АНАЛІЗУ







	

	

	

	

	

					

					

					

					

					

					

					Львів-2009р.


Назва роботи: 

Предметна область системного аналізу. Основні поняття системного аналізу



Мета роботи: 

Ознайомитись з предметною областю системного аналізу та вивчити теоретичні відомості.



Короткі теоретичні відомості:

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

Необхідність такого підходу обумовлена видатними досягненнями ХХ століття, зокрема освоєнням космосу; розробкою й масовим впровадженням обчислювальної техніки, інформаційних технологій і світової мережі Інтернет; швидким розвитком і широким застосуванням авіацій; дослідженням ядерних процесів, освоєнням і розвитком атомної енергетики. Стрімкий розвиток наукомістких технологій і технічного оснащення в різних галузях виробництва й обслуговування, враховуючи медицину, фармакологію, генну інженерію, низка інших найбільших досягнень науково- технічного прогресу увійшли в історію цивілізації як результат погодженої взаємодії науки, освіти і промисловості. Усі ці досягнення зробили свій вагомий внесок різні науки, які охоплюють багато галузей знань і різні історичні періоди. Це були науки, що зародилися у Стародавньому світі, і науки, формування яких почалося лише у ХХ столітті. До останніх поряд з іншими новітніми напрямами, такими як кібернетика, дослідження операцій, загальна теорія систем, системотехніка, теорія прийняття рішень, теорія оптимізації, належить і системний аналіз.

Системне мислення – це вища форма людського пізнання, коли процеси відображення об’єктивної реальності базуються на цілісному відображені досліджуваного об’єкта з позиції досягнення поставлених цілей дослідження на підставі знань, досвіду, інтуїції і передбачення. Принципово важливою деталлю цього означення є залежність меж об’єкта дослідження від поставлених цілей.

Середовище – зовнішнє оточення людини та об’єкта дослідження (природне середовище, зовнішні об’єкти, що залежать від розглянутого об’єкта або взаємодіють із ним).

Людина – розробник, виробник, користувача, продавець чи покупець об’єкта або фахівець-дослідник відповідної предметної галузі, до якої належить досліджуваний об’єкт.



Відповіді на контрольні питання: 

Системний аналіз — вивчення об'єкта дослідження як сукупності елементів, що утворюють систему. У наукових дослідженнях він передбачає оцінку поведінки об'єкта як системи з усіма факторами, які впливають на його функціонування. Цей метод широко застосовується у наукових дослідженнях при комплексному вивченні діяльності виробничих об'єднань і галузі в цілому, визначенні пропорцій розвитку галузей економіки тощо.

Системне мислення – це вища форма людського пізнання, коли процеси відображення об’єктивної реальності базуються на цілісному відображені досліджуваного об’єкта з позиції досягнення поставлених цілей дослідження на підставі знань, досвіду, інтуїції і передбачення. Принципововажливою деталлю цього означення є залежність меж об’єкта дослідження від поставлених цілей.

Системний аналітик – Людина яка стежить за станом системи. І досліджує систему.

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

A×B={(a,b) |a∈A,b∈B} - прямий добуток множин.

A∪B={x|x∈A∨x∈B} - поєднання множин.

A∩B={x|x∈A∧x∈B} - перетин множин.

A\B={x|x∈A∧x∉B} - різниця множин.

∅ - пуста множина.

U - універсальна множина.

A=U\A={x|x∉A} - доповнення множини.

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

В алгоритмах на дискретних структурах часто ми зустрічаємось з представленням кінцевих послідовностей та операціями з ними. З обчислювальної точки зору простішим представленням кінцевої послідовності 1 2 , , ,n s s … s є точний список її членів, які знаходяться по порядку в суміжних комірках пам’яті.

Мережа Петрі складається з чотирьох елементів: скінченної множини позицій Р = {p1, p2,..., pn}, множини переходів Т = {t1, t2,..., tm}, вхідної функції І:T→P, і вихідної функції О:T→P.

Майже всі машинні представлення дерев основані на зв’язних розподілах. Кожний вузол складається із поля даних та деяких полів для вказівників. В наступному прикладі представлені дерев кожний вузол має по три поля вказівників.

Дерево досягальності мережі Петрі є ілюстрацією множини досягальності R(C, μ). Оскільки в багатьох випадках множина досягальності є нескінченною, то існують певні правила, які дозволяють відобразити її скінченним деревом досягальності.



Поставновка задачі:

Потрібно за даними в методичці знайти розширену вхідну і вихідну функції мережі Петрі. Також зобразити граф мережі Петрі, дерево досяжності глибини 3. Написати програму яка повинна шукати розширену вхідну і вихідну функції за вхідними даними і будувати дерево досяжності.



Вхідні дані:

I(t1) = { p4, p2 , p3 };			O(t1) = { p4, p3, p4 , p3, p3 , p4, p1 };

I(t2) = { p2, p3, p3 , p3 };			O(t2) = { p3, p1, p2, p4, p4 };

I(t3) = { p4, p3 };					O(t3) = { p1, p4};

I(t4) = { p4, p2 p2, p4 ,p4 p3, p2 };		O(t4) = { p2, p2 };

μ0 = {5,5,5,5}.



Хід виконання роботи:

Ознайомитись з теоретичними відомості, які подані в цій методичці. Реалізувати на мовах Pascal або С програми зв’язного формування списку елементів послідовності згідно номеру варіанту.Програма повинна шукати розширену вхідну і вихідну функцію і будувати дерево досяжності глибини 3. Розв’язати завдання відповідно до свого порядкового номеру у списку групи. Завдання отримати у викладача. При оформленні лабораторної роботи дотримуватись вимог, які наведені в методичних вказівках. 

Розширена вхідна і вихідна функції:



I(p1)={t1,t2,t3}

I(p2)={t2,t4,t4}

I(p3)={t1,t1,t1,t2}

I(p4)={t1,t1,t1,t2,t2,t3}

O(p1)={}

O(p2)={t1,t2,t4,t4,t4}

O(p3)={t1,t2,t2,t2,t3,t4}

O(p4)={t1,t3,t4,t4,t4}



Граф мережі Петрі:





P1

t1

P2

P3

t3

P4

t2

t4



Маркування мережі Петрі:





P1

t1

P2

P3

t3

P4

t2

t4

Виконання мережі Петрі:



Запуск t1:





P1

t1

P2

P3

t3

6

P4

t2

t4

7

7



Запуск t2:





P1

t1

P2

P3

t3

7

P4

t2

t4

9




Запуск t3:





P1

t1

P2

P3

t3

8

P4

t2

t4

9



t4

Запуск t4:





P1

t1

P2

P3

t3

8

P4

t2

t4

6


Дерево досягальності глибини 3:







Код програми:

#include <vcl.h>

#include <string.h>

#pragma hdrstop



#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

//--------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "XPManifest"

#pragma link "acButtons"

#pragma resource "*.dfm"

#define n 4

TForm1 *Form1;

//---------------------------------------------------------------------------

struct TMT

{

int z;

int p[n];

int t[n];

};



TMT P[n], T[n];   int ccc[n],cc[n],c[n],b;

//---------------------------------------------------------------------------



__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}



//---------------------------------------------------------------------------

void run()

{

P[0].z=StrToInt(Form1->StringGrid3->Cells[1][0]);     T[0].z=0;   ccc[0]=P[0].z;

P[1].z=StrToInt(Form1->StringGrid3->Cells[2][0]);     T[1].z=0;   ccc[1]=P[1].z;

P[2].z=StrToInt(Form1->StringGrid3->Cells[3][0]);     T[2].z=0;   ccc[2]=P[2].z;

P[3].z=StrToInt(Form1->StringGrid3->Cells[4][0]);     T[3].z=0;   ccc[3]=P[3].z;

int z;

for(z=0; z<n; z++)

{

for(int i=0; i<n; i++)

{P[z].t[i]=0; T[i].p[z]=0;



for(int j=0; j<Form1->StringGrid1->ColCount; j++)

{

if((StrToIntDef(Form1->StringGrid2->Cells[j][i],0)))

if(z+1==StrToInt(Form1->StringGrid2->Cells[j][i]))P[z].t[i]++;



if((StrToIntDef(Form1->StringGrid1->Cells[j][i],0)))

if(z+1==StrToInt(Form1->StringGrid1->Cells[j][i]))T[i].p[z]++;

}}}}

//---------------------------------------------------------------------------

void search()

{  AnsiString p,p2,t,t2; int z,j,zz;



for(z=0; z<Form1->StringGrid1->RowCount; z++)

{    p="I(p"+IntToStr(z+1)+")={";

     t="O(p"+IntToStr(z+1)+")={";

for(j=0; j<Form1->StringGrid2->RowCount; j++)

for(zz=0; zz<Form1->StringGrid2->ColCount; zz++)

{

if((StrToIntDef(Form1->StringGrid2->Cells[zz][j],0)))

if(z+1==StrToInt(Form1->StringGrid2->Cells[zz][j]))

{

p2="t"+IntToStr(j+1)+",";

p+=p2; 

}

if((StrToIntDef(Form1->StringGrid1->Cells[zz][j],0)))

if(z+1==StrToInt(Form1->StringGrid1->Cells[zz][j]))

       {

t2="t"+IntToStr(j+1)+",";

t+=t2; }

}

if(p.Pos("t")) p[p.Length()]='}';else p+="}";

Form1->Memo1->Lines->Add(p);

if(t.Pos("t")) t[t.Length()]='}';else t+="}";

Form1->Memo2->Lines->Add(t);

}}



//=========================================================

void __fastcall TForm1::FormCreate(TObject *Sender)

{

for(int i=0; i<Form1->StringGrid1->RowCount; i++)

{

StringGrid1->Cells[0][i]="I(t"+IntToStr(i+1)+")";

StringGrid2->Cells[0][i]="O(t"+IntToStr(i+1)+")";

}

StringGrid3->Cells[0][0]="  м";

StringGrid3->Cells[1][0]="5";

StringGrid3->Cells[2][0]="5";

StringGrid3->Cells[3][0]="5";

StringGrid3->Cells[4][0]="5";

}

//=========================================================

void spp(int i)

{

for(int j=0; j<n; j++)

if(T[i].p[j]&&T[i].p[j]>P[j].z) {b=0; break;}



if(b==1)

 {

 for(int j=0; j<n; j++)

   {

   T[i].z+=T[i].p[j];

   P[j].z-=T[i].p[j];

   }

 for(int k=0; k<n; k++)

 if(P[k].t[i]!=0&&T[i].z!=0)

 P[k].z+=P[k].t[i];

 }

}

 void kpk()

 {

for(int i=0; i<n; i++)

{

Form1->TreeView1->Items->AddChild(Form1->TreeView1->Items->Item[0],"0");

Form2->TreeView1->Items->AddChild(Form2->TreeView1->Items->Item[0],"0");

for(int j=0; j<n; j++)

{

Form1->TreeView1->Items->AddChild(Form1->TreeView1->Items->Item[0]->Item[i],"0");

Form2->TreeView1->Items->AddChild(Form2->TreeView1->Items->Item[0]->Item[i],"0");

for(int e=0; e<n; e++)

{

Form1->TreeView1->Items->AddChild(Form1->TreeView1->Items->Item[0]->Item[i]->Item[j],"0");

Form2->TreeView1->Items->AddChild(Form2->TreeView1->Items->Item[0]->Item[i]->Item[j],"0");

}}}}//---------------



//=======================================

int p1,p2,p3;

void run_5()

 p1=-1;

AnsiString f="m("+IntToStr(P[0].z)+","+IntToStr(P[1].z)+","+IntToStr(P[2].z)+","+IntToStr(P[3].z)+")";

Form1->TreeView1->Items->Clear();     Form2->TreeView1->Items->Clear();

Form1->TreeView1->Items->Add(NULL,f); Form2->TreeView1->Items->Add(NULL,f);

Form1->TreeView1->Items->Item[0]->Text=f;

Form2->TreeView1->Items->Item[0]->Text=f;

kpk();

for(int i=n-1; i>-1; i--)

{b=1; T[i].z=0; p1++; p2=-1;

if(!Form1->CheckBox2->Checked)  t1=p1; else t1=i;

 P[0].z=ccc[0];

 P[1].z=ccc[1];

 P[2].z=ccc[2];

 P[3].z=ccc[3];

spp(p1);

AnsiString f="t"+IntToStr(p1+1)+"("+IntToStr(P[0].z)+","+IntToStr(P[1].z)+","+IntToStr(P[2].z)+","+IntToStr(P[3].z)+")";

if(ccc[0]!=P[0].z||ccc[1]!=P[1].z||ccc[2]!=P[2].z||ccc[3]!=P[3].z)

{

Form1->TreeView1->Items->Item[0]->Item[t1]->Text=f;

Form2->TreeView1->Items->Item[0]->Item[t1]->Text=f;

cc[0]=P[0].z;

cc[1]=P[1].z;

cc[2]=P[2].z;

cc[3]=P[3].z;

}

else goto end;



for(int j=n-1; j>-1; j--)

 {b=1; T[j].z=0; p2++; p3=-1;

 if(!Form1->CheckBox2->Checked)  t2=p2; else t2=j;

 P[0].z=cc[0];

 P[1].z=cc[1];

 P[2].z=cc[2];

 P[3].z=cc[3];

  spp(p2);

  AnsiString f="t"+IntToStr(p2+1)+"("+IntToStr(P[0].z)+","+IntToStr(P[1].z)+","+IntToStr(P[2].z)+","+IntToStr(P[3].z)+")";

  if(cc[0]!=P[0].z||cc[1]!=P[1].z||cc[2]!=P[2].z||cc[3]!=P[3].z)

  {

   Form1->TreeView1->Items->Item[0]->Item[t1]->Item[t2]->Text=f;

   Form2->TreeView1->Items->Item[0]->Item[t1]->Item[t2]->Text=f;

   c[0]=P[0].z;

  c[1]=P[1].z;

  c[2]=P[2].z;

  c[3]=P[3].z;

  }

  else goto end1;

   for(int e=n-1; e>-1; e--)

   { b=1; T[j].z=0; p3++;

   if(!Form1->CheckBox2->Checked)  t3=p3; else t3=e;

    P[0].z=c[0];

    P[1].z=c[1];

    P[2].z=c[2];

    P[3].z=c[3];

   spp(p3);

   AnsiString f="t"+IntToStr(p3+1)+"("+IntToStr(P[0].z)+","+IntToStr(P[1].z)+","+IntToStr(P[2].z)+","+IntToStr(P[3].z)+")";

   if(c[0]!=P[0].z||c[1]!=P[1].z||c[2]!=P[2].z||c[3]!=P[3].z)

   {

    Form1->TreeView1->Items->Item[0]->Item[t1]->Item[t2]->Item[t3]->Text=f;

    Form2->TreeView1->Items->Item[0]->Item[t1]->Item[t2]->Item[t3]->Text=f;

   } }

 end1:

 }end: }

void __fastcall TForm1::acBitBtn2Click(TObject *Sender)

{

int i=0,j=0;

p1=n; b=1; p1=n;

Memo1->Clear();

Memo2->Clear();

search();

run();

run_5();

}




Результати роботи програми:







Висновок:

Я ознайомився з предметною областю системного аналізу та вивчив теоретичні відомості. Виконав завдання, написав програму.