Лабораторная работа №2
.docМинистерство Образования Российской Федерации
Уфимский Государственный Авиационный Технический Университет
Кафедра ТК
Отчет по лабораторной работе №1
по предмету «Теоретические основы автоматизации управления»
на тему: Структурно-топологические характеристики систем и их применение
Выполнили: студент
Проверила: Валеева Р.Г.
Уфа 2005
Структурно-топологические характеристики систем и их применение
Цель работы
Изучить виды структурно-топологических характеристик систем и способы их вычислений; проанализировать качество предложенных вариантов структур и их элементов с позиций системного подхода.
Исходные данные системы
Листинг программы:
Unit1.h
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published: // IDE-managed Components
TEdit *edtR;
TLabel *Label1;
TEdit *edtE;
TLabel *Label2;
TEdit *edtQ;
TLabel *Label3;
TEdit *edtB;
TLabel *Label4;
TEdit *edtQrel;
TLabel *Label5;
TEdit *edtQmin;
TLabel *Label6;
TEdit *edtD;
TLabel *Label7;
TEdit *edtZmax;
TLabel *Label8;
TEdit *edtN;
TLabel *Label9;
TButton *btnLoad;
TOpenDialog *OpenDialog;
void __fastcall btnLoadClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TfrmMain(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "stdio.h"
#include "math.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
class Data
{
public:
int **A;
int **d;
int N;
Data(AnsiString data_filename, AnsiString param_string)
{
data_file = fopen(data_filename.c_str(),param_string.c_str());
fscanf(data_file,"%i",&N);
FILE *f = fopen("out.txt","wt");
A = new int *[N+1];
for (int i=0;i<=N;i++)
A[i] = new int[N+1];
d = new int *[N+1];
for (int i=0;i<=N;i++)
d[i] = new int[N+1];
int K;
for (int i=1; i<=N; i++)
for (int j=1; j<=N; j++)
{
fscanf(data_file,"%i",&K);A[i][j] = K;
}
for (int i=1; i<=N; i++)
for (int j=1; j<=N; j++)
{
fscanf(data_file,"%i",&K);d[i][j] = K;
}
fclose(data_file);
}
~Data()
{
for (int i=0;i<=N;i++)
{
delete A[i];
delete d[i];
}
delete d;
delete A;
}
private:
FILE *data_file;
};
class Calculator
{
public:
Calculator (Data *datum)
{
data=datum;
N = data->N;
}
float GetR()
{
float R=0;
for (int i=1;i<=N;i++)
for (int j=1;j<=N;j++)
R+=data->A[i][j];
R=R/(2*N-2)-1;
return R;
}
float GetE()
{
float E=0;
float m = 0;
for (int i=1;i<=N;i++)
for (int j=1;j<=N;j++)
if (data->A[i][j]==0)m++;
m=m/2;
for (int i=1;i<=N;i++)
{
float q=0;
for (int j=1;j<=N;j++)
if (data->A[i][j]==0)q++;
q=q*q;
E+=q;
}
E=E-4*m*m/N;
return E;
}
float GetQ()
{
float Q=0;
for (int i=1;i<=N;i++)
for (int j=1;j<=N;j++)
Q+=data->d[i][j];
return Q;
}
float GetQmin()
{
float Qmin=N*(N-1);
return Qmin;
}
float GetQrel()
{
float Qrel=GetQ()/GetQmin()-1;
return Qrel;
}
float Getd()
{
float d=data->A[1][1];
for (int i=2;i<=N;i++)
for (int j=1;j<=N;j++)
if (d<data->d[i][j]) d = data->d[i][j];
return d;
}
float GetN()
{
return N;
}
float GetZmax()
{
float *Z = new float [N+1];
for (int i=1;i<=N;i++)
{
Z[i]=0;
for (int j=1;j<=N;j++)
if(i!=j)
{
Z[i]+=data->d[i][j];
}
Z[i] = GetQ()/(2*Z[i]);
}
float Zmax=Z[1];
for (int i=2;i<=N;i++)
if (Zmax<Z[i]) Zmax = Z[i];
return Zmax;
}
float Getb()
{
float b=0;
b=(N-1)*(2*GetZmax()-N)/(GetZmax()*(N-2));
return b;
}
private:
int N;
Data *data;
};
TfrmMain *frmMain;
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TfrmMain::btnLoadClick(TObject *Sender)
{
Data *data;
if (OpenDialog->Execute()&&FileExists(OpenDialog->FileName))
{
data = new Data(OpenDialog->FileName,"rt");
}
Calculator *Calc = new Calculator(data);
edtR->Text=FloatToStr(Calc->GetR());
edtE->Text=FloatToStr(Calc->GetE());
edtQ->Text=FloatToStr(Calc->GetQ());
edtQmin->Text=FloatToStr(Calc->GetQmin());
edtQrel->Text=FloatToStr(Calc->GetQrel());
edtD->Text=FloatToStr(Calc->Getd());
edtN->Text=FloatToStr(Calc->GetN());
edtZmax->Text=FloatToStr(Calc->GetZmax());
edtB->Text=FloatToStr(Calc->Getb());
}
Входные данные
Результат
Вывод
В проделанной лабораторной работе были изучены структурно-топологические характеристики систем и способы их вычислений; проанализировано качество предложенных вариантов структур и их элементов с позиций системного подхода.