Перевести код из Pascal в C, C++ или С#: program PrResh; ///////////////Подключение графического модуля/////////////// var n, m, r: Integer; A: array [1..100, 1..100] of Real; o: char; w: text; ///////////////Процедура ввод...
Перевести код из Pascal в C, C++ или С#:
program PrResh;
///////////////Подключение графического модуля///////////////
var
n, m, r: Integer;
A: array [1..100, 1..100] of Real;
o: char;
w: text;
///////////////Процедура ввода значений///////////////
procedure Vvod(n, m: integer);
var
i, j: integer;
begin
assign (w, 'PrResh.txt');
rewrite (w);
for i := 1 to n do
begin
for j := 1 to m do
begin
Write('A[', i, ',', j, ']=');
Read(A[i, j]);
end;
end;
writeln('Матрица:');
writeln(w, 'Матрица:');
for i := 1 to n do
begin
for j := 1 to m do
begin
write(A[i, j], ' ');
write(w, A[i, j], ' ');
end;
writeln;
writeln(w);
end;
writeln(w);
close(w);
end;
///////////////Критерий Сэвиджа///////////////
procedure Sevi(n, m: integer);
var
B: array [1..100] of real;
Q: array [1..100, 1..100] of real;
i, j: integer;
c: real;
begin
assign (w, 'PrResh.txt');
append(w);
writeln(w, 'Критерий Сэвиджа.');
writeln(w, 'Наибольшее значение каждого столбца.');
for j := 1 to n do
begin
c := A[1, j];
for i := 1 to m do
begin
if A[i, j] > c then
c := A[i, j];
end;
B[j] := c;
writeln(w, 'Значение ', j, ' столбца = ', B[j]);
end;
writeln(w, 'Вычтем из наибольшего значения столбца, каждое значение столбца.');
writeln(w, 'Сформируем новую матрицу из полученных значений.');
for i := 1 to m do
begin
for j := 1 to n do
begin
Q[i, j] := B[j] - A[i, j];
write(w, Q[i,j], ' ');
end;
writeln(w);
end;
writeln(w, 'Наибольшее значение каждой строки.');
for i := 1 to n do
begin
c := Q[i, 1];
for j := 1 to m do
begin
if Q[i, j] > c then
c := Q[i, j];
end;
B[i] := c;
writeln(w, 'Значение ', i, ' строки = ', B[i]);
end;
for i := 1 to n do
begin
Writeln('B[', i, ']=', B[i]);
end;
c := B[1];
for i := 1 to n do
begin
if B[i] < c then
c := B[i];
end;
writeln('Ответ:');
writeln(w, 'Ответ:');
for i := 1 to n do
begin
if B[i] = c then
begin
writeln('B[', i, ']=', B[i]);
writeln(w, 'E', i,'=', B[i]);
end;
end;
close(w);
end;
///////////////Критерий Гермейера///////////////
procedure Ger(n, m: integer);
var
i, j : integer;
u:real;
V1, V2: array [1..100, 1..100] of real;
q, B: array [1..100] of real;
c: real;
begin
assign (w, 'PrResh.txt');
append(w);
writeln(w, 'Критерий Гермейера.');
Writeln('Для решения необходимы сведенья о вероятности принятия каждого решения.');
Writeln(w, 'Вероятности принятия решения:');
Readln (u);
for j := 1 to m do
begin
q[j]:=u;
//Write('q', j, '=');
//Readln(q[j]);
Write(w, 'q', j, ' = ', q[j], ' ');
end;
writeln(w);
c := A[1, 1];
for i := 1 to n do
begin
for j := 1 to m do
begin
if A[i, j] > c then
c := A[i, j];
end;
end;
writeln(w, 'Наибольшее значение в матрице = ', c);
c := c + 1;
writeln(w, 'Необходимо из каждого элемента матрицы вычесть ', c);
writeln(w, 'Полученная матрица:');
for i := 1 to n do
begin
for j := 1 to m do
begin
V1[i, j] := A[i, j] - c;
write(w, V1[i,j], ' ');
V2[i, j] := V1[i, j] * q[j];
end;
writeln(w);
end;
writeln(w, 'Умножаем каждый элемент матрицы на соответствующую вероятность.');
writeln(w, 'Выбираем наименьший результат каждой строки.');
for i := 1 to n do
begin
c := V2[i, 1];
for j := 1 to m do
begin
if V2[i, j] < c then
c := V2[i, j];
end;
B[i] := c;
writeln(w, 'Значение ', i, ' строки = ', B[i]);
end;
for i := 1 to n do
begin
Writeln('B[', i, ']=', B[i]);
end;
c := B[1];
for i := 1 to n do
begin
if B[i] > c then
c := B[i];
end;
writeln('Ответ:');
writeln(w, 'Ответ:');
for i := 1 to n do
begin
if B[i] = c then
begin
writeln('B[', i, ']=', B[i]);
writeln(w, 'E', i,'=', B[i]);
end;
end;
close(w);
end;
///////////////Начальный ввод в прогамму///////////////
begin
assign (w, 'PrResh.txt');
rewrite (w);
write(w, 'Матрица:');
close(w);
Write('Введите количество строк матрицы ');
Readln(n);
Write('Введите количество столбцов матрицы ');
Readln(m);
Vvod(n, m);
o := 'y';
while o <> 'n' do
begin
if o = 'y' then
begin
writeln('');
writeln('Методы выбора:');
writeln('1. Критерий Сэвиджа;');
writeln('2. Критерий Гермейера;');
Write('Введите номер метода: ');
Readln(r);
case r of
1: Sevi(n, m);
2: Ger(n, m);
3: o := 'n';
end;
end;
if o = 'y' then
begin
Writeln('Решить пример другим методом?');
Writeln('Да - y! Нет - n!');
Read(o);
end;
//clrscr;
end;
end.
Ответ(ы) на вопрос:
Гость
using System;
using System.Linq;
using System.Text;
namespace Test1
{
class Program
{
static string file_name = "PrResh.txt";
static bool handfree = true; //определяет вручную ли вводятся данные или рандомом
static void Main()
{
Console.WriteLine("Введите размеры матрицы (строки x столбцы)");
int rows = Convert.ToInt32(Console.ReadLine());
int columns = Convert.ToInt32(Console.ReadLine());
var M = InitMatrix(rows, columns, handfree);
int Reply;
do
{
Console.WriteLine();
Console.WriteLine("Выбирите метод решения:");
Console.WriteLine("1. Критерий Сэвиджа");
Console.WriteLine("2. Критерий Гермейера");
Console.WriteLine("3. Выход");
Reply = Convert.ToInt32(Console.ReadLine());
switch (Reply)
{
case 1:
{
SavageCriterion(M);
break;
}
case 2:
{
var Q = new double[M.GetLength(1)];
if (handfree)
{
var r = new Random(DateTime.Now.Millisecond);
for (var j = 0; j < Q.Length; j++)
{
Q[j] = r.NextDouble();
}
}
else {
Console.WriteLine("Введите вероятности");
for (var j = 0; j < Q.Length; j++)
{
Q[j] = Convert.ToDouble(Console.Read());
}
}
GermeierCriterion(M, Q);
break;
}
default:
{
Reply = -1;
break;
}
}
} while (Reply > 0);
Console.ReadKey();
}
static double[,] InitMatrix(int rows, int columns, bool handfree = false)
{
var M = new double[rows, columns];
var sb = new StringBuilder();
sb.AppendLine("Матрица [" + rows + "x" + columns + "] :");
if (handfree)
{
var random = new Random(DateTime.Now.Millisecond);
for (var i = 0; i < rows; i++)
{
for (var j = 0; j < columns; j++)
{
M[i, j] = random.NextDouble() * random.Next(-50, 50);
sb.Append(M[i, j] + " ");
}
sb.AppendLine();
}
}
else {
for (var i = 0; i < rows; i++)
{
for (var j = 0; j < columns; j++)
{
Console.Write("M[" + i + ", " + j + "] = ");
M[i, j] = Convert.ToDouble(Console.Read());
sb.Append(M[i, j] + " ");
}
Console.WriteLine();
sb.AppendLine();
}
}
OutputToConsoleAndLog(sb.ToString());
return M;
}
static double SavageCriterion(double[,] M)
{
OutputToConsoleAndLog("Критерий Сэвиджа.");
OutputToConsoleAndLog("Наибольшее значение каждого столбца.");
var max = new double[M.GetLength(1)];
for (var j = 0; j < max.Length; j++)
{
max[j] = M[0, j];
for (var i = 1; i < M.GetLength(0); i++)
{
if (max[j] < M[i, j])
max[j] = M[i, j];
}
OutputToConsoleAndLog("Max[" + j + " столбца] = " + max[j]);
}
OutputToConsoleAndLog("Вычтем из наибольшего значения столбца, каждое значение столбца.");
OutputToConsoleAndLog("Сформируем новую матрицу из полученных значений.");
var sb = new StringBuilder();
for (var i = 0; i < M.GetLength(0); i++)
{
for (var j = 0; j < M.GetLength(1); j++)
{
M[i, j] = max[j] - M[i, j];
sb.Append(M[i, j] + " ");
}
sb.AppendLine();
}
OutputToConsoleAndLog(sb.ToString());
OutputToConsoleAndLog("Наибольшее значение каждой строки.");
max = new double[M.GetLength(0)];
for (var i = 0; i < M.GetLength(0); i++)
{
max[i] = M[i, 0];
for (var j = 0; j < M.GetLength(1); j++)
{
if (max[i] < M[i, j])
max[i] = M[i, j];
}
OutputToConsoleAndLog("Max[" + i + " строки] = " + max[i]);
}
OutputToConsoleAndLog("Ответ: " + max.Last());
return max.Last();
}
static double GermeierCriterion(double[,] M, double[] Q)
{
OutputToConsoleAndLog("Критерий Гермейера.");
OutputToConsoleAndLog("Для решения необходимы сведенья о вероятности принятия каждого решения.");
OutputToConsoleAndLog("Вероятности принятия решения:");
for (var j = 0; j < Q.Length; j++)
{
OutputToConsoleAndLog("Q[" + j + "] = " + Q[j]);
}
var max = M[0, 0];
for (var i = 0; i < M.GetLength(0); i++)
{
for (var j = 0; j < M.GetLength(1); j++)
{
if (max < M[i, j]) max = M[i, j];
}
}
OutputToConsoleAndLog("Наибольшее значение в матрице = " + max);
max += 1;
OutputToConsoleAndLog("Необходимо из каждого элемента матрицы вычесть " + max);
OutputToConsoleAndLog("Полученная матрица:");
var sb = new StringBuilder();
for (var i = 0; i < M.GetLength(0); i++)
{
for (var j = 0; j < M.GetLength(1); j++)
{
M[i, j] -= max;
sb.Append(M[i, j] + " ");
M[i, j] *= Q[j];
}
sb.AppendLine();
}
OutputToConsoleAndLog(sb.ToString());
OutputToConsoleAndLog("Умножаем каждый элемент матрицы на соответствующую вероятность.");
OutputToConsoleAndLog("Выбираем наименьший результат каждой строки.");
var min = new double[M.GetLength(0)];
for (var i = 0; i < M.GetLength(0); i++)
{
M[i, 0] *= Q[0];
min[i] = M[i, 0];
for (var j = 1; j < M.GetLength(1); j++)
{
M[i, j] *= Q[j];
if (min[i] > M[i, j]) min[i] = M[i, j];
}
OutputToConsoleAndLog("Min[" + i + " строки] = " + min[i]);
}
OutputToConsoleAndLog("Ответ: " + min.Max());
return min.Max();
}
static void OutputToConsoleAndLog(string text)
{
Console.WriteLine(text);
using (var file = new System.IO.StreamWriter(file_name, true))
{
file.WriteLine(text);
}
}
}
}
Не нашли ответ?
Похожие вопросы