Академический Документы
Профессиональный Документы
Культура Документы
КУРСОВАЯ РАБОТА
по дисциплине программирование
(наименование дисциплины)
на тему: Решение типовых задач основных разделов программирования. Вариант 19
(тема курсовой работы)
Выполнил студент Ткачёв Иван Андреевич курса 1 группы 23-КБ-ПР4
(фамилия, имя, отчество)
Допущен к защите
(дата)
Защищена Оценка
(дата)
(подпись, дата)
Краснодар
2023
ФГБОУ ВО «Кубанский государственный технологический университет»
(ФГБОУ ВО «КубГТУ»)
УТВЕРЖДАЮ
Зав. кафедрой ИСП к.т.н., доц.
М.В. Янаева
« 15 » сентября 2023 г.
ЗАДАНИЕ
на курсовую работу
Рекомендуемая литература:
1. Павловская Т. А. П12 С#. Программирование на языке высокого уровня.
Учебник для вузов. — СПб.: Питер, 2014. — 432 с: ил.
3
Содержание
Введение...................................................................................................................5
1. Нормативные ссылки........................................................................................6
2. Одномерные массивы.......................................................................................7
2.1. Общие сведения.......................................................................................7
2.2. Постановка задачи...................................................................................7
2.3. Математические решения.......................................................................8
2.4. Блок-схемы алгоритмов..........................................................................9
2.5. Программные реализации.....................................................................12
2.6. Скриншоты выполнения программ.....................................................15
3. Двумерные массивы........................................................................................16
3.1. Общие сведения.....................................................................................16
3.2. Постановка задач...................................................................................16
3.3. Математические решения.....................................................................16
3.4. Блок-схемы алгоритмов........................................................................18
3.5. Программные реализации.....................................................................22
3.6. Скриншоты выполнения программ.....................................................25
Заключение............................................................................................................27
Список использованных источников..................................................................28
Приложение А.......................................................................................................29
4
Введение
5
1. Нормативные ссылки
6
2. Одномерные массивы
7
2.3. Математические решения
Алгоритм решения задания 1: пользователь вводит размерность
массива, после чего программа создает одномерный массив
соответствующего размера и заполняет его случайными числами в диапазоне
от -10 до 10. Созданный массив выводится на экран с помощью метода
string.join().
Далее программа инициализирует переменную geometricMean и
присваивает ей значение 1. Затем в цикле перебора элементов массива
происходит умножение накопленного в этой переменной значения на
абсолютную величину отрицательных элемента массива. Если
отрицательных чисел в массиве нет, то происходит завершение работы
программы. Далее вычисляется геометрическое среднее путем извлечения
корня из полученного накопленного умножением значения.
Инициализируем переменную minDistance с максимальным значением
типа данных Integer и savedIndex со значением -1. Далее в цикле ищем такое
число в массиве, чтобы абсолютная разность с геометрическим средним была
наименьшей, и сохраняем индекс этого элемента. Затем создаем последний
цикл, в котором происходит уменьшение чисел на 1 начиная с сохраненного
в переменной savedIndex индекса. Результат выводится в консоль с помощью
метода string.join().
Алгоритм решения задания 2: пользователь вводит размерность
массива, после чего программа создает одномерный массив
соответствующего размера и заполняет его случайными числами в диапазоне
от -10 до 10. Созданный массив выводится на экран с помощью метода
string.join().
Далее в цикле происходит сортировка элементов массива с помощью
алгоритма сортировки вставкой. Во внешнем цикле задается переменная min,
в которую после выполнения вложенного цикла записывается индекс
минимального числа в массиве. Во вложенном цикле игнорируются
отрицательные элементы, поэтому в результате сортировки они останутся на
8
своих местах. Далее происходит обмен значениями между текущим
указателем в цикле и найденным минимальным значением. Результат
выводится в консоль с помощью метода string.join().
2.4. Блок-схемы алгоритмов
9
Рисунок 2 – Блок-схема метода StartTask1() часть 1
10
Рисунок 3 – Блок-схема метода StartTask1() часть 2
11
Рисуснок 4 – Блок-схема метода StartTask2()
2.5. Программные реализации
Листинг метода Main:
static void Main(string[] args)
{
12
Console.WriteLine("Введите нормер задания (1, 2, 3, 4)");
int taskNumber = 0;
string? input = Console.ReadLine();
if (input != null)
{
taskNumber = int.Parse(input);
}
switch (taskNumber)
{
case 1:
{
StartTask1();
}
break;
case 2:
{
StartTask2();
}
break;
case 3:
{
StartTask3();
}
break;
case 4:
{
StartTask4();
}
break;
default:
return;
}
}
15
3. Двумерные массивы
16
допустимому типом Integer. Затем в цикле происходит поиск элемента в
массиве, являющимся локальным минимумом и при этом большим, чем
значение переменной maximum. Найденное значение записывается в
переменную maximum и выводится в консоль.
Алгоритм решения задания 2: происходит создание и заполнение
случайными числами в диапазоне от 0 до 1 трех массивов размерностью 9 на
4. Далее происходит построчный перебор элементов массивов, при этом
подсчитывается количество нулей в строке. Если число нулей соответствует
длине строки, то происходит инкремент одной из переменных
countNullRows1, countNullRows2, countNullRows3 в зависимости от того, по
какому массиву происходит итерирование. Затем массив выводится в
консоль.
17
3.4. Блок-схемы алгоритмов
18
Рисунок 8 – Блок-схема метода IsLocalMinimum
19
Рисунок 9 – Блок-схема метода StartTask4 часть 1
20
Рисунок 10 – Блок-схема метода StartTask4 часть 2
21
Рисунок 11 – Блок-схема метода StartTask4 часть 3
22
{
int current = array[i, j];
if (IsLocalMinimum(array, i, j) && current > maximum){
maximum = current;
}
}
}
Console.WriteLine($"Максимальный локальный минимум: {maximum}");
}
Листинг метода IsLocalMinimum():
private static bool IsLocalMinimum(int[,] matrix, int n, int m)
{
int current = matrix[n,m];
if (n + 1 < matrix.GetLength(0))
{
if (matrix[n + 1, m] < current)
return false;
}
if (n - 1 >= 0)
{
if (matrix[n - 1, m] < current)
return false;
}
if (m + 1 < matrix.GetLength(0))
{
if (matrix[n, m + 1] < current)
return false;
}
if (m - 1 >= 0)
{
if (matrix[n, m - 1] < current)
return false;
}
return true;
}
Листинг метода StartTask4():
private static void StartTask4()
{
Random rnd = new Random();
int[,] array = new int[9, 4];
int[,] array2 = new int[9, 4];
int[,] array3 = new int[9, 4];
int countNullRows1 = 0;
int countNullRows2 = 0;
int countNullRows3 = 0;
for (int i = 0; i < array.GetLength(0); i++)
{
int count1 = 0;
for (int j = 0; j < array.GetLength(1); j++)
{
23
array[i, j] = rnd.Next(2);
if (array[i, j] == 0) count1++;
}
if (count1 == 4) countNullRows1++;
}
for (int i = 0; i < array2.GetLength(0); i++)
{
int count2 = 0;
for (int j = 0; j < array2.GetLength(1); j++)
{
array2[i, j] = rnd.Next(2);
if (array2[i, j] == 0) count2++;
}
if (count2 == 4) countNullRows2++;
}
for (int i = 0; i < array3.GetLength(0); i++)
{
int count3 = 0;
for (int j = 0; j < array3.GetLength(1); j++)
{
array3[i, j] = rnd.Next(2);
if (array3[i, j] == 0) count3++;
}
if (count3 == 4) countNullRows3++;
}
if (countNullRows1 < countNullRows2)
{
if (countNullRows2 < countNullRows3)
{
for (int i = 0; i < array3.GetLength(0); i++)
{
for (int j = 0; j < array3.GetLength(1); j++)
{
Console.Write(array3[i, j] + ", ");
}
Console.WriteLine();
}
}
else
{
for (int i = 0; i < array2.GetLength(0); i++)
{
for (int j = 0; j < array2.GetLength(1); j++)
{
Console.Write(array2[i, j] + ", ");
}
Console.WriteLine();
}
}
}
else
{
24
if (countNullRows1 > countNullRows3)
{
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
Console.Write(array[i, j] + ", ");
}
Console.WriteLine();
}
}
else
{
for (int i = 0; i < array3.GetLength(0); i++)
{
for (int j = 0; j < array3.GetLength(1); j++)
{
Console.Write(array3[i, j] + ", ");
}
Console.WriteLine();
}
}
}
}
25
Рисунок 13 – Результат выполнения программы задания 2
26
Заключение
Анализ работы с одномерными и двумерными массивами приводит к
следующим выводам. Работа с одномерными массивами обеспечивает
эффективное хранение данных одного типа, быстрый доступ и
многочисленные методы обработки. Понимание работы с ними является
ключевым для разработчиков, так как они широко применяются в
программировании.
Двумерные массивы добавляют гибкость при работе с данными,
имеющими двумерную структуру. Они находят применение в различных
областях, таких как матрицы, таблицы, изображения и другие структуры
данных, где данные организованы в виде сетки. Это расширяет спектр
возможностей для работы с данными в программировании.
В ходе выполнения курсовой работы были изучены и применены
методы работы с одномерными и двумерными массивами, что
способствовало более глубокому пониманию их функционала. Кроме того,
выполнение практических задач, связанных с массивами, способствовало
накоплению практического опыта в программировании.
Таким образом, работа с одномерными и двумерными массивами
играет важную роль в разработке программных решений, и умение
эффективно манипулировать данными с использованием массивов является
неотъемлемой частью навыков программиста.
27
Список использованных источников
1. Павловская Т.А. С#. Программирование на языке высокого
уровня. Учебник для вузов. – СПб.: Питер, 2014. – 432 с: ил.
2. SkillBox Media | Код // Что такое массив и как он устроен. 2
февраля 2023. URL: https://skillbox.ru/media/code/chto-takoe-massiv-i-kak-on-
ustroen/ (Дата обращения: 12.10.2023)
3. Metanit.com – Сайт о программировании // Массивы C#. 10
ноября 2021. URL: https://metanit.com/sharp/tutorial/2.4.php (Дата обращения:
18.10.2023)
28
Приложение А
29