Advertisement
DacCum

asd

Apr 30th, 2022
941
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.14 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3.  
  4. class Program
  5. {
  6.     static int RowsCount(int[,] matrix)
  7.     {
  8.         return matrix.GetUpperBound(0) + 1;
  9.     }
  10.  
  11.     static int ColumnsCount(int[,] matrix)
  12.     {
  13.         return matrix.GetUpperBound(1) + 1;
  14.     }
  15.  
  16.     static int[,] Read_Matrix(string name, StreamReader reader)
  17.     {
  18.         Console.Write("Количество строк матрицы {0}: ", name);
  19.         int n = Convert.ToInt32(Console.ReadLine());
  20.         Console.Write("Количество столбцов матрицы {0}: ", name);
  21.         int m = Convert.ToInt32(Console.ReadLine());
  22.  
  23.         int[,] matrix = new int[n, m];
  24.         for (int i = 0; i < n; i++)
  25.         {
  26.             string s = "";
  27.             string tmp;
  28.             int count = 0;
  29.  
  30.             while (true)
  31.             {
  32.                 tmp = Convert.ToString(Convert.ToChar(reader.Read()));
  33.  
  34.                 if (tmp == " ")
  35.                 {
  36.                     if (s != "")
  37.                     {
  38.                         matrix[i, count] = Convert.ToInt32(s);
  39.                         count++;
  40.                     }
  41.                     s = "";
  42.                     continue;
  43.                 }
  44.                 if (tmp == "\n")
  45.                 {
  46.                     if(s != "")
  47.                         matrix[i, count] = Convert.ToInt32(s);
  48.                     break;
  49.                 }
  50.  
  51.                 s = s + tmp;
  52.             }
  53.         }
  54.  
  55.         return matrix;
  56.     }
  57.  
  58.     static void Print_Matrix(int[,] matrix, StreamWriter writer)
  59.     {
  60.         for (int i = 0; i < RowsCount(matrix); i++)
  61.         {
  62.             for (int j = 0; j < ColumnsCount(matrix); j++)
  63.                 writer.Write(matrix[i, j].ToString().PadLeft(6));
  64.             writer.WriteLine();
  65.         }
  66.     }
  67.  
  68.     static int[,] Matrix_Mult(int[,] matrixA, int[,] matrixB)
  69.     {
  70.         if (ColumnsCount(matrixA) != RowsCount(matrixB))
  71.             throw new Exception("ERROR: Умножение не возможно.\n\tКоличество столбцов первой матрицы не равно количеству строк второй матрицы.");
  72.  
  73.         int[,] matrixC = new int[RowsCount(matrixA), ColumnsCount(matrixB)];
  74.  
  75.         for (int i = 0; i < RowsCount(matrixA); i++)
  76.             for (int j = 0; j < ColumnsCount(matrixB); j++)
  77.             {
  78.                 matrixC[i, j] = 0;
  79.                 for (int k = 0; k < ColumnsCount(matrixA); k++)
  80.                     matrixC[i, j] += matrixA[i, k] * matrixB[k, j];
  81.             }
  82.  
  83.         return matrixC;
  84.     }
  85.  
  86.     static void Main(string[] args)
  87.     {
  88.         string input_file = "matrix.txt";
  89.         string result_file = "result.txt";
  90.         StreamReader reader = new StreamReader(input_file);
  91.         StreamWriter writer = new StreamWriter(result_file, false);
  92.        
  93.         int[,] a = Read_Matrix("A", reader);
  94.         //Print_Matrix(a, writer);
  95.         reader.Read();
  96.         int[,] b = Read_Matrix("B", reader);
  97.         //Print_Matrix(b, writer);
  98.  
  99.         int[,] result = Matrix_Mult(a, b);
  100.         Print_Matrix(result, writer);
  101.         reader.Close();
  102.         writer.Close();
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement