Перемножить элементы строк матрицы и получить из этих произведений вектор - C#
Формулировка задачи:
Привет всем жителям сего форума!
Вот писал программку для ввода матриц размерностью 5х4 (A и B), после чего происходило вычисление по некоторым формулам, а так же транспонирование суммы, в итоге матрица получилась размером 5х5. Задача состоит в том, чтобы перемножить элементы строк матрицы и получить из этих произведений вектор. Я так понял, что надо сначала преобразовать элементы в числовые значения, а после перемножить, но так и не разобрался как все это делается.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Объявляем массивы
double[,] A = new double[5, 4];
double[,] B = new double[5, 4];
double[,] C = new double[5, 5];
string s;
// Ввод матриц A
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Введите [{0}]-ю строку матрицы A", i);
s = Console.ReadLine();
string[] ts = s.Split(' ');
for (int j = 0; j < 4; j++)
A[i, j] = Convert.ToDouble(ts[j]);
}
// Ввод матрицы B
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Введите [{0}]-ю строку матрицы B", i);
s = Console.ReadLine();
string[] ts = s.Split(' ');
for (int j = 0; j < 4; j++)
A[i, j] = Convert.ToDouble(ts[j]);
}
// C=(A+B)^T*(B-A)
double [,] SAB = new double [5,4]; // сумма A и B
double [,] RBA = new double [5,4]; // разность A и B
double [,] TAB = new double [4,5]; // транспонирование суммы A и B
double [,] PTP = new double [5,5]; // C
// A + B
for (int i = 0; i < 5; i++)
for (int j = 0; j < 4; j++)
SAB[i, j] = A[i, j] + B[i, j];
// B - A
for (int i = 0; i < 5; i++)
for (int j =0; j < 4; j++)
RBA [i,j] = B[i,j] - A[i,j];
// транспонирование
for (int i = 0; i < 5; i++)
for (int j = 0; j < 4; j++)
TAB[j, i] = SAB[i, j];
// произаедение
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
PTP[i, j] = 0;
for (int k = 0; k < 4; ++k)
{
PTP[i, j] += SAB[i, k] * TAB[k, j];
}
}
}
// Вывод результатов
Console.WriteLine("");
Console.WriteLine("C=(A+B)^T*(B-A):");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
Console.Write(PTP[i, j] + " ");
Console.WriteLine();
}
// Press Any Key
Console.WriteLine("");
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
}
Какими-то неведомыми силами получилось составить алгоритм среднего гармонического, но при выводе данных мне требуется форматировать, чтоб вывод был с двумя знаками после запятой.
Пробовал таким методом: Console.WriteLine("{0:f2}", ZV);
Выводит просто 0.00
В чем косяк?
Теперишний код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Объявляем массивы
double[,] A = new double[5, 4];
double[,] B = new double[5, 4];
double[,] C = new double[5, 5];
string s;
// Ввод матриц A
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Введите [{0}]-ю строку матрицы A", i);
s = Console.ReadLine();
string[] ts = s.Split(' ');
for (int j = 0; j < 4; j++)
A[i, j] = Convert.ToDouble(ts[j]);
}
// Ввод матрицы B
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Введите [{0}]-ю строку матрицы B", i);
s = Console.ReadLine();
string[] ts = s.Split(' ');
for (int j = 0; j < 4; j++)
A[i, j] = Convert.ToDouble(ts[j]);
}
// C=(A+B)^T*(B-A)
double[,] SAB = new double[5, 4]; // сумма A и B
double[,] RBA = new double[5, 4]; // разность A и B
double[,] TAB = new double[4, 5]; // транспонирование суммы A и B
double[,] PTP = new double[5, 5]; // C
// A + B
for (int i = 0; i < 5; i++)
for (int j = 0; j < 4; j++)
SAB[i, j] = A[i, j] + B[i, j];
// B - A
for (int i = 0; i < 5; i++)
for (int j = 0; j < 4; j++)
RBA[i, j] = B[i, j] - A[i, j];
// транспонирование
for (int i = 0; i < 5; i++)
for (int j = 0; j < 4; j++)
TAB[j, i] = SAB[i, j];
// произаедение
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 5; ++j)
{
PTP[i, j] = 0;
for (int k = 0; k < 4; ++k)
{
PTP[i, j] += SAB[i, k] * TAB[k, j];
}
}
}
// Вектор
double[] v = new double[5];
for (int r = 0; r < 5; r++)
{
v[r] = 1;
for (int c = 0; c < 5; c++) v[r] *= PTP[r, c];
}
// Среднее гармоническое
double ZV = 0;
for (int i = 1; i < 5; i++)
ZV += 1 / v[i];
ZV = ZV/5;
// Вывод результатов
Console.WriteLine("");
Console.WriteLine("C=(A+B)^T*(B-A):");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
Console.Write(PTP[i, j] + " ");
}
Console.WriteLine();
}
// Вектор
Console.WriteLine("");
Console.WriteLine("Вектор:");
for (int i = 0; i < 5; i++)
Console.Write("{0} ", v[i]);
Console.WriteLine();
// Среднее гармоническое
Console.WriteLine("");
Console.WriteLine("Среднее гармоническое вектора:");
Console.WriteLine("{0:f2}", ZV);
// Press Any Key
Console.WriteLine("");
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
}Решение задачи: «Перемножить элементы строк матрицы и получить из этих произведений вектор»
textual
Листинг программы
Console.WriteLine("{0:f20}", ZV);