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