//перегрузка умножения public static matr operator *(matr A, matr B) { matr C = new matr(); //результирующий вектор int carry = 0; //перенос int k = 0; //сдвиг влево, чтобы писать в нужный разряд результата //умножение как в столбик for (int i = dim - 1; i > 0; i--) { for (int j = dim - 1; j > 0; j--) { if (j - k >= 0) { C.number[j - k] += (A.number[i] * B.number[j] + carry) % 10; carry = (A.number[i] * B.number[j] + carry) / 10 + C.number[j - k] / 10; C.number[j - k] = C.number[j - k] % 10; } } k++; } //вычисляем длину получившегося числа int len = 0; while (len < dim && (C.number[len] == 0)) { len++; } C.numlength = dim - len; return(C); }
//перегрузка деления public static matr operator /(matr A, matr B) { matr C = new matr(); //результирующий вектор matr ed = new matr(); //единичный вектор for (int i = 0; i < dim - 1; i++) //С и единичный пустые { ed.number[i] = 0; C.number[i] = 0; } ed.number[dim - 1] = 1; //единичный=00..01 while (!(A < B)) //вычитаем, пока число не закончится и к результату прибавляем 1 { A -= B; C += ed; } //вычисляем длину получившегося числа int len = 0; while (len < dim && (C.number[len] == 0)) { len++; } C.numlength = dim - len; return(C); }
//перегрузка - public static matr operator -(matr A, matr B) { matr C = new matr(); //результирующая матрица int carry = 0; //флаг переноса int i = dim - 1; //идем с конца while (i >= 0) {//если уменьшаемое больше, чем вычитаемое, то вычитаем с учетом переноса if (A.number[i] >= B.number[i] + carry) { C.number[i] = A.number[i] - B.number[i] - carry; carry = 0; } else//или занимаем разряд и вычитаем { C.number[i] = A.number[i] + 10 - B.number[i] - carry; carry = 1; } i--; } //вычисляем длину получившегося числа int len = 0; while (len < dim && (C.number[len] == 0)) { len++; } C.numlength = dim - len; return(C); }
//перегрузка + public static matr operator +(matr A, matr B) { matr C = new matr(); //результирующий вектор int carry = 0; //перенос //складываем по разрядам с учетом переноса for (int i = dim - 1; i > 0; i--) { C.number[i] = (A.number[i] + B.number[i] + carry) % 10; carry = (A.number[i] + B.number[i] + carry) / 10; } //вычисляем длину получившегося числа int len = 0; while (len < dim && (C.number[len] == 0)) { len++; } C.numlength = dim - len; return(C); }
static void Main(string[] args) { //input A matr A = new matr(); Console.WriteLine("Введите первое число"); A.ReadNum(); //input B matr B = new matr(); Console.WriteLine("Введите второе число"); B.ReadNum(); //выбор операции matr Result = new matr(); Console.WriteLine("Введите операцию или любую букву для завершения программы:"); bool end = true; while (end) { int buff = Console.Read(); Console.ReadLine(); switch (buff) { case '>': if (A > B) { Console.WriteLine("A>b"); } else { Console.WriteLine("A<=B"); } break; case '<': if (A < B) { Console.WriteLine("A<b"); } else { Console.WriteLine("A>=B"); } break; case '-': if (A > B) { if ((B.isneg && A.isneg) || (!B.isneg && !A.isneg)) { Result = A - B; } else { Result = A + B; } Result.isneg = A.isneg; } else { if ((B.isneg && A.isneg) || (!B.isneg && !A.isneg)) { Result = B - A; Result.isneg = !B.isneg; } else { Result = B + A; Result.isneg = B.isneg; } } Console.WriteLine("Результат"); if (Result.isneg) { Console.Write("-"); } Result.WriteNum(); break; case '+': if (A > B) { if ((B.isneg && A.isneg) || (!B.isneg && !A.isneg)) { Result = A + B; } else { Result = A - B; } Result.isneg = A.isneg; } else { if ((B.isneg && A.isneg) || (!B.isneg && !A.isneg)) { Result = B + A; Result.isneg = B.isneg; } else { Result = B - A; Result.isneg = B.isneg; } } Console.WriteLine("Результат"); if (Result.isneg) { Console.Write("-"); } Result.WriteNum(); break; case '*': Result = A * B; if ((B.isneg && A.isneg) || (!B.isneg && !A.isneg)) { Result.isneg = false; //-*- или +*+ это плюс } else { Result.isneg = true; } Console.WriteLine("Результат"); if (Result.isneg) { Console.Write("-"); } Result.WriteNum(); break; case '/': Result = A / B; if ((B.isneg && A.isneg) || (!B.isneg && !A.isneg)) { Result.isneg = false; //-*- или +*+ это плюс } else { Result.isneg = true; } Console.WriteLine("Результат"); if (Result.isneg) { Console.Write("-"); } Result.WriteNum(); break; default: end = false; break; } } Console.WriteLine("Конец программы"); Console.ReadLine(); }