Перемножить элементы строк матрицы и получить из этих произведений вектор - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д