Перемножить элементы строк матрицы и получить из этих произведений вектор - 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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы