Не удается неявно преобразовать тип "Матрица.Matrix" в "Матрица.Vector" - C#
Формулировка задачи:
Не удается неявно преобразовать тип "Матрица.Matrix" в "Матрица.Vector".
Не знаю в чем ошибка, подскажите, пожалуйста.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Матрица { static class Program { public static void Main() { double[] c = { 1, 4, 3, 6, 3, 7, 5, 9, 3, 7, 4, 0, 3, 6, 5 }; Matrix array = new Matrix(4, 2, c); Console.WriteLine(array); double[] x = { 9, 5, 3, 1, 5, 3, 5, 4, 2, 3, 4, 6, 4, 7, 3, 5, 4, 6 }; Matrix array1 = new Matrix(3, 3, x); Console.WriteLine(array1); array = array1; Console.WriteLine(array); Matrix array2 = new Matrix(array1); array2[8] = 2; array2[0, 0] = 4; Matrix array3 = new Matrix(); Console.WriteLine(array3); Vector v = new Vector(); Console.WriteLine(v); Vector v1 = new Vector(5, x); Console.WriteLine(v1); Vector v2 = new Vector(v1); v2 += v1; Console.WriteLine(v2); array3 = array2 + array1; array3 = array2 - array1; array3 *= 4; array3 = array2 * array1; Console.WriteLine(v1 + v2); Console.WriteLine(v1 - v2); double q=(v1 * v2); Console.WriteLine(q); } } public class Matrix { int ID; protected double[] array; protected int n, m; static int a = 0; public Matrix() { n = m = 0; array = null; a++; ID = a; Console.WriteLine("Конструктор {0}", ID); } public Matrix(Matrix a) : this(a.n,a.m,a.array) { } public Matrix(int x, int y, double[] b) { n = x; m = y; if (x * y <= 0) throw new ArgumentException("Длинна динамического массива должна быть больше нуля.", "value"); array = new double[x * y]; for (int i = 0; i < x * y; i++) array[i] = b[i]; a++; ID = a; Console.WriteLine("Конструктор {0}", ID); } ~Matrix() { Console.WriteLine("Деструктор {0}", ID); } public Matrix(double[,] b) { n = b.GetLength(0); m = b.GetLength(1); for (int i = 0; i < n; i++ ) for (int j = 0; j < n; j++) array[i+j] = b[i,j]; ID = ++a; Console.WriteLine("Конструктор {0}", ID); } public int N { get { return n; } } public int M { get { return m; } } public double[] Array { get { return array; } } protected void ChI(int x) { if (x < 0 || x >= array.Length) throw new ArgumentException("Указан индекс вне границ динамического массива.", "index"); } protected void ChI(int x, int y) { if (y < 0 || y >= m || x < 0 || x >= n) throw new ArgumentException("Указан индекс вне границ динамического массива.", "index"); } public double this[int x, int y] { get { ChI(x, y); return array[x * m + y]; } set { ChI(x, y); array[x * m + y] = value; } } public double this[int x] { get { ChI(x); return array[x]; } set { ChI(x); array[x] = value; } } public static bool ChM(Matrix a, Matrix b) { return ((a.n == b.m) && (a.m == b.n)); } public static bool ChS(Matrix a, Matrix b) { return ((a.n == b.n) && (a.m == b.m)); } public static Matrix operator +(Matrix a, Matrix b) { if (ChS(a, b)) { for (int i = 0; i < a.n * a.m; i++) a.array[i] = a.array[i] + b.array[i]; } else throw new ArgumentException("Матрицы не подходящего формата"); return new Matrix(a); } public static Matrix operator -(Matrix a, Matrix b) { if (ChS(a, b)) { for (int i = 0; i < a.n * a.m; i++) a.array[i] = a.array[i] - b.array[i]; } else throw new ArgumentException("Матрицы не подходящего формата"); return new Matrix(a); } public static Matrix operator *(Matrix a, Matrix b) { if (ChM(a, b)) { Matrix x3 = new Matrix(a); for (int i = 0; i < a.m; i++) { for (int j = 0; j < a.n; j++) { double s = 0; for (int k = 0; k < x3.n; k++) { s = a[i, k] * b[k, j]; x3[i, j] += s; } } } return new Matrix(x3); } else throw new ArgumentException("Матрицы не подходящего формата"); } public static Matrix operator *(Matrix a, double k) { for (int i = 0; i < a.n * a.m; i++) a.array[i] = a.array[i] * k; return new Matrix(a); } public static Matrix operator *(double k, Matrix a) { for (int i = 0; i < a.n * a.m; i++) a.array[i] = a.array[i] * k; return new Matrix(a); } public override string ToString() { if (n > 0) { string z = string.Empty; int g = 0; for (int i = 0; i < array.Length; i++) { z += array[i] + " "; g++; if (g == m) { z += "\n"; g = 0; } } return z; } else { return String.Format("Матрица {0} имеет не верный формат\n", ID); } } } public class Vector : Matrix { public Vector() : base() { } public Vector(int z, double[] f) : base(1, z, f) { } public Vector(Vector b) : base(b.n, b.m, b.array) { } public Vector(Matrix b) { if (b.M > 1) throw new ArgumentException("Матрица не подходящего формата"); this.m = 1; this.n = b.N; this.array = b.Array; } //public static implicit operator Matrix(Vector c) //{ // return new Matrix(c); //} //public static Matrix operator +(Vector a, Vector b) //{ // if (ChS(a, b)) // { // for (int i = 0; i < a.M; i++) a.Array[i] = a.Array[i] + b.Array[i]; // } // else throw new ArgumentException("Вектора не подходящего формата"); // return new Matrix(a); //} //public static Matrix operator -(Vector a, Vector b) //{ // if (ChS(a, b)) // { // for (int i = 0; i < a.M; i++) a.Array[i] = a.Array[i] - b.Array[i]; // } // else throw new ArgumentException("Вектора не подходящего формата"); // return new Matrix(a); //} public static double operator *( Vector a, Vector b) { double q=0; if( ChS(a,b) ) { for (int j=0; j<a.n; j++) { q += a.array[j] * b.array[j]; } } else throw new ArgumentException("Вектора различной длинны"); return q; } } }
Решение задачи: «Не удается неявно преобразовать тип "Матрица.Matrix" в "Матрица.Vector"»
textual
Листинг программы
Vector v2 = new Vector(v1); v2 += v1;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д