Найти вектор матрицы: программа неправильно считает и выдает нули - C#

Узнай цену своей работы

Формулировка задачи:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication13
{
    class Program
    {
        static void Main(string[] args)
        {//обьявление матриц
            string str;
            int[,] A = new int[4, 4];
            int[,] B = new int[4, 4];
            //заполнение с клавы
            int i, j;
            for (i = 0; i < 4; i++)
            {
                for (j = 0; j < 4; j++)
                {
                    Console.WriteLine("  A[" + i + " , " + j + "] = "); 
                    str=Console.ReadLine();
                    A[i, j] = Convert.ToInt32(str);
                        
                }
            }

            for (i = 0; i < 4; i++)
            {
                for (j = 0; j < 4; j++)
                {Console.WriteLine("  B[" + i + " , " + j + "] = "); 
                    str = Console.ReadLine();
                    B[i, j] = Convert.ToInt32(str);
                        
                }
            }
            Vector(A, B);
            Console.WriteLine(string.Join(" ", Vector(A, B)));
 
        }
        
           //функция вектора и  поиска минимального элемента
            public static int[] Vector (int[,] A, int[,] B)
        {
            int minA = A[0, 0];
            int minB = B[0, 0];
            int colA = 0;
            int colB = 0;
            for (int j = 0; j < 4; ++j)
            {
                if (minA > A[j, j]) { minA = A[j, j]; colA = j; }
                if (minB > B[j, j]) { minB = B[j, j]; colB = j; }
            }
 
            int[] resultVector = new int[4];
            for (int j = 0; j < j; ++j)
                resultVector[j] = A[colA, j] - B[colB, j];
 
            return resultVector;
        }
        
    }
}

Решение задачи: «Найти вектор матрицы: программа неправильно считает и выдает нули»

textual
Листинг программы
using System;
 
namespace Matrixes
{
    public class Matrix
    {
        public class MatrixException : SystemException
        {
            public MatrixException(string message) : base(message) { }
        }
 
        private double[,] table;
 
        public Matrix(int width, int height)
        {
            if (width < 1)
                throw new MatrixException("Invalid matrix width.");
            if (height < 1)
                throw new MatrixException("Invalid matrix height.");
            table = new double[height, width];
        }
 
        public Matrix(double[,] array)
        {
            if ((array.GetLength(0) < 1) || (array.GetLength(1) < 1))
                throw new MatrixException("Bad array input.");
            table = (double[,])array.Clone();
        }
 
        public int Width
        {
            get
            {
                return table.GetLength(1);
            }
        }
        
        public int Height
        {
            get
            {
                return table.GetLength(0);
            }
        }
 
        public override string ToString()
        {
            var result = "";
            for (int i = 0; i < Height; i++)
            {
                for (int j = 0; j < Width; j++)
                    result += "\t" + table[i, j];
                if (i < Height - 1)
                    result += "\n";
            }
            return result;
        }
 
        public double this[int i, int j]
        {
            get
            {
                if ((i < 0) || (i >= Width))
                    throw new MatrixException("Width index out of range.");
                if ((j < 0) || (j >= Height))
                    throw new MatrixException("Height index out of range.");
                return table[j, i];
            }
            private set
            {
                table[j, i] = value;
            }
        }
 
        private static Matrix Multiply(Matrix matrix, double value)
        {
            if (matrix == null)
                throw new MatrixException("Null matrix reference.");
            var result = new Matrix(matrix.Width, matrix.Height);
            for (int i = 0; i < result.Width; i++)
                for (int j = 0; j < result.Height; j++)
                    result[i, j] = matrix[i, j] * value;
            return result;
        }
 
        private static Matrix Multiply(Matrix matrix0, Matrix matrix1)
        {
            if ((matrix0 == null) || (matrix1 == null))
                throw new MatrixException("Null matrix reference.");
            if (matrix0.Width != matrix1.Height)
                throw new MatrixException("Invalid matrix sizes to multiply.");
 
            Matrix result = new Matrix(matrix1.Width, matrix0.Height);
            for (var i = 0; i < matrix0.Height; i++)
                for (var j = 0; j < matrix1.Width; j++)
                    for (var k = 0; k < matrix0.Width; k++)
                        result[j, i] += matrix0[k, i] * matrix1[j, k];
            return result;
        }
 
        private static Matrix Sum(Matrix matrix, double value)
        {
            if (matrix == null)
                throw new MatrixException("Null matrix reference.");
            var result = new Matrix(matrix.Width, matrix.Height);
            for (int i = 0; i < result.Width; i++)
                for (int j = 0; j < result.Height; j++)
                    result[i, j] = matrix[i, j] + value;
            return result;
        }
 
        private static bool IsSame(Matrix matrix0, Matrix matrix1)
        {
            if (ReferenceEquals(matrix0, matrix1))
                return true;
            if (((object)matrix0 == null) || ((object)matrix1 == null))
                return false;
            if ((matrix0.Width != matrix1.Width) || (matrix0.Height != matrix1.Height))
                return false;
 
            for (var i = 0; i < matrix0.Width; i++)
                for (var j = 0; j < matrix0.Height; j++)
                    if (matrix0[i, j] != matrix1[i, j])
                        return false;
            return true;
        }
 
        private static Matrix Pow(Matrix matrixBase, int exp)
        {
            if (matrixBase == null)
                throw new MatrixException("Null matrix reference.");
            if (matrixBase.Width != matrixBase.Height)
                throw new MatrixException("Can not pow matrix with different width and height.");
            if (exp < 1)
                throw new MatrixException("Invalid exponental value.");
            var result = new Matrix(matrixBase.table);
            for (int i = 1; i < exp; i++)
                result *= matrixBase;
            return result;
        }
 
        public Matrix Transpose()
        {
            var result = new Matrix(Height, Width);
            for (var i = 0; i < result.Width; i++)
                for (var j = 0; j < result.Height; j++)
                    result[i, j] = table[i, j];
            return result;
        }
 
        public static Matrix Identity(int size)
        {
            if (size < 1)
                throw new Exception("Invalid matrix size.");
            var result = new Matrix(size, size);
            for (int i = 0; i < size; i++)
                result[i, i] = 1;
            return result;
        }
 
        public static Matrix Random(int width, int height, double minValue, double maxValue, bool roundToInt = true)
        {
            if (width < 1)
                throw new MatrixException("Invalid matrix width.");
            if (height < 1)
                throw new MatrixException("Invalid matrix height.");
            var result = new Matrix(width, height);
            Random random = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);
            if (!roundToInt)
                for (var i = 0; i < width; i++)
                    for (var j = 0; j < height; j++)
                        result[i, j] = minValue + (maxValue - minValue) * (float)random.NextDouble();
            else
                for (var i = 0; i < width; i++)
                    for (var j = 0; j < height; j++)
                        result[i, j] = (int)(minValue + (maxValue - minValue) * (float)random.NextDouble() + .5);
            return result;
        }
 
        public static bool operator ==(Matrix left, Matrix right)
        {
            return IsSame(left, right);
        }
 
        public static bool operator !=(Matrix left, Matrix right)
        {
            return !IsSame(left, right);
        }
 
        public static Matrix operator *(Matrix left, double right)
        {
            return Multiply(left, right);
        }
 
        public static Matrix operator *(double left, Matrix right)
        {
            return Multiply(right, left);
        }
 
        public static Matrix operator *(Matrix left, Matrix right)
        {
            return Multiply(left, right);
        }
 
        public static Matrix operator +(Matrix left, double right)
        {
            return Sum(left, right);
        }
 
        public static Matrix operator +(double left, Matrix right)
        {
            return Sum(right, left);
        }
 
        public static Matrix operator ^(Matrix left, int right)
        {
            return Pow(left, right);
        }
    }
}

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


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

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

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