Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРСОВИК ПО ПРОГРАММИРОВАНИЮ.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
189.04 Кб
Скачать

Код программы и схема алгоритма

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication16

{

class Program

{

static void Main(string[] args)

{

/*

2. Даны два массива: x[1] ≤… ≤ x[k], y[1] ≤ … ≤ y[l] и число q. Найти сумму вида x[i] + y[j], наиболее близкую к

числу q (число действий порядка k + l, дополнительная память – фиксированное число переменных, массивы не изменять).

*/

Console.Write("Введите число q= ");

int q = Convert.ToInt32(Console.ReadLine());

Console.Write("Введите размерность массива x, k= ");

int k = Convert.ToInt32(Console.ReadLine());

int[] x = new int[k];

for (int i = 0; i < k; i++)

{

Console.Write("Введите x[" + i + "] элемент ");

x[i] = Convert.ToInt32(Console.ReadLine());

}

Console.Write("Введите размерность массива y, l= ");

int l = Convert.ToInt32(Console.ReadLine());

int[] y = new int[l];

for (int i = 0; i < l; i++)

{

Console.Write("Введите y[" + i + "] элемент ");

y[i] = Convert.ToInt32(Console.ReadLine());

}

int p = 0;

int[] z = new int[k * l + 1];

for (int i = 0; i < k; i++) // Записываем сумму элементов массива x и y в массив z

{

for (int j = 0; j < l; j++)

{

int n = x[i] + y[j];

z[p] = n;

Console.WriteLine("Вывод суммы:" + z[p]);

p++;

}

} Console.ReadLine();

int f = z.Length - 1;

z[f] = q; // Записываем число q в массив z

int nomer = 0;

Array.Sort(z);

Console.WriteLine("Сортированный массив z= ");

bool we = false;

for (int i = 0; i < z.Length; i++)

{

bool re = we;

if ((z[i] == q) && (re == false)) // Находим первое вхождение числа q в массиве z и запоминаем порядковый номер

{

nomer = i;

we = true;

Console.ForegroundColor = ConsoleColor.Green;

}

Console.Write(" " + z[i]);

Console.ResetColor();

}

Console.WriteLine();

Console.WriteLine("Порядковый номер = " + nomer);

Console.ReadLine();

for (int i = 0; i < z.Length; i++)

{

if (z[i] == q)

{

int a = i;

if (!(q == z[z.Length - 1]))

{

if (q == z[0])

{

Console.WriteLine("Число " + z[1] + " является самой близкой суммой к числу q= " + q);

}

else

{

int v = Math.Abs(z[a] - z[a - 1]); // Находим число стоящее перед q

int v1 = Math.Abs(z[a] - z[a + 1]); // Находим число стоящее после q

if (v < v1)

{

Console.WriteLine("Число " + z[a - 1] + " является самой близкой суммой к числу q= " + q);

}

if (v > v1)

{

Console.WriteLine("Число " + z[a + 1] + " является самой близкой суммой к числу q= " + q);

}

if (v == v1)

{

Console.WriteLine("Числа " + z[a - 1] + " и " + z[a + 1] + " является самой близкой суммой к числу q= " + q);

}

}

}

else

Console.WriteLine("Число " + z[z.Length - 2] + " является самой близкой суммой к числу q= " + q);

} Console.ReadKey();

}

}

}

}