Неправильно работает инкремент и декремент для моего типа данных, которые я перегрузил - 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();

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


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

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

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