Исследование связности ячеистых сетей и разработка алгоритмов имитационного моделирования

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

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

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

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

//Form1.Memo1.Append(''+inttostr(d[i]));

end;

end;

function anton2:integer;

var uze: array[0..13] of boolean;

str,sum:string;

i,j,k,kf:integer;

begin

for i:=0 to 13 do uze[i]:=false;

//smez3:=smez;

//Memo1.Append(anton1(0));

sum:='';

kf:=0;

for i:=0 to nversh-1 do begin

if not uze[i] then begin str:=anton1(i);

if str<>'' then for j:=1 to Length(str) do uze[StrToInt(str[j])]:=true;

kf:=kf+Length(str)*(Length(str)-1);

sum:=sum+' '+str;

end;

end;

anton2:=kf;

end;

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

procedure TForm1.Button12Click(Sender: TObject);

var i,ig,i7,j,n,g,g2,h,tek,pred,kk,p:integer;

html: TIpHtml;

ms:TMemoryStream;

MyString:AnsiString;

pr:real;

koef: array[0..40] of integer;

koef2: array[0..40] of integer;

s,str,ps,vr:string;

new:boolean;

res: Word;

// для графика,которого нет

kff:real;

maxk:integer;

begin

kostgraph:=0; // -1

nraz:=2;

prev.x:=0;

n:=0;

h:=1;

kk:=0;

for i:=0 to 40 do begin

koef[i]:=0;

koef2[i]:=0;

end;

for i:=0 to nversh-1 do begin // заполнение массива вершин

dug[h]:=IntToStr(i);

h:=h+1;

end;

n:=h-1;

Label2.Caption:='r='+inttoStr(n);

Label3.Caption:='n='+inttoStr(nversh);

str:='';

kk:=0;

res:=1;

if n>17 then begin // ограничение

res := MessageDlg('Данная процедура может занять более '+FloattoStr(power(2,(n-17)))+' минут. Продолжить?', mtInformation, [mbOk, mbCancel], 0);

end;

if res<>2 then begin

for i:=1 to (1 shl n)-1 do begin

for j:=1 to n do if(i and(1 shl(j-1)))>0 then

begin

str:=str+dug[j];

end;

if true then begin //length(str)

g2:=1;

smez3:=smez; // дублируем исходную матрицу

for g:=1 to round(length(str)) do begin // удаление вершин

For i7:=0 To nversh Do begin

smez3[StrtoInt(str[g]),i7]:=-1;

smez3[i7,StrToInt(str[g])]:=-1;

end;

end;

//ShowMessage(str+' '+inttostr(connect));

//if (length(str)/4)=2 then Memo1.Append(str+' '+inttostr(connect));

koef[round(length(str))]:=koef[round(length(str))]+Length(jivnew);

koef2[round(length(str))]:=koef2[round(length(str))]+1;

//Memo1.Append('anton:'+IntToStr(anton2));

if round(length(str))>kk then kk:=round(length(str));

end;

str:='';

end;

end;

for i:=1 to kk do vr:=vr+InttoStr(koef[i])+' '+InttoStr(i)+'+';

Memo1.Append(vr);

if not Otch.Checked then StringGrid1.ColCount:=2;

if Otch.Checked then StringGrid1.ColCount:=notch+2;

StringGrid1.Cells[0,0]:='Количество изымаемых вершин';

StringGrid1.Cells[1+notch,0]:=bukv[notch]+')';

StringGrid1.Cells[0,1]:='0';

StringGrid1.Cells[1+notch,1]:=IntToStr(0); // костыли

//koef[kk]:=0;

maxk:=0; // для графика

for i:=1 to 10 do begin //нафиг эти костыли!

if koef2[i]<>0 then begin

pr:=0;

pr:=koef[i]/koef2[i];

StringGrid1.Cells[0,i+1]:=floattostr(i);

StringGrid1.Cells[1+notch,i+1]:=Format('%.3n',[1-(pr/nversh)]); //вывод в таблицу

maxk:=maxk+1;

end

else StringGrid1.Cells[1+notch,i+1]:='0';

end;

if otch.Checked then begin /// отчет!!

form[notch]:=MyString;

notch:=notch+1;

//Image1.Picture.SaveToFile(IntToStr(notch)+'.bmp');

jpg.Assign(Image1.Picture.Bitmap);

jpg.CompressionQuality:= 100;

jpg.SaveToFile(IntToStr(notch)+'.jpg');

if notch=6 then Button6.Enabled:=false;

end;

end;

function connect:integer;

var

b:array[0..25]of boolean;//список просмотренных вершин

d:array[0..25] of longint;//кротчайшие расстояния

q, i, j, m, v,n: integer;

s:string;

begin

//Ввод данных

n:=nversh-1;

q := 0; //начальная вершина

if (q < 1) or (q > n) then q := 1;

for i := 0 to n do

for j := 0 to n do

//Расчет

fillchar(b,sizeof(b),0);

fillchar(d,sizeof(d), 10000);

d[q] := 0;//расстояние до начальной вершины

for i:=0 to n do

begin

m := 1000;

for j := 0 to n do

if ( (d[j] <= m) and (not b[j]) ) then

begin

m:=d[j];

v:=j;

end;

b[v] := true;

for j := 0 to n do

if ((smez3[v,j]<>-1)and (not b[j]) and (d[v]+smez3[v,j]<d[j])) then

d[j]:=d[v]+smez3[v,j];

end;

connect:=0;

for i := 0 to n do begin

if d[i]>nversh then begin

connect:=connect+1;

end;

end;

end;

Программный код построения графических зависимостей при гибели сетей

procedure TForm1.Button2Click(Sender: TObject);

var i,j,nox,noy,XI,Yi:integer;

xxx,xxx1:real;

Rect: TRect;

Points: Array[0..3] of TPoint;

begin

Image2.Canvas.Brush.Color:=clWhite; //присваиваем кисти цвет формы.

Image2.Canvas.FillRect(0,0,Width,Height); //заливаем Image выбранным цветом кисти.

Image2.Canvas.Pen.Width:=1;

Image2.Canvas.Pen.Color:=clBlack;

Image2.Canvas.Line(25,Image2.Height-15,Image2.Height-5,Image2.Height-15); // горизонтальная палка ох

Image2.Canvas.Line(Image2.Height-5,Image2.Height-15,Image2.Height-15,Image2.Height-11); // стрелочка

Image2.Canvas.Line(Image2.Height-5,Image2.Height-15,Image2.Height-15,Image2.Height-19); // ->

Image2.Canvas.Line(25,Image2.Height-15,25,10); // вертикальная палка оу

Image2.Canvas.Line(25,10,29,20); // cтрелка

Image2.Canvas.Line(25,10,21,20); // ^

Image2.Canvas.Font.Size:=7;

nox:=10;

noy:=10; // кол-во меток по Оу

//noy:=maxoy;

// nox:=maxoy;

{ длина оси отступ } // черточки и цифры по осям

for i:=0 to nox do begin

Image2.Canvas.TextOut(trunc((Image2.Height-45)/nox)*i+25,Image2.Height-10,Format('%.2n',[i/10]));

Image2.Canvas.Line(trunc((Image2.Height-45)/nox)*i+25,Image2.Height-10,trunc((Image2.Height-45)/nox)*i+25,Image2.Height-20); // черточки |

end;

for i:=0 to noy do begin

Image2.Canvas.TextOut(5,Image2.Height-10-trunc((Image2.Height-45)/noy)*i,Format('%.2n',[i/10]));

Image2.Canvas.Line(20,Image2.Height-15-trunc((Image2.Height-45)/noy)*i,30,Image2.Height-15-trunc((Image2.Height-45)/noy)*i);

end;

Image2.Canvas.Pen.Color:=clGray;

// серые полоски

for i:=1 to nox do Image2.Canvas.Line(trunc((Image2.Height-45)/nox)*i+25,Image2.Height-15,trunc((Image2.Height-45)/nox)*i+25,10); // полосочки |

for i:=1 to noy do Image2.Canvas.Line(25,Image2.Height-15-trunc((Image2.Height-45)/noy)*i,Image2.Height-15,Image2.Height-15-trunc((Image2.Height-45)/noy)*i);

Image2.Canvas.Font.Size:=10;

Image2.Canvas.TextOut(30,0,'d(Sp)');

Image2.Canvas.TextOut(Image2.Height,Image2.Height-15,'dпр');

Image2.Canvas.Pen.Width:=2;

Image2.Canvas.Pen.Mode := pmMask;

for j:=1 to StringGrid1.ColCount-1 do begin // по столбцам

Image2.Canvas.Pen.Color:=Colores[j mod 7];

Image2.Canvas.Brush.Color:=Colores[j mod 7];

for i:=2 to StringGrid1.RowCount-1 do begin // по строчкам

if StringGrid1.Cells[0,i]<>'' then begin { FloatToStr(10*(i-1)/skokan(j)) Grx(StringGrid1.Cells[0,i-1])}

Memo1.Append(StringGrid1.Cells[0,i]+' / '+InttoStr(skokan(j)));

xxx:=StrToFloat(StringGrid1.Cells[0,i-1])/skokan(j);

xxx1:=StrToFloat(StringGrid1.Cells[0,i])/skokan(j);

if Grx1(FloatToStr(xxx1))<Image2.Height then begin //Grx1(StringGrid1.Cells[j,i])<Image2.Height-50

Figur(Grx1(FloatToStr(xxx1)),Gry1(StringGrid1.Cells[j,i]),j);

Image2.Canvas.Line(Grx1(FloatToStr(xxx)),Gry1(StringGrid1.Cells[j,i-1]),Grx1(FloatToStr(xxx1)),Gry1(StringGrid1.Cells[j,i]));

//if xxx1=1 then break;

end;

end;

end;

Image2.Canvas.Line(Image2.Height+20,25*j,Image2.Height+30,25*j);

Figur(Image2.Height+25,25*j,j);

Image2.Canvas.Pen.Mode := pmCopy;

Image2.Canvas.Brush.Color:=clWhite;

Image2.Canvas.TextOut(Image2.Height+35,25*j-7,bukv[j-1]+' '+mnbu[j-1]);

end;

end;

procedure Figur(x:integer;y:integer;n:integer) ; // отрисовка фигур

var x1,x2,y1,y2:integer;

xyp: array[1..4] of TPoint;

begin

x1:=x-4;

x2:=x+4;

y1:=y-4;

y2:=y+4;

with Form1.Image2.Canvas do begin

Brush.Style := bsSolid;

case n of

1:EllipseC(x,y,4,4); // не залитый круг

2:Rectangle(x-4,y-4,x+4,y+4); // квадрат

3:begin // ромб

xyp[1].x:=x1; xyp[1].y:=Round((y1 + y2) / 2);

xyp[2].x:=Round((x1 + x2) / 2); xyp[2].y:=y1;

xyp[3].x:=x2; xyp[3].y:=Round((y1 + y2) / 2);

xyp[4].x:=Round((x1 + x2) / 2); xyp[4].y:=y2;

Polygon(xyp);

end;

4:begin // треугольник

xyp[1].x:=x; xyp[1].y:=y1;

xyp[2].x:=x1; xyp[2].y:=y2;

xyp[3].x:=x2; xyp[3].y:=y2;

xyp[4].x:=x2; xyp[4].y:=y2;

Polygon(xyp);

end;

5:begin // перевернутый треугольник

xyp[1].x:=x1; xyp[1].y:=y1;

xyp[2].x:=x2; xyp[2].y:=y1;

xyp[3].x:=x; xyp[3].y:=y2;

xyp[4].x:=x; xyp[4].y:=y2;

Polygon(xyp);

end;

6:begin

line(x,y1,x,y2);

line(x1,y,x2,y);

end;

end;

end;

end;

function Grx(x:string): integer; // перевод координат

begin

Grx:=trunc((Form1.Image2.Height-47)*StrToFloat(x)/maxdox)+25;

end;

function Gry(y:string): integer; // перевод координат

begin

Gry:=Form1.Image2.Height-15-trunc((Form1.Image2.Height-47)*StrToFloat(y)/maxdoy);

end;

function skokan(col:integer): integer; // к

var i:integer;

firstnull:boolean; // в начале могут быть нули которые нам нужны

begin

skokan:=0;

firstnull:=true;

for i:=2 to Form1.StringGrid1.RowCount-1 do begin

if (StrToFloat(Form1.StringGrid1.Cells[col,i])=0) and firstnull then skokan:=skokan+1;

if StrToFloat(Form1.StringGrid1.Cells[col,i])<>0 then begin

skokan:=skokan+1;

firstnull:=false;

end;

end;

skokan:=skokan;

end;

function Gry1(y:string): integer;

begin

Gry1:=Form1.Image2.Height-15-trunc((Form1.Image2.Height-47)*StrToFloat(y));

end;

function Grx1(x:string): integer;

begin

Grx1:=trunc((Form1.Image2.Height-47)*StrToFloat(x))+25;

end;

Программный код вывода отчета во внешний файл

procedure TForm1.Button1Click(Sender: TObject);

var i,j,n:integer;

begin

n:=StringGrid1.ColCount-1;

Memo1.Clear;

Memo1.Append('<html>');

Memo1.Append('<head>');

Memo1.Append('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');

Memo1.Append('</head>');

Memo1.Append('<body>');

Memo1.Append('<TABLE>');

for i:=1 to n do Memo1.Append('<TD>'+bukv[i-1]+')<img src="'+IntToStr(i)+'.jpg" WIDTH=100 HEIGHT=100 /></TD>');

Memo1.Append('</TABLE>');

Memo1.Append(('Теоретические зависимости:'));

Memo1.Append('<TABLE>');

for i:=0 to 2 do Memo1.Append('<TR><TD>'+bukv[i*2]+')'+form[i*2]+'</TD><TD>'+bukv[(i*2)+1]+')'+form[(i*2)+1]+'</TD><TR>');

Memo1.Append('</TABLE>');

Memo1.Append('Вероятности связности');

Memo1.Append('<center>');

SGridToHtml(StringGrid1, Memo1, 1);

Memo1.Append('</center>');

//Image2.Picture.SaveToFile('graph.bmp');

Memo1.Append(('График'));

jpg.Assign(Image2.Picture.Bitmap);

jpg.CompressionQuality:=100;

jpg.SaveToFile('graph.jpg');

Memo1.Append('<center>');

Memo1.Append('<TD><img src="graph.jpg" WIDTH=536 HEIGHT=448 /></TD>');

Memo1.Append('</center>');

Memo1.Append('</body>');

Memo1.Append('</html>');

Memo1.Lines.SaveToFile('1.html');

Otch.Checked:=false;

end;

procedure SGridToHtml(SG: TStringgrid; Dest: TMemo; BorderSize: Integer);

const

Colores:array[0..6] of TColor=($000000, $ef9c00, $ffff00, $008000, $0000ff, $000080, $ff00ff);

var

i, p: integer;

SStyle1, SStyle2, Text: string;

begin

//Dest.Clear;

// Dest.Lines.Add('<html>');

Dest.Lines.Add('<body>');

Dest.Lines.Add(' <table border="' + IntToStr(BorderSize) + '" width="' +

IntToStr(SG.Width) + '" height="' + IntToStr(SG.Width) + '">');

for i := 0 to SG.RowCount - 1 do

begin

Dest.Lines.Add(' <tr>');

for p := 0 to SG.ColCount - 1 do

begin

SStyle1 := '';

SStyle2 := '';

if fsbold in SG.Font.Style then

begin

SStyle1 := SStyle1 + '<b>';

SStyle2 := SStyle2 + '</b>';

end;

if fsitalic in SG.Font.Style then

begin

SStyle1 := SStyle1 + '<i>';

SStyle2 := SStyle2 + '</i>';

end;

if fsunderline in SG.Font.Style then

begin

SStyle1 := SStyle1 + '<u>';

SStyle2 := SStyle2 + '</u>';

end;

Text := sg.Cells[p, i];

if Text = '' then Text := ' ';

Dest.Lines.Add(' <td width="' + IntToStr(sg.ColWidths[p]) +

'" height="' + IntToStr(sg.RowHeights[p]) +

'"><font color="#' + ColorToHTMLHexColor(Colores[p mod 7]) +

'" face="' + SG.Font.Name + '">' + SStyle1 +

Text + SStyle2 + '</font></td>');

end;

Dest.Lines.Add(' </tr>');

end;

Dest.Lines.Add(' </table>');

// Dest.Lines.Add('</body>');;

// Dest.Lines.Add('</html>');end;

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


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

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