Неправильно работает инкремент и декремент для моего типа данных, которые я перегрузил - C#
Формулировка задачи:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Matr { private double[,] A; private int size; private Matr(int size) { this.size = size; this.A = new double[size, size]; } private Matr() { size = 2; A = new double[size, size]; } private Matr(Matr a) { size = a.size; A = a.A; } private void read() { Console.WriteLine("Введите "+Math.Pow(size,2)+" элемента(ов)"); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { A[i,j]=Convert.ToDouble(Console.ReadLine()); } } } public void Transp() { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { double b = A[i, j]; A[i, j] = A[j, i]; A[j, i] = b; } } } private void Write() { for (int i = 0; i < size; i++) { Console.WriteLine(); for (int j = 0; j < size; j++) { Console.Write("{0,8}",A[i, j]); } } Console.ReadLine(); } public static Matr operator +(Matr m1, double t) { for (int i = 0; i < m1.size; i++) { for (int j = 0; j < m1.size; j++) { m1.A[i, j] += t; } } return (m1); } public static Matr operator -(Matr m1, double t) { for (int i = 0; i < m1.size; i++) { for (int j = 0; j < m1.size; j++) { m1.A[i, j] -= t; } } return m1; } public static Matr operator *(Matr m1, Matr m2) { if (m1.size != m2.size) { throw new System.ArgumentException("Не совпадают размерности матриц"); } Matr m3 = new Matr(m1.size); for (int i = 0; i < m1.size; i++) { for (int j = 0; j < m1.size; j++) { for (int u = 0; u < m1.size; u++) { m3.A[i, j] += m1.A[i, u] * m2.A[u, j]; } } } return m3; } public static Matr operator *(Matr m1, double t) { Matr m2 = new Matr(m1.size); Matr m3 = new Matr(m1.size); for (int i = 0; i < m2.size; i++) { for (int j = 0; j < m2.size; j++) { m2.A[i, j] = t; } } return m1 = m1 * m2; } public static Matr operator /(Matr m1, double t) { Matr m2 = new Matr(); for (int i = 0; i < m1.size; i++) { for (int j = 0; j < m1.size; j++) { m2.A[i, j] =t; } } m1 = m1/ m2; return m1; } public static Matr operator +(Matr m1, Matr m2) { for (int i = 0; i < m1.size; i++) { for (int j = 0; j < m1.size; j++) { m1.A[i, j] += m2.A[i, j]; } } return (m1); } public static Matr operator -(Matr m1, Matr m2) { for (int i = 0; i < m1.size; i++) { for (int j = 0; j < m1.size; j++) { m1.A[i, j] -= m2.A[i, j]; } } return m1; } public static Matr operator /(Matr m1, Matr m2) { if (m1.size != m2.size) { throw new System.ArgumentException("Не совпадают размерности матриц"); } Matr m3 = new Matr(m1.size); m1.Transp(); m3 = m1 * m2; return m3; } public static Matr operator ++(Matr m1) { return m1+1; } public static Matr operator --(Matr m1) { return m1-1; } static void Main(string[] args) { Console.WriteLine("Введите размер матрицы:"); int b = Convert.ToInt32(Console.ReadLine()); Matr m1= new Matr(b); Matr m = new Matr(b); m1.read(); Console.WriteLine("Операция сложения: введите число"); double k = Convert.ToInt32(Console.ReadLine()); m = m1+k; m.Write(); Console.WriteLine("Операция сложения: введите матрицу"); Matr m2 = new Matr(b); m2.read(); m = m + m2; m.Write(); Console.WriteLine("Операция вычитания: введите число"); k = Convert.ToDouble(Console.ReadLine()); m = m - k; m.Write(); Console.WriteLine("Операция вычитания: введите матрицу"); m2.read(); m = m - m2; m.Write(); Console.WriteLine("Операция умножения: введите число"); k = Convert.ToDouble(Console.ReadLine()); m = m * k; m.Write(); Console.WriteLine("Операция умножения: введите размер матрицы"); b = Convert.ToInt32(Console.ReadLine()); m2 = new Matr(b); m2.read(); m = m * m2; m.Write(); Console.WriteLine("Операция деления: введите число"); k = Convert.ToInt32(Console.ReadLine()); m = m / k; m.Write(); Console.WriteLine("Операция деления: введите размер матрицы"); b = Convert.ToInt32(Console.ReadLine()); m2 = new Matr(b); m2.read(); m = m / m2; m.Write(); Console.WriteLine("Операция m++:введите размер матрицы"); b = Convert.ToInt32(Console.ReadLine()); m = new Matr(b); m.read(); Console.WriteLine("Дана"); m.Write(); m1 = (m++); Console.WriteLine("Ответ"); m1.Write(); Console.WriteLine("Операция ++m:введите размер матрицы"); b = Convert.ToInt32(Console.ReadLine()); m = new Matr(b); m.read(); Console.WriteLine("Дана"); m.Write(); m1 =++m; Console.WriteLine("Ответ"); m1.Write(); Console.WriteLine("Операция --m:введите размер матрицы"); b = Convert.ToInt32(Console.ReadLine()); m = new Matr(b); m.read(); m1 = m--; m1.Write(); Console.WriteLine("Операция m--:введите размер матрицы"); b = Convert.ToInt32(Console.ReadLine()); m = new Matr(b); m.read(); m1 = --m; m1.Write(); } } }
Решение задачи: «Неправильно работает инкремент и декремент для моего типа данных, которые я перегрузил»
textual
Листинг программы
Matrix m1=new Matrix();//создаем новый объект m1=m++;//увиличиваем данную матрицу постфиксной формой и записываем в m1 m1.write();//выводим m1 m1=++m//увеличиваем m матрицу префиксной формой и записываем в m1 m1.write();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д