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