Приложение 1 Текст программы
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 Результат работы программы
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (179)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |