Загрузка данных
using System;
using System.Text;
class Program
{
static Random rnd = new Random();
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("ЗАДАЧА 1. Рекурсивная сортировка Хоара");
int n1 = Rd("n = ", 1, 100);
int[] x = new int[n1];
for (int i = 0; i < n1; i++)
x[i] = Rd("x[" + i + "] = ");
Qs(x, 0, n1 - 1);
Console.WriteLine("Отсортированный массив:");
Pr(x);
Console.WriteLine();
Console.WriteLine("ЗАДАЧА 2. Матрица B = A * F");
int n = Rd("n = ", 1, 100);
int m = Rd("m = ", 1, 100);
int[,] f =
{
{ 1, 0, 1 },
{ 0, 1, 0 },
{ 1, 0, 1 }
};
int k = f.GetLength(0);
if (n < k || m < k)
{
Console.WriteLine("Ошибка: n и m должны быть не меньше k = " + k);
Console.ReadKey();
return;
}
int a = Rd("a = ");
int b;
do
{
b = Rd("b = ");
if (b < a) Console.WriteLine("b должно быть >= a");
}
while (b < a);
int[,] A = new int[n, m];
int v = Rd("Ввод A: 1 - вручную, 2 - случайно: ", 1, 2);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
A[i, j] = v == 1 ? Rd("A[" + i + "," + j + "] = ", a, b)
: rnd.Next(a, b + 1);
int[,] B = Cb(A, f);
Console.WriteLine();
Console.WriteLine("Матрица A:");
Pr(A);
Console.WriteLine();
Console.WriteLine("Матрица F:");
Pr(f);
Console.WriteLine();
Console.WriteLine("Матрица B:");
Pr(B);
Console.ReadKey();
}
static void Qs(int[] x, int l, int r)
{
int i = l, j = r;
int p = x[(l + r) / 2];
while (i <= j)
{
while (x[i] < p) i++;
while (x[j] > p) j--;
if (i <= j)
{
int t = x[i];
x[i] = x[j];
x[j] = t;
i++;
j--;
}
}
if (l < j) Qs(x, l, j);
if (i < r) Qs(x, i, r);
}
static int[,] Cb(int[,] A, int[,] F)
{
int n = A.GetLength(0);
int m = A.GetLength(1);
int k = F.GetLength(0);
int[,] B = new int[n - k + 1, m - k + 1];
for (int i = 0; i <= n - k; i++)
for (int j = 0; j <= m - k; j++)
{
int s = 0;
for (int p = 0; p < k; p++)
for (int q = 0; q < k; q++)
s += A[i + p, j + q] * F[p, q];
B[i, j] = s;
}
return B;
}
static int Rd(string s)
{
int x;
while (true)
{
Console.Write(s);
if (int.TryParse(Console.ReadLine(), out x))
return x;
Console.WriteLine("Ошибка ввода.");
}
}
static int Rd(string s, int mn, int mx)
{
int x;
while (true)
{
x = Rd(s);
if (x >= mn && x <= mx)
return x;
Console.WriteLine("Введите число от " + mn + " до " + mx);
}
}
static void Pr(int[] x)
{
for (int i = 0; i < x.Length; i++)
Console.Write(x[i] + " ");
Console.WriteLine();
}
static void Pr(int[,] x)
{
for (int i = 0; i < x.GetLength(0); i++)
{
for (int j = 0; j < x.GetLength(1); j++)
Console.Write("{0,5}", x[i, j]);
Console.WriteLine();
}
}
}