Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace MatrixShmatrix
- {
- public class Matrix
- {
- int n; //размеры матрицы
- int m;
- double[] a; // декларация указателей
- double[] c;
- public Matrix(int n, int m, int kod1)
- {
- int i;
- int j;
- Matrix.n =n;
- Matrix.m =m;
- a =new double[n]; // захват памяти под указатели
- for(i =0;i<n;i++)
- a[i] =new double[m]; // захват памяти под элемент
- c =new double[n];
- for(int i =0; i<n; i++)
- c[i] =new double[m];
- // Заполнение массива элементами с клавиатуры
- if(kod1 ==0)
- {
- Console.WriteLine("\nВведите элементы матрицы:");
- for(i =0;i<n;i++)
- for(j =0;j<m;j++)
- {
- Console.Write("a[");
- Console.Write(i);
- Console.Write("][");
- Console.Write(j);
- Console.Write("]=");
- a[i][j] = SimulateCin.ReadToWhiteSpace(true);
- }
- Console.Write("\n");
- }
- }
- public void Dispose()
- {
- for(int i =0;i<n;i++)
- a[i] = null; // освобождение памяти
- a = null;
- }
- //*
- // * @brief Сложение матриц
- //
- public static Matrix operator +(Matrix ImpliedObject, ref Matrix A)
- {
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- c[i][j] =a[i][j]+A.a[i][j];
- return this;
- }
- //*
- // * @brief Вычитание матриц
- //
- public static Matrix operator -(Matrix ImpliedObject, ref Matrix A)
- {
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- c[i][j] =a[i][j]-A.a[i][j];
- return this;
- }
- //*
- // * @brief Операция присваивания
- //
- //C++ TO C# CONVERTER NOTE: This 'CopyFrom' method was converted from the original C++ copy assignment operator:
- //ORIGINAL LINE: Matrix &operator =(const Matrix &A)
- public Matrix CopyFrom(Matrix A)
- {
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- a[i][j] =A.c[i][j];
- return this;
- }
- //*
- // * @brief Умножение матриц
- //
- public static Matrix operator *(Matrix ImpliedObject,ref Matrix A)
- {
- double s =0;
- for(int i =0;i<n;i++)
- {
- int z =0;
- while(z<A.m)
- {
- c[i][z] =0;
- for(int j =0;j<m;j++)
- {
- s =GetI(i, j)*A.GetI(j, z);
- c[i][z]+=s;
- }
- z++;
- }
- }
- return this;
- }
- //*
- // * @brief комбинированая операция "+="
- //
- //C++ TO C# CONVERTER TODO TASK: The += operator cannot be overloaded in C#:
- public static Matrix operator +( Matrix A)
- {
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- a[i][j] =a[i][j]+A.a[i][j];
- return this;
- }
- //*
- // * @brief комбинированая операция "-="
- //
- //C++ TO C# CONVERTER TODO TASK: The -= operator cannot be overloaded in C#:
- public static Matrix operator -( Matrix A)
- {
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- a[i][j] =a[i][j]-A.a[i][j];
- return this;
- }
- //*
- // * @brief Сравнение матриц
- //
- public static Matrix operator ==(Matrix ImpliedObject, ref Matrix A)
- {
- int f =0;
- for(int i =0; i<n; i++)
- {
- for(int j =0; j<m; j++)
- if(a[i][j]!=A.a[i][j])
- {
- Console.Write("\nМатрицы не равны!!!\n");
- f =1;
- break;
- }
- if(f ==1)
- break;
- }
- if(f ==0)
- {
- Console.Write("\nМатрицы равны!\n");
- }
- return this;
- }
- public static Matrix operator !=(Matrix ImpliedObject,ref Matrix A)
- {
- int f = 0;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- if (a[i][j] != A.a[i][j])
- {
- Console.Write("\nМатрицы равны!!!\n");
- f = 1;
- break;
- }
- if (f == 1)
- break;
- }
- if (f == 0)
- {
- Console.Write("\nМатрицы не равны!\n");
- }
- return this;
- }
- //*
- // * @brief Транспонирование матрицы
- //
- public void Transp()
- {
- c =new double[m];
- for(int i =0;i<m;i++)
- c[i] =new double[n]; // захват памяти под элемент
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- c[j][i] =a[i][j];
- for(int i =0;i<n;i++)
- a[i] = null; // освобождение памяти
- a = null;
- a =new double[m];
- for(int i =0;i<m;i++)
- a[i] =new double[n]; // захват памяти под элемент
- for(int i =0; i<m; i++)
- for(int j =0; j<n; j++)
- a[i][j] =c[i][j];
- Matrix.n =m;
- Matrix.m =n;
- }
- //*
- // * @brief Вывод матрицы
- //
- public void Print(int n, int m)
- {
- for(int i =0; i<n; i++)
- {
- for(int j =0; j<m; j++)
- Console.Write("{0,8:f2} ",GetI(i, j));
- Console.Write("\n");
- }
- }
- //*
- // * @brief Возведение в степень матрицы
- //
- public void Spep(int v)
- {
- int k =1;
- do
- {
- double s =0;
- for(int i =0;i<n;i++)
- {
- int z =0;
- while(z<m)
- {
- c[i][z] =0;
- for(int j =0;j<m;j++)
- {
- s =a[i][j]*a[j][z];
- c[i][z]+=s;
- }
- z++;
- }
- }
- k++;
- }
- while(k!=v);
- for(int i =0; i<m; i++)
- for(int j =0; j<n; j++)
- a[i][j] =c[i][j];
- }
- //*
- // * @brief Проверки
- //
- public void Proverka()
- {
- int h =0;
- for(int i =0; i<n; i++)
- {
- for(int j =0; j<m; j++)
- if(a[i][j]!=0)
- {
- if(i!=j)
- {
- Console.Write("Матрица №1 не диалогальная");
- h =1;
- break;
- }
- }
- if(h ==1)
- break;
- }
- if(h ==0)
- {
- Console.Write("Матрица №1 диалогальная");
- Console.Write("\n");
- }
- h =0;
- for(int i =0; i<n; i++)
- {
- for(int j =0; j<m; j++)
- if(a[i][j]!=0)
- {
- Console.Write("М\nатрица №1 не нулевая");
- Console.Write("\n");
- h =2;
- break;
- }
- if(h ==2)
- break;
- }
- if(h ==0)
- {
- Console.Write("\nМатрица №1 нулевая");
- Console.Write("\n");
- }
- h =0;
- for(int i =0; i<n; i++)
- {
- for(int j =0; j<m; j++)
- if(a[i][j]!=1)
- {
- Console.Write("Матрица №1 не единичная");
- Console.Write("\n");
- h =2;
- break;
- }
- if(h ==2)
- break;
- }
- if(h ==0)
- {
- Console.Write("Матрица №1 единичная");
- Console.Write("\n");
- }
- int k =0;
- int l =1;
- int r =0;
- if(n ==m)
- {
- for(int i =1; i<n; i++)
- {
- for(int j =0; j<m; j++)
- {
- if(i>j)
- {
- for(k; k<n; k++)
- {
- for(l; l<m; l++)
- {
- if(a[i][k]!=a[k][l])
- {
- Console.Write("Матрица не симетричная.");
- Console.Write("\n");
- r =1;
- break;
- }
- }
- if(r ==1)
- break;
- }
- }
- if(r ==1)
- break;
- }
- if(r ==1)
- break;
- }
- if(r ==0)
- {
- Console.Write("Матрица симетричная");
- Console.Write("\n");
- }
- }
- else
- {
- Console.Write("Матрица не симетричная");
- Console.Write("\n");
- }
- }
- //*
- // * @brief Проверка на треугольность
- //
- public void Treug()
- {
- int r =0;
- for(int i =0; i<n; i++)
- {
- for(int j =0; j<m; j++)
- if(i>j)
- {
- if(a[i][j]!=0)
- {
- Console.Write("\nМатрица №1 не является верхняя треугольная.");
- Console.Write("\n");
- r =1;
- break;
- }
- }
- if(r ==1)
- break;
- }
- if(r ==0)
- {
- Console.Write("Матрица №1 является верхней треугольной.");
- Console.Write("\n");
- }
- r =0;
- for(int i =0; i<n; i++)
- {
- for(int j =0; j<m; j++)
- if(i<j)
- {
- if(a[i][j]!=0)
- {
- Console.Write("Матрица №1 не является нижней треугольной.");
- Console.Write("\n");
- r =2;
- break;
- }
- }
- if(r ==2)
- break;
- }
- if(r ==0)
- {
- Console.Write("Матрица №1 является нижней треугольной.");
- Console.Write("\n");
- }
- }
- //*
- // * @brief Умножение матрицы на число
- //
- public void Umnog(int z)
- {
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- a[i][j] =a[i][j]*z;
- }
- //*
- // * @brief Деление матрицы на число
- //
- public void Delenie(int z)
- {
- for(int i =0; i<n; i++)
- for(int j =0; j<m; j++)
- a[i][j] =a[i][j]/z;
- }
- public double GetI(int i, int j)
- {
- return a[i][j];
- }
- }
- //----------------------------------------------------------------------------------------
- // Copyright © 2006 - 2009 Tangible Software Solutions Inc.
- // This class can be used by anyone provided that the copyright notice remains intact.
- //
- // This class provides the ability to convert basic C++ 'cin' behavior.
- //----------------------------------------------------------------------------------------
- internal static class SimulateCin
- {
- private static bool goodlastread = false;
- internal static bool LastReadWasGood
- {
- get
- {
- return goodlastread;
- }
- }
- internal static string ReadToWhiteSpace(bool skipleadingwhitespace)
- {
- string input = "";
- char nextchar;
- if (skipleadingwhitespace)
- {
- while (char.IsWhiteSpace(nextchar = (char)Console.Read()))
- {
- }
- input += nextchar;
- }
- while ( ! char.IsWhiteSpace(nextchar = (char)Console.Read()))
- {
- input += nextchar;
- }
- goodlastread = input.Length > 0;
- return input;
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- int kod;
- int p; // размеры для матриц
- int h;
- int q;
- int w;
- Matrix[] A = new Matrix[3]; // создание массива указателей класса Matrix
- Console.Write("\nВведите размеры 1-й марицы:\n Количество строк n=");
- p = Int32.Parse(Console.ReadLine());
- Console.Write(" Количество столбцов m=");
- h = Int32.Parse(Console.ReadLine());
- A[0] =new Matrix(p, h, 0);
- Console.Write("\nВведите размеры 2-й марицы:\n Количество строк k=");
- q = Int32.Parse(Console.ReadLine());
- Console.Write(" Количество столбцов l=");
- w = Int32.Parse(Console.ReadLine());
- A[1] =new Matrix(q, w, 0);
- Console.Write("\tМатрица №1\n");
- Console.Write("\n");
- A[0].Print(p, h);
- Console.Write("\n\tМатрица №2\n");
- Console.Write("\n");
- A[1].Print(q, w);
- while(true)
- {
- Console.Write("\nВыберите операции над матрицами:\n\t1.Сложение, вычитание,умножение,деление.\n\t2.Комбинированные операции присваивания.\n\t3.Сравнения на равенство/неравенство");
- Console.Write("\n\t4.Вычисление транспонированной матрицы\n\t5.Возведения в степень\n\t6.Квадратная, диагональная, нулевая, единичная, симетричная");
- Console.Write("\n\t7.Проверка на верхняя или нижняя треугольная.\n\t8.Ввести новые матрицы.\n\t0.Выход:");
- kod = Int32.Parse(Console.ReadLine());
- switch(kod)
- {
- case 1:
- Console.Write("\n1.Сложение.\n2.Вычитание.\n3.Умножение.\n4.Деление:");
- int kod1;
- kod1 = Int32.Parse(Console.ReadLine());
- switch(kod1)
- {
- case 1:
- Console.Write("\n****Сложение:*****\n\n");
- if(p ==q && h ==w)
- {
- A[2] = new Matrix(q, w, 1);
- (A[2])=((A[0]) + (A[1]));
- A[2].Print(q, w);
- A[2] = null;
- }
- else
- {
- Console.Write("-----Слаживаются матрицы одинаковых размеров!!!----\n");
- }
- break;
- case 2:
- Console.Write("\n****Вычитание:******\n\n");
- if(p ==q && h ==w)
- {
- A[2] = new Matrix(q, w, 1);
- (A[2])=(A[0]) - (A[1]);
- A[2].Print(q, w);
- A[2] = null;
- }
- else
- {
- Console.Write("----Матрицы должны быть одинаковых размеров!!!----\n");
- }
- break;
- case 3:
- Console.Write("\n****Умножение:******\n\n");
- int z;
- Console.Write("1. Умножение матриц на число.\n2. Умножение матрицы на матрицу:");
- z = Int32.Parse(Console.ReadLine());
- A[2] = new Matrix(p, w, 1);
- if(z ==2)
- {
- if(h ==q)
- {
- (A[2])=((A[0]) * (A[1]));
- Console.Write("\n\tПроизведение матриц:\n");
- A[2].Print(p, w);
- A[2] = null;
- }
- else
- {
- Console.Write("----Умножаются матрицы размеров NxM и KxL, если M=K!!!!!-----\n");
- }
- }
- else
- {
- double u;
- Console.Write("Введите коофициент умножения:");
- u = Int32.Parse(Console.ReadLine());
- Console.Write("\n\tМатрица №1:\n");
- Console.Write("\n");
- A[0].Umnog(u);
- A[0].Print(p, h);
- }
- break;
- case 4:
- int u;
- Console.Write("\nДеление матрицы на чило. Введите число:");
- u = Int32.Parse(Console.ReadLine());
- if(u ==0)
- {
- Console.Write("\nНа 0 делить нельзя!!!\n");
- }
- else
- {
- Console.Write("\n\tМатрица №1:\n");
- Console.Write("\n");
- A[0].Delenie(u);
- A[0].Print(p, h);
- }
- break;
- }
- break;
- case 2:
- if(p ==q && h ==w)
- {
- Console.Write("\nОперация '+='(A+=B)\nМатрица №1:\n");
- Console.Write("\n");
- (A[0])+=(A[1]);
- A[0].Print(p, h);
- Console.Write("\nОперация '-='(A-=B)\nМатрица №1:\n");
- Console.Write("\n");
- (A[0])-=(A[1]);
- A[0].Print(p, h);
- }
- else
- {
- Console.Write("\nМатрицы должны быть одинаковых размеров!\n");
- }
- break;
- case 3:
- if(p ==q && h ==w)
- (A[0])==(A[1]);
- else
- {
- Console.Write("\nМатрицы должны быть одинаковых размеров!\n");
- }
- break;
- case 4:
- Console.Write("\nТранспонированая матрица №1:\n");
- Console.Write("\n");
- A[0].Transp();
- A[0].Print(h, p);
- break;
- case 5:
- if(p ==h)
- {
- int v;
- Console.Write("\nВведети степень:");
- Console.Write("\n");
- v = Int32.Parse(Console.ReadLine());
- Console.Write("\nВозведение матрицы №1 в степень:\n");
- Console.Write("\n");
- A[0].Spep(v);
- A[0].Print(p, h);
- }
- else
- {
- Console.Write("\nНужно ввести квадратную матрицу!!!\n");
- }
- break;
- case 6:
- Console.Write("Проверка для матрицы №1");
- Console.Write("\n");
- if(p ==h)
- {
- Console.Write("\nМатрица №1 квадратная.\n");
- }
- else
- {
- Console.Write("\nМатрица №1 не квадратная.\n");
- }
- A[1].Proverka();
- break;
- case 7:
- Console.Write("Проверка для матрицы №1");
- Console.Write("\n");
- A[0].Treug();
- break;
- case 8:
- for(int i =0; i<2; i++)
- A[i] = null;
- Console.Write("\nВведите размеры 1-й марицы:\n Количество строк n=");
- p = Int32.Parse(Console.ReadLine());
- Console.Write(" Количество столбцов m=");
- h = Int32.Parse(Console.ReadLine());
- A[0] =new Matrix(p, h, 0);
- Console.Write("\nВведите размеры 2-й марицы:\n Количество строк k=");
- q = Int32.Parse(Console.ReadLine());
- Console.Write(" Количество столбцов l=");
- w = Int32.Parse(Console.ReadLine());
- A[1] =new Matrix(q, w, 0);
- Console.Write("\tМатрица №1\n");
- Console.Write("\n");
- A[0].Print(p, h);
- Console.Write("\n\tМатрица №2\n");
- Console.Write("\n");
- A[1].Print(q, w);
- break;
- case 0:
- for(int i =0; i<2; i++)
- A[i] = null;
- return 0;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment