unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label6: TLabel;
    Edit6: TEdit;
    Button1: TButton;
    Edit7: TEdit;
    Label7: TLabel;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  matr: array [1..7,1..7] of real;//динамический массив для матрицы переходов
  Razm: integer;//размерность матрицы
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer; //строка, столбец
  Nk:integer; //Количество экспериментов
  N:integer;  // Текущая цель (игрушка)
  K:integer;  //количество попыток
  R:real;     //случайное число
label T;      //метка безусловного перехода
begin
randomize;
  //устанавливаем размерность матрицы
razm:=strtoint(edit7.Text);
StringGrid1.Colcount:=razm;
StringGrid1.Rowcount:=razm;

  //задаем начальые значения
Nk:=StrToInt(Edit1.Text);
N:=1;
K:=0;
 //заполняем матрицу
  for i:=0 to Razm-1 do
begin
  for j:=0 to Razm-1 do
      begin
        matr[i,j]:=strtofloat(StringGrid1.Cells[j,i]);
      end;
end;

 //запускаем цикл моделирования
while N <= Nk do
for N:=1 to Nk do begin
 i:=0;
 T://сюда переходим
 j:=0;
 R:=Random;
 K:=K+1;
 while R > matr[i,j] do begin
 R:=R-matr[i,j];
 j:= j + 1;
 end;
 i:= j;
 if i = Razm-1 then
else
 begin
 goto T;//отсюда переходим
 end;
 end;
 Edit6.Text:= FloatToStr(K/Nk);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
razm:=strtoint(edit7.Text);
StringGrid1.Colcount:=razm;
StringGrid1.Rowcount:=razm;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 StringGrid1.Cells[0,0]:='0,5';
 StringGrid1.Cells[0,1]:='0,5';
 StringGrid1.Cells[0,2]:='1';
 StringGrid1.Cells[0,3]:='1';
 StringGrid1.Cells[1,0]:='0,2';
 StringGrid1.Cells[1,1]:='0';
 StringGrid1.Cells[1,2]:='0';
 StringGrid1.Cells[1,3]:='0';
 StringGrid1.Cells[2,0]:='0,3';
 StringGrid1.Cells[2,1]:='0,3';
 StringGrid1.Cells[2,2]:='0';
 StringGrid1.Cells[2,3]:='0';
 StringGrid1.Cells[3,0]:='0';
 StringGrid1.Cells[3,1]:='0,2';
 StringGrid1.Cells[3,2]:='0';
 StringGrid1.Cells[3,3]:='0';
end;

end.
