Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace lab3
- {
- class Program
- {
- static int n=0, m=0;
- static int i, j, res = 0;
- static private Random rnd = new Random();
- static int[,] arr = new int[40, 40];
- static int[,] arr_ = new int[40, 40];
- static char[,] arr_ch = new char[40, 40];
- static Array inp1()
- {
- string buf;
- bool ok;
- do
- {
- try
- {
- Console.WriteLine("Введите количесвто строк");
- buf = Console.ReadLine();
- n = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- do
- {
- try
- {
- Console.WriteLine("Введите количество столбцов");
- buf = Console.ReadLine();
- m = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- int[,] arrq = new int[n, m];
- int count = 1;
- //заполнение массива
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < m; j++)
- {
- do
- {
- try
- {
- Console.WriteLine($"Введите {count++}-й элемент");
- buf = Console.ReadLine();
- res = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- arrq[i, j] = res;
- }
- }
- return arrq;
- }
- static Array inp2()
- {
- string buf;
- bool ok;
- do
- {
- try
- {
- Console.WriteLine("Введите n");
- buf = Console.ReadLine();
- n = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- int[,] arrq = new int[n, n];
- //заполнение массива
- for (i = 0; i < n; i++) //ниже главной диагонали
- {
- for (j = 0; j < i; j++)
- {
- arrq[i, j] = rnd.Next(-70,151);
- }
- }
- for(i = 0; i < n; i++) // на главной диагонали и выше
- {
- for (j = i; j < n; j++)
- {
- arrq[i, j] = rnd.Next(17, 171);
- }
- }
- return arrq;
- }
- static Array inp3()
- {
- string buf;
- bool ok;
- do
- {
- try
- {
- Console.WriteLine("Введите n");
- buf = Console.ReadLine();
- n = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- int[,] arrq = new int[n, n];
- //заполнение массива
- if (n % 2 == 1)
- {
- int left_border = 0;
- int right_border = n;
- for (i = (n - 1) / 2; i < n; i++)
- {
- for (j = left_border; j < right_border; j++)
- {
- arrq[i, j] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- {
- left_border++;
- right_border--;
- }
- }
- left_border = 1;
- right_border = n-1;
- for (i = (n - 1) / 2-1; i >= 0; i--)
- {
- for (j = left_border; j < right_border; j++)
- {
- arrq[i, j] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- {
- left_border++;
- right_border--;
- }
- }
- }
- if (n % 2 != 1)
- {
- int left_border = 1;
- int right_border = n-1;
- for (i = n / 2; i < n-1; i++)
- {
- for (j = left_border; j < right_border; j++)
- {
- arrq[i, j] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- {
- left_border++;
- right_border--;
- }
- }
- left_border = 1;
- right_border = n-1;
- for (i = n / 2 - 1; i > 0; i--)
- {
- for (j = left_border; j < right_border; j++)
- {
- arrq[i, j] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- {
- left_border++;
- right_border--;
- }
- }
- }
- return arrq;
- }
- static void inp1_(int j) // рекурсивный метод - собственно заполнение массива
- {
- if (j < n)
- {
- for (i = 0; i <m; i++)
- {
- Console.Write("a[{0}, {1}]=? ", j, i);
- arr[j, i] = Convert.ToInt32(Console.ReadLine());
- }
- inp1_(j + 1);
- }
- }
- static void inp1_rec()
- {
- j = 0;
- string buf;
- bool ok;
- do
- {
- try
- {
- Console.WriteLine("Введите количесвто строк");
- buf = Console.ReadLine();
- n = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- do
- {
- try
- {
- Console.WriteLine("Введите количество столбцов");
- buf = Console.ReadLine();
- m = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- inp1_(j); // вызов рекурсивного метода заполнения
- }
- static void inp2_(int j) // рекурсивный метод - под главной диагональю
- {
- if (j < n)
- {
- for (i = 0; i < j; i++)
- {
- arr[j, i] = rnd.Next(-70, 151);
- }
- inp2_(j + 1);
- }
- }
- static void inp2_2(int j) // рекурсивный метод - главная диагональ и выше
- {
- if (j < n)
- {
- for (i = j; i < n; i++)
- {
- arr[j, i] = rnd.Next(17, 171);
- }
- inp2_2(j + 1);
- }
- }
- static void inp2_rec()
- {
- j = 0;
- string buf;
- bool ok;
- do
- {
- try
- {
- Console.WriteLine("Введите n");
- buf = Console.ReadLine();
- n = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- inp2_(j); // вызов рекурсивного метода заполнения
- j = 0;
- inp2_2(j); // вызов рекурсивного метода заполнения
- }
- static void inp3_1nch(int j, int left_border, int right_border) // рекурсивный метод для нечетных n
- {
- if (j < n)
- {
- for (i = left_border; i < right_border; i++)
- {
- arr_[j, i] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- inp3_1nch(j + 1, left_border+1, right_border-1);
- else inp3_1nch(j + 1, left_border, right_border);
- }
- }
- static void inp3_2nch(int j, int left_border, int right_border) // рекурсивный метод для нечетных n
- {
- if (j >= 0)
- {
- for (i = left_border; i < right_border; i++)
- {
- arr_[j, i] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- inp3_2nch(j -1, left_border+1, right_border-1);
- else inp3_2nch(j -1, left_border, right_border);
- }
- }
- static void inp3_1ch(int j, int left_border, int right_border) // рекурсивный метод для чётных n
- {
- if (j <n-1)
- {
- for (i = left_border; i < right_border; i++)
- {
- arr_[j, i] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- inp3_1ch(j + 1, left_border + 1, right_border - 1);
- else inp3_1ch(j + 1, left_border, right_border);
- }
- }
- static void inp3_2ch(int j, int left_border, int right_border) // рекурсивный метод для четных n;
- {
- if (j > 0)
- {
- for (i = left_border; i < right_border; i++)
- {
- arr_[j, i] = rnd.Next(1, 100);
- }
- if (left_border != right_border)
- inp3_2ch(j - 1, left_border + 1, right_border - 1);
- else inp3_2ch(j - 1, left_border, right_border);
- }
- }
- static void inp3_rec()
- {
- string buf;
- bool ok;
- do
- {
- try
- {
- Console.WriteLine("Введите n");
- buf = Console.ReadLine();
- n = int.Parse(buf);
- ok = true;
- }
- catch (FormatException)
- {
- Console.WriteLine("Error");
- ok = false;
- }
- } while (!ok);
- if (n % 2 != 0)
- {
- j = (n - 1) / 2;
- int left_border = 0;
- int right_border = n;
- inp3_1nch(j, left_border, right_border); // вызов рекурсивного метода заполнения
- j = (n - 1) / 2 - 1;
- left_border = 1;
- right_border = n - 1;
- inp3_2nch(j, left_border, right_border);// вызов рекурсивного метода заполнения
- }
- if (n % 2 == 0)
- {
- j = n / 2;
- int left_border = 1;
- int right_border = n - 1;
- inp3_1ch(j, left_border, right_border); // вызов рекурсивного метода заполнения
- j = n / 2 - 1;
- left_border = 1;
- right_border = n - 1;
- inp3_2ch(j, left_border, right_border);// вызов рекурсивного метода заполнения
- }
- }
- static void out1(int[,] arr) //вывод массива
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- Console.Write("{0}\t", arr[i, j]);
- }
- Console.WriteLine();
- }
- }
- static void out_ch(char[,] arr) //вывод массива символов
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- Console.Write("{0}\t", arr[i, j]);
- }
- Console.WriteLine();
- }
- }
- static void sort_(string[] str) //сортируем подстроки
- {
- for (i = 1; i < n; i++)
- for (j = n - 1; j >= i; j--)
- if (str[j][0] < str[j - 1][0])
- {
- string temp = str[j];
- str[j] = str[j - 1];
- str[j - 1] = temp;
- }
- }
- static void sort_rec(int i,string[] str) //сортируем подстроки ркурсивно
- {
- if (i < n)
- {
- for (j = n - 1; j >= i; j--)
- if (str[j][0] < str[j - 1][0])
- {
- string temp = str[j];
- str[j] = str[j - 1];
- str[j - 1] = temp;
- }
- sort_rec(i + 1, str);
- }
- }
- static void rasp_(string[] str) //заполняем массив подстроками
- {
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- arr_ch[i, j] = str[i][j];
- }
- static void rasp_rec(int i, string[] str) //заполняем массив подстроками рекурсивно
- {
- if (i < n)
- {
- for (j = 0; j < n; j++)
- arr_ch[i, j] = str[i][j];
- rasp_rec(i + 1, str);
- }
- }
- static void inp(int n, int[,] a)
- {
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- a[i, j] = -10 + rnd.Next(21);
- }
- static void multiplication(int n, int[,] a, int[,] b, int[,] c)
- {
- int i, j, k;
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- {
- c[i, j] = 0;
- for (k = 0; k < n; k++)
- c[i, j] += a[i, k] * b[k, j];
- }
- }
- static void multiplication_rec(int i, int n, int[,] a, int[,] b, int[,] c) // рекурсивный метод перемножения матриц
- {
- int j, k;
- if (i < n)
- {
- for (j = 0; j < n; j++)
- {
- c[i, j] = 0;
- for (k = 0; k < n; k++)
- c[i, j] += a[i, k] * b[k, j];
- }
- multiplication_rec(i + 1, n, a, b, c);
- }
- }
- static void Main(string[] args)
- {
- /* int[,] arr1 = new int[n,m];
- arr1 = inp1() as int[,];
- out1(arr1);
- int[,] arr2 = new int[n, n];
- arr2 = inp2() as int[,];
- m = n;
- out1(arr2);
- int[,] arr3 = new int[n, n];
- arr3 = inp3() as int[,];
- m = n;
- out1(arr3);*/
- /* inp1_rec();
- Console.WriteLine("Рекурсивный метод для первого массива:");
- out1(arr);*/
- /* inp2_rec();
- Console.WriteLine("Рекурсивный метод для второго массива:");
- m = n;
- out1(arr);
- inp3_rec();
- Console.WriteLine("Рекурсивный метод для третьего массива:");
- m = n;
- out1(arr_);
- string s = "";
- Console.WriteLine("Введите строку");
- s = Console.ReadLine();
- double n1 = Math.Sqrt((double)s.Length);
- n = (int)n1;
- string[] str = new string[n];
- for (i = 0; i < n; i++)
- for (j = i * n; j < (i + 1) * n; j++)
- str[i] += s[j];
- sort_(str);
- rasp_(str);
- m = n;
- out_ch(arr_ch);
- Console.WriteLine("Введите строку");
- s = Console.ReadLine();
- n1 = Math.Sqrt((double)s.Length);
- n = (int)n1;
- string[] str1 = new string[n];
- for (i = 0; i < n; i++)
- for (j = i * n; j < (i + 1) * n; j++)
- str1[i] += s[j];
- i = 1;
- sort_rec(i, str1);
- i = 0;
- rasp_rec(i, str1);
- m = n;
- out_ch(arr_ch);*/
- int[,] a = new int[40, 40];
- int[,] b = new int[40, 40];
- int[,] c = new int[40, 40];
- int[,] temp = new int[40, 40];
- int[,] mult = new int[40, 40];
- Console.WriteLine("n?");
- n = Convert.ToInt32(Console.ReadLine());
- m = n;
- Console.WriteLine("Массив A:");
- inp(n, a);
- out1( a);
- Console.WriteLine("Массив B:");
- inp(n, b);
- out1( b);
- Console.WriteLine("Массив C:");
- inp(n, c);
- out1( c);
- // multiplication(n, b, c, temp);
- // multiplication(n, a, temp, mult);
- i = 0;
- multiplication_rec(i,n, b, c, temp);
- multiplication_rec(i,n, a, temp, mult);
- Console.WriteLine("Массив A*(B*C):");
- out1(mult);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement