Мегаобучалка Главная | О нас | Обратная связь


Приложение 1 Текст программы



2020-03-19 152 Обсуждений (0)
Приложение 1 Текст программы 0.00 из 5.00 0 оценок




Medot_Gurwiwiza.dpr

 

program Medot_Gurwiza;

 {Курсовой проект по предмету "Компьютерное модулирование" по теме "Теория игр"

Принцип Гурвица Выполнил студент гр. П-00-1 Юшков Андрей 10.06.02}

uses

Forms,

osnowa in 'osnowa.pas' {form1},

Unit2 in 'Unit2.pas' {Form2};

 

{$R *.RES}

 

begin

Application.Initialize;

Application.CreateForm(Tform1, form1);

Application.CreateForm(TForm2, Form2);

Application.Run;

end.

 

unit osnowa;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, StdCtrls, ToolWin, ComCtrls, Buttons, ActnList, StdActns, Menus,

Mask, ExtCtrls, jpeg;

 

type

Tform1 = class(TForm)

tabliza: TStringGrid;

Panel1: TPanel;

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

C_S: TStringGrid;

Panel2: TPanel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

Panel3: TPanel;

Panel4: TPanel;

Label17: TLabel;

Label18: TLabel;

Panel5: TPanel;

Label19: TLabel;

Label20: TLabel;

Label21: TLabel;

Label22: TLabel;

Label23: TLabel;

RadioButton7: TRadioButton;

RadioButton8: TRadioButton;

Button3: TButton;

Panel6: TPanel;

Label1: TLabel;

BitBtn1: TBitBtn;

Label15: TLabel;

procedure WWod_koef(Sender: TObject);

procedure W_Rezultat(Sender: TObject);

procedure W_tabliza_A(Sender: TObject);

procedure W_tabliza_B(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

 end;

 

var

form1: Tform1;

     C_B,C_A:array [1..10,1..10] of integer; { платёжная матрица игрока А,В}

a_b,a_m,b_b,b_m:array[1..10] of integer; {наибольший наименьший выигрыш иг. А,В}

          al:array[1..10] of real;                  {массив альфа}

     V_A,V_B:array[1..10,1..10]of real;   {Расчётные выигрыши иг. А,В }

       max_a:real;    { Наибольший выигрыш игрока А}

       max_b:real;    { Наибольший выигрыш игрока В}

         H_a:integer; { Оптимальная стратегия игрока А}

         h_b:integer;  { Оптимальная стратегия игрока В}

           m:Integer;   { Количество стратегий игрока А}

           n:Integer;    { Количество стратегий игрока В}

           k:Integer;    { Количество статистических коэффициентов}

         I,J:Integer;

 

implementation

uses Unit2;

{$ R *. DFM }

{ вывод коэф., матрицы С_А}

procedure WW_A;

 begin

form1.c_s.Colcount:=n+1;

form1.c_s.Rowcount:=m+1;

form1.tabliza.Rowcount:=m+1;

for i :=1 to m do

begin

    form1.tabliza.Cells[0,i]:='A'+intToStr(i);

    form1.C_S.Cells[0,i]:='A'+intToStr(i);

    for j :=1 to n do

      begin

         form1.C_S.Cells[j,0]:='B'+intToStr(j);

         form1.C_S.Cells[j,i]:=intToStr(C_A[i,j]);

     end;

end;

with form1 do

begin

  label23.caption:='A';

  tabliza.cells[1,0]:='a_малая';tabliza.cells[2,0]:='a_большая';

end;

end;

 

{ Вывод наибольший, наименьший, расчётный выигрыш матрицы V _А}

procedure WW_A1;

begin

WW_A;

With form1.tabliza Do

  begin

   for j:=1 to n do

     begin

        cells[1,j]:=intToStr(a_m[j]);

        cells[2,j]:=intToStr(a_b[j]);

     end;

   for i:=1 to m do

   for j:=1 to k do

   cells[j+2,i]:=floatToStr(V_a[i,j]);

end;

end;

 

{событие на нажатие кнопки 'Ввод коэф..'}

procedure TForm1.WWod_koef(Sender: TObject);

begin

try

m:=strToint(edit1.text);

n:=strToint(edit2.text);

k:=strToint(edit3.text);

except

showMessage('Ошибочная запись числа ');

end;

try

Form2 := TForm2.Create(self);

tabliza.Colcount:=3+k;

Form2.ShowModal;

finally

Form2.Close;

WW_a;

end;

end;

 

{событие на нажатие кнопки 'вывод результата'}

procedure Tform1.W_Rezultat(Sender: TObject);

begin

Panel6.Visible:=false;

panel3.Visible:=true;

 {Вводим из таблицы C _ A в матрицу игрока А - C _ A } { C _ S [столбец,строка] }

for i :=1 to m do  {по столбцам m таблицы C_S}

for j :=1 to n do  {по строкам n таблицы C_S}

C_a[i,j]:=StrToInt(C_S.Cells[j,i]);

 {Создаём матрицу C _ B путём транспонирования матрицы игрока А}

for i :=1 to n do

for j :=1 to m do

C_b[i,j] :=StrToInt(C_S.Cells[i,j]);

{расчет наименьших и наибольших выигрышей игрока A}

 for i:=1 to m do

begin

    a_m[i]:=C_a[i,1];  {массив наименьшии выигрыш}

    a_b[i]:=C_a[i,1];   {массив наибольшии выигрыш}

    for j :=2 to n do

       begin

            if C_a[i,j]<a_m[i] then a_m[i]:=C_a[i,j];

            if C_a[i,j]>a_b[i] then a_b[i]:=C_a[i,j];

       end;

{вычисления расчетных выигрышей игрока A }

    for j :=1 to k do

       V_a[i,j]:=al[j]*a_m[i]+(1-al[j])*a_b[i];

end;

{нахождения оптимальной стратегии и максимального выигрыша игрока A }

max_a:=V_a[1,1];

H_A:=1;

for i :=1 to m do

for j :=1 to k do

if V_a[i,j]>max_A then

                  begin

                     max_a:=V_a[i,j]; { максимальный выигрыш игрока А}

                     H_a:=i              { оптимальная стратегия игрока А}

                  end;

 

{расчет наименьших и наибольших выигрышей игрока В}

 for i:=1 to n do

begin

    b_m[i]:=C_b[i,1]; {массив наименьшии выигрыш}

    b_b[i]:=C_b[i,1]; {массив наибольшии выигрыш}

    for j:=2 to m do

       begin

            if C_b[i,j]<b_m[i] then b_m[i]:=C_b[i,j];

            if C_b[i,j]>b_b[i] then b_b[i]:=C_b[i,j];

       end;

{вычисления расчетных выигрышей игрока В}

    for j:=1 to k do

       V_b[i,j]:=al[j]*b_m[i]+(1-al[j])*b_b[i];

end;

{нахождения оптимальной стратегии и максимального выигрыша игрока В}

 max_b:=V_b[1,1];

 H_b:=1;

 for i:=1 to n do

for j:=1 to k do

if V_b[i,j]>max_b then

                begin

                     max_b:=V_b[i,j]; { максимальный выигрыш игрока B}

                     H_b:=i             { оптимальная стратегия игрока B }

                 end;

 

{ нахождения наибольшего расчетного выигрыша одного из игроков }

 if max_a=max_b then Panel6.Visible:=true

           else

                if max_a>max_b then

                                begin

                                    Panel4.Visible:=true;

                                    panel5.Visible:=false

                                end

                            else

                               begin

                                  panel5.Visible:=true;

                                  Panel4.Visible:=false

                            end;

label11.Caption:=FloatToStr(max_a);

label12.Caption:=FloatToStr(H_a);

label14.Caption:=FloatToStr(max_b);

label13.Caption:=FloatToStr(H_b);

WW_A1;

end;

 

{просмотр для игрока А}

procedure Tform1.W_tabliza_A(Sender: TObject);

begin

WW_A1;

end;

 

{просмотр для игрока B }

procedure Tform1.W_tabliza_B(Sender: TObject);

begin

with form1 do

Begin

c_s.Colcount:=m+1;

c_s.Rowcount:=n+1;

tabliza.Rowcount:=n+1;

for i:=1 to n do

begin

    form1.tabliza.Cells[0,i]:='B'+intToStr(i);

    form1.C_S.Cells[0,i]:='B'+intToStr(i);

 

for j:=1 to m do

begin

  form1.C_S.Cells[j,0]:='A'+intToStr(j);

  form1.C_S.Cells[j,i]:=intToStr(C_B[i,j]);

end;

end;

label23.caption:='B';

tabliza.cells[1,0]:='b_малая';tabliza.cells[2,0]:='b_большая';

 for j:=1 to n do

begin

tabliza.cells[1,j]:=intToStr(b_m[j]);

tabliza.cells[2,j]:=intToStr(b_b[j]);

end;

 for i:=1 to n do

 for j:=1 to k do

tabliza.cells[j+2,i]:=floatToStr(V_b[i,j]);

end;

end;

end.

 

unit Unit2;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, StdCtrls, ExtCtrls, Buttons, Menus;

 

type

TForm2 = class(TForm)

alpfa: TStringGrid;

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure FormShow(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form2: TForm2;

i,j:integer;

implementation

 

uses osnowa;

 

{$R *.DFM}

{ Ввод козффициентов оптимизмов}

procedure TForm2.FormShow(Sender: TObject);

begin

j:=0;

form1.tabliza.Visible:=true;

alpfa.Colcount:=strToInt(form1.edit3.text);

for i:=0 to alpfa.Colcount do

   begin

        j:=j+1;

        alpfa.Cells[i,0]:='Alpha'+intToStr(i+1);

        alpfa.Cells[i,1]:=FloatToStr(al[j]);

   end;

end;

 

procedure TForm2.BitBtn2Click(Sender: TObject);

begin

j:=0;

for i:=0 to alpfa.Colcount do

begin

   j:=j+1;

   try

     al[j]:=strToFloat(trim(alpfa.Cells[i,1]));

     form1.tabliza.Cells[3+i,0]:=alpfa.Cells[i,1];

   except

     showMessage('Ошибочная запись числа : '+alpfa.Cells[i,1]);

end; end;

 

end;

end.

 

Приложение 2 Результат работы программы



2020-03-19 152 Обсуждений (0)
Приложение 1 Текст программы 0.00 из 5.00 0 оценок









Обсуждение в статье: Приложение 1 Текст программы

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (152)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)