Характеристика
переменных
|
Имя
переменной
|
Смысл
переменной
|
Назначение
переменной
|
Ограничения
|
q
|
Десятичное
число
|
Исходная
|
|
k
|
Размерность
массива x
|
Исходная
|
|
x
|
Одномерный
массив
|
Исходная
|
|
l
|
Размерность
массива y
|
Исходная
|
|
y
|
Одномерный
массив
|
Исходная
|
|
z
|
Одномерный
массив
|
Промежуточная
|
|
we
|
Булева
переменная
|
Промежуточная
|
|
nomer
|
Порядковый
номер числа q
|
Промежуточная
|
|
v, v1
|
Определяют
ближ. сумму к числу q
|
Результат
|
|
Как только ввели число q,
начинаем складывать элементы массивов x
и y. Результат суммы
записываем в массив z. Далее
сортируем элементы массива по возрастанию и перезаписываем их. Следующим шагов
выполняется ряд условий, которые и находят самую близкую сумму двух массивов x
и y к числу q.
Схема алгоритма. Описание
Схема алгоритма содержит следующие типовые
структурные элементы: внешний цикл и вложенные друг в друга структуры
ветвления. В цикле начинается перебор массива z,
до тех пор пока не найдем число q
в массиве z. Далее проверяем,
если число q - это последний
элемент массива, то самой близкой суммой к числу q
будет равняться стоящий перед ним элемент. Если же это не так, то в следующем
условии проверяем, не является ли число q
нулевым элементов массива. Тогда ближайшей к нему суммой будет следующий после
него элемент. В конце задаем структуры ветвления, на случай если наше число q
стоит в середине массива. В них сравнивается число, стоящее перед и после
значения q. В зависимости от
их значения, выводится ближайшая сумма элементов массива x
и y к числу q.
Код программы и схема алгоритма
System;
using
System.Collections.Generic;System.Linq;System.Text;ConsoleApplication16
{Program
{void Main(string[] args)
{
/*
. Даны два массива: x[1] ≤… ≤
x[k], y[1] ≤ … ≤ y[l] и число q. Найти сумму вида x[i] + y[j],
наиболее близкую к
числу q (число действий порядка k + l,
дополнительная память - фиксированное число переменных, массивы не изменять).
int q =
Convert.ToInt32(Console.ReadLine());
Console.Write("Введите размерность массива
x, k= ");
int k =
Convert.ToInt32(Console.ReadLine());[] x = new int[k];(int i = 0; i < k;
i++)
{.Write("Введите
x[" + i + "] элемент
");[i] = Convert.ToInt32(Console.ReadLine());
}.Write("Введите размерность массива y, l=
");
int l =
Convert.ToInt32(Console.ReadLine());[] y = new int[l];(int i = 0; i < l;
i++)
{.Write("Введите
y[" + i + "] элемент
");[i] = Convert.ToInt32(Console.ReadLine());
}p = 0;[] z = new int[k * l + 1];
for (int i = 0; i < k; i++) // Записываем
сумму элементов массива x и y в массив z
{(int j = 0; j < l; j++)
{n = x[i] + y[j];[p] =
n;.WriteLine("Вывод суммы:"
+ z[p]);++;
}
} Console.ReadLine();f = z.Length -
1;
z[f] = q; // Записываем число q в массив z
int nomer = 0;.Sort(z);
Console.WriteLine("Сортированный массив z=
");
bool we = false;(int i = 0; i <
z.Length; i++)
{re = we;((z[i] == q) && (re == false))
// Находим первое вхождение числа q в массиве z и запоминаем порядковый номер
{= i;= true;.ForegroundColor =
ConsoleColor.Green;
}.Write(" " +
z[i]);.ResetColor();
}.WriteLine();.WriteLine("Порядковый
номер
= " + nomer);.ReadLine();(int i = 0; i < z.Length; i++)
{(z[i] == q)
{a = i;(!(q == z[z.Length - 1]))
{(q == z[0])
{.WriteLine("Число " + z[1] + "
является самой близкой суммой к числу q= " + q);
}
{v = Math.Abs(z[a] - z[a - 1]); // Находим число
стоящее перед qv1 = Math.Abs(z[a] - z[a + 1]); // Находим число стоящее после q(v
< v1)
{.WriteLine("Число " + z[a - 1] +
" является самой близкой суммой к числу q= " + q);
}(v > v1)
{.WriteLine("Число " + z[a + 1] +
" является самой близкой суммой к числу q= " + q);
}(v == v1)
{.WriteLine("Числа " + z[a - 1] +
" и " + z[a + 1] + " является самой близкой суммой к числу q=
" + q);
}
}
}.WriteLine("Число " + z[z.Length - 2]
+ " является самой близкой суммой к числу q= " + q);
} Console.ReadKey();
}
}
}
}
Схема.
Результат машинного тестирования программы
Вводим число q
= 8 и заполняем массивы x
и y. Далее сортируем
массив z по возрастанию и
находим первое вхождение числа q.
Определяем его порядковый номер.
Рис.
Заключение
В ходе выполнения курсовой работы были
реализованы алгоритмы решения поставленных задач и написаны соответствующие
коды программ. Программы были написаны с использованием методов, что позволило
значительно сократить и оптимизировать коды.
В результате были созданы две работоспособные
программы по решению математических задач. Первая находит длину периода дроби
1/n в
последовательности остатков. Вторая находит сумму вида x[i]
+ y[j],
наиболее близкую к числу q.
Список рекомендуемой литературы
.Павловская
Т.А. C#. Программирование на языке высокого уровня: учебник для вузов. - СПб.:
Питер, 2007. - 432 с.
.Шилдт
Г. C# 2.0. Серия «Полное руководство». Пер. с англ. - М.: ЭКОМ Паблишерз, 2007.
- 976 с.
.Фаронов
В.В. Создание приложений с помощью C#. Руководство программиста. - М.: Эксмо,
2008. - 576 с.
.Малыхина
М.П. Программирование на языке высокого уровня: учеб. пособие. - СПб.:
БХВ-Петербург, 2006.
.Малыхина
М.П., Частикова В.А., Миклашевская Л.Н. Программирование на языке высокого
уровня. Методические указания к курсовой работе по дисциплине «Программирование
на языке высокого уровня» для студентов всех форм обучения специальности
220400. -Краснодар: Изд. КубГТУ, 2004.
.Фролов
А.В., Фролов Г.В. Язык C#. Самоучитель. - М.: ДИАЛОГ-МИФИ, 2003.
.Шильд
Г. Полный справочник по C#. Пер. с англ. - М.: Вильямс, 2004.