Доброго времени суток! Нужна помощь. Программа есть, ниже будет код. Эта программа решает все правильно, нужно лишь ее подправить и добавить кое чего. Во-первых нужно сделать так, чтобы результатом была не таблица итераций, а просто ответ - приближенное значение цены игры. И нужно чтобы еще выводилось соотношение количества каждой стратегии игрока, к количество итераций. Например: Итерации 1, 2, 3, . . . n (в зависимости от размерности, количество итераций разное) соответственно встречаются: У 1го игрока: 1/20, 15/20, 4/20 (1-это количество выбранных первых стратегий, 15-вторых и 4 третьих) можно вывести не в отношении, а просто десятичные дроби, как результаты деления 1 на 20, 15 на 20 и 4 на 20. Так же и для второго игрока. И еще, пусть и в входных данных матрица M*N желательно сделать относительно обычной квадратной матрице. Я понимаю, что может это и не просто, но буду безмерно рада, если вы поможете.Добавлено (12.05.12, 15:37) ---------------------------------------------
Code uses crt; var matr:array [1..9,1..9] of integer; win1:array[0..150,1..10] of integer; win2:array[0..150,1..10] of integer; m,n,i,j,k, min, max,it, ik,p,a,str,str1:integer; kli:real; function first_igr:integer; {Функция определения следующего} var a1,a2,max:integer; {хода для игрока 1} begin max:=win1[a,1]; first_igr:=1; if p=1 then a2:=m else a2:=n; for a1:=1 to a2 do if win1[a,a1]>max then begin max:=win1[a,a1]; first_igr:=a1; end; end; function second_igr:byte; {Функция определения следующего} var a1,a2,min:integer; {хода для игрока 2} begin min:=win2[a,1]; second_igr:=1; if p=1 then a2:=n else a2:=m; for a1:=1 to a2 do if win2[a,a1]<min then begin min:=win2[a,a1]; second_igr:=a1; end; end; begin writeln('Введите размерность матрицы M*N');readln(m,n); writeln('Ввод матрицы:'); for i:=1 to m do for j:=1 to m do read(matr[i,j]); writeln('Какой игрок начинает игру?');readln(p); writeln('Какую стратегию выбирает игрок?');readln(str); writeln('Введите количество итераций'); readln(k); Добавлено (12.05.12, 15:38) ---------------------------------------------
Code a:=1; {заглавие таблицы} writeln(' № стр. выигрыш 1-го игр. стр. выигрыш 2-го игр. V W Y'); repeat write(a:2,str:6,' '); {формирование таблицы: номер итерации, стратегия 1игр.} if p=2 then begin for i:=1 to n do begin win1[a,i]:=matr[str,i]+win1[a-1,i];{формирование матрицы выигрышей 1 игр.} write(win1[a,i]:4); end; str1:=first_igr; {определение ответной стратегии 2 игр.} gotoxy(32,wherey); write(str1:10,' '); for i:=1 to m do begin win2[a,i]:=matr[i,str1]+win2[a-1,i]; {формирование матрицы выигрышей 2 игр.} write(win2[a,i]:4); end; Добавлено (12.05.12, 15:38) ---------------------------------------------
Code gotoxy(64,wherey); write(win1[a,str1]:4); {вывод наибольшего суммарного выигрыша 1 игр.} str:=second_igr; {определение ответной стратегии 1 игр.} write(win2[a,str]:4); {вывод наибольшего суммарного выигрыша 2 игр.} write((win1[a,str1]+win2[a,str])/(a*2):6:2);{приближенное значение цены игры на шаге} end else Добавлено (12.05.12, 15:38) ---------------------------------------------
Code begin for i:=1 to m do begin win1[a,i]:=matr[i,str]+win1[a-1,i];{формирование матрицы выигрышей 1 игр.} write(win1[a,i]:4); end; str1:=first_igr; {определение ответной стратегии 2 игр.} gotoxy(32,wherey); write(str1:10,' '); for i:=1 to n do begin win2[a,i]:=matr[str1,i]+win2[a-1,i];{формирование матрицы выигрышей 2 игр.} write(win2[a,i]:4); end; gotoxy(64,wherey); write(win1[a,str1]:4); {вывод наибольшего суммарного выигрыша 1 игр.} str:=second_igr; {определение ответной стратегии 1 игр.} write(win2[a,str]:4); {вывод наибольшего суммарного выигрыша 2 игр.} write((win1[a,str1]+win2[a,str])/(a*2):6:2);{приближенное значение цены игры} kli:= ((win1[a,str1]+win2[a,str])/(a*2)); end; a:=a+1; {увеличение счетчика} writeln; until a=k+1; writeln('Приближенное значение цены игры =',kli); writeln('Где V - наибольший суммарный выигрыш первого игрока'); writeln(' W - наименьший суммарный проигрыш второго игрока'); writeln(' Y - приближенное значение игры на данной итерации'); end.
|
|
|