Курсовая работа: Классификация структур данных языка программирования С#

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Описание класса содержит ключевое слово class, за которым следует его имя, а далее в фигурных скобках - тело класса, то есть список его элементов. Кроме того, для класса можно задать его базовые классы (предки) и ряд необязательных атрибутов и спецификаторов, определяющих различные характеристики класса:

[атрибуты] [спецификаторы ] class имя_класса [: предки ] тело_класса.

Обязательными являются только ключевое слово class, а также имя и тело класса. Тело класса - это список описаний его элементов, заключенный в фигурные скобки. Список может быть пустым, если класс не содержит ни одного элемента. Таким образом, простейшее описание класса может выглядеть так:

class Demo {}.

Спецификаторы определяют свойства класса, а также доступность класса для других элементов программы. Возможные значения спецификаторов перечислены в таблице 1.1. Класс можно описывать непосредственно внутри пространства имен или внутри другого класса. В последнем случае класс называется вложенным.

Таблица 1 - Спецификаторы класса

Спецификатор

Описание

1

new

Используется для вложенных классов. Задает новое описание класса взамен унаследованного от предка. Применяется в иерархиях объектов

2

public

Доступ не ограничен

3

protected

Используется для вложенных классов. Доступ только из элементов данного и производных классов

4

internal

Доступ только из данной программы (сборки)

5

protected internal

Доступ только из данного и производных классов или из данной программы (сборки)

6

private

Используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс

7

abstract

Абстрактный класс. Применяется в иерархиях объектов, рассматривается в главе 8

8

sealed

Бесплодный класс. Применяется в иерархиях объектов, рассматривается в главе 8

9

static

Статический класс. Введен в версию языка 2.0. Рассматривается в разделе «Конструкторы»

Программист создает экземпляр класса с помощью операции new, например:

Demo a = new Demo(); // создание экземпляра класса Demob = new Demo(); // создание другого экземпляра класса Demo.

Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся его данные. Кроме того, в классе могут присутствовать статические элементы, которые существуют в единственном экземпляре для всех объектов класса. Часто статические данные называют данными класса, а остальные - данными экземпляра.

Функциональные элементы класса не тиражируются, то есть всегда хранятся в единственном экземпляре. Для работы с данными класса используются методы класса (статические методы), для работы с данными экземпляра - методы экземпляра, или просто методы.

Ниже приведено краткое описание всех элементов класса:

- Константы класса хранят неизменяемые значения, связанные с классом.

- Поля содержат данные класса;

- Методы реализуют вычисления или другие действия, выполняемые классом или экземпляром;

- Свойства определяют характеристики класса в совокупности со способами их задания и получения, то есть методами записи и чтения;

- Конструкторы реализуют действия по инициализации экземпляров или класса в целом;

- Деструкторы определяют действия, которые необходимо выполнить до того, как объект будет уничтожен;

- Индексаторы обеспечивают возможность доступа к элементам класса по их порядковому номеру;

- Операции задают действия с объектами с помощью знаков операций;

- События определяют уведомления, которые может генерировать класс.

1.4 Структура программного модуля на С#

Программа на C# состоит из классов, внутри которых описывают методы и данные. Переменные, описанные непосредственно внутри класса, называются полями класса. Им автоматически присваивается так называемое «значение по умолчанию» - как правило, это 0 соответствующего типа. Переменные, описанные внутри метода класса, называются локальными переменными. Их инициализация возлагается на программиста.

Так называемая область действия переменной, то есть область программы, где можно использовать переменную, начинается в точке ее описания и длится до конца блока, внутри которого она описана. Блок - это код, заключенный в фигурные скобки. Основное назначение блока - группировка операторов. В C# любая переменная описана внутри какого-либо блока: класса, метода или блока внутри метода. Имя переменной должно быть уникальным в области ее действия. Область действия распространяется на вложенные в метод блоки.

1.5 Алгоритм пузырьковой сортировки

Пузырьковая сортировка - один из наиболее широко известных алгоритмов сортировки. Сущность алгоритма заключается в следующем. Мы проходим по массиву и берем из него числа парами, вот так - первое число и второе, затем второе и третье, затем третье и четвертое и т.д. и если в очередной паре последнее число меньше первого, то меняем их местами.

Если за полный проход массива не было обнаружено ни одной неправильной пары, то массив, очевидно, упорядочен и работу можно прекратить. Если была обнаружена хотя бы одна неправильная пара, то массив может быть упорядочен, а может быть и нет, но во всяком случае еще один проход не помешает. Таким образом, алгоритм пузырька представляет собой два вложенных цикла, внешний запускает очередной проход, если была обнаружена неправильная пара, а внутренний просматривает пары чисел и выполняет перестановку если это необходимо.

1.6 Сортировка Шелла

Сортировка Шелла -- алгоритм сортировки, являющийся усовершенствованным вариантом сортировки вставками. Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определённом расстоянии друг от друга. Иными словами -- это сортировка вставками с предварительными «грубыми» проходами. Аналогичный метод усовершенствования пузырьковой сортировки называется сортировка расчёской.

Принцип работы:

При сортировке Шелла сначала сравниваются и сортируются между собой значения, стоящие один от другого на некотором расстоянииd. После этого процедура повторяется для некоторых меньших значений d, а завершается сортировка Шелла упорядочиванием элементов при d= 1(то есть обычной сортировкой вставками).

Очевидно, лишь последняя сортировка необходима, чтобы расположить все элементы по своим местам. Так зачем нужны остальные?

Hа самом деле они продвигают элементы максимально близко к соответствующим позициям, так что в последней стадии число перемещений будет весьма невелико. Последовательность и так почти отсортирована. Ускорение подтверждено многочисленными исследованиями и на практике оказывается довольно существенным.

Единственной характеристикой сортировки Шелла является приращение - расстояние между сортируемыми элементами, в зависимости от прохода. В конце приращение всегда равно единице - метод завершается обычной сортировкой вставками, но именно последовательность приращений определяет рост эффективности.

Эффективность сортировки Шелла в определённых случаях обеспечивается тем, что элементы «быстрее» встают на свои места (в простых методах сортировки, например, пузырьковой, каждая перестановка двух элементов уменьшает количество инверсий в списке максимум на 1, а при сортировке Шелла это число может быть больше).

Невзирая на то, что сортировка Шелла во многих случаях медленнее, чем быстрая сортировка, она имеет ряд преимуществ:

Отсутствие потребности в памяти под стек;

Отсутствие деградации при неудачных наборах данных -- быстрая сортировка легко деградирует до O(nІ), что хуже, чем худшее гарантированное время для сортировки Шелла.

Часто оказывается, что сортировка Шелла есть самый лучший способ сортировки до, примерно, 1000 элементов.

Рис. 1 - Пример сортировки Шелла

2. Практическая часть

2.1 Выполнение задания курсовой работы

Алгоритмы пузырьковой сортировки

int[] a = new int[10];

int[] b = new int[10];

Random rnd = new Random();

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

{

a[i] = rnd.Next(1, 50);

b[i] = a[i];

Console.Write("{0} ", a[i]);

}

Console.WriteLine();

Console.WriteLine("сортировка пузырьком");

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

{

for (int j = 0; j < (a.Length - 1); j++)

{

if (b[j] > b[j + 1])

{

int tmp = b[j];

b[j] = b[j + 1];

b[j + 1] = tmp;

}

}

}

Рис. 2 - Написание кода

Рис. 3 - Консоль отладки

Алгоритм сортировки методом Шелла.

#include <stdio.h>

#include <malloc.h>

#include <conio.h>

//сортировка методом Шелла

void ShellSort(int n, int mass[])

{

int i, j, step;

int tmp;

for (step = n / 2; step > 0; step /= 2)

for (i = step; i < n; i++)

{

tmp = mass[i];

for (j = i; j >= step; j -= step)

{

if (tmp < mass[j - step])

mass[j] = mass[j - step];

else

break;

}

mass[j] = tmp;

}

}

int main()

{

//ввод N

int N;

printf("Input N: ");

scanf_s("%d", &N);

//выделение памяти под массив

int* mass;

mass = (int*)malloc(N * sizeof(int));

//ввод элементов массива

printf("Input the array elements:\n");

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

scanf_s("%d", &mass[i]);

//сортировка методом Шелла

ShellSort(N, mass);

//вывод отсортированного массива на экран

printf("Sorted array:\n");

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

printf("%d ", mass[i]);

printf("\n");

//освобождение памяти

free(mass);

_getch();

return 0;

}

#include <stdio.h>

#include <malloc.h>

#include <conio.h>

//сортировка методом Шелла

void ShellSort(int n, int mass[])

{

int i, j, step;

int tmp;

for (step = n / 2; step > 0; step /= 2)

for (i = step; i < n; i++)

{

tmp = mass[i];

for (j = i; j >= step; j -= step)

{

if (tmp < mass[j - step])

mass[j] = mass[j - step];

else

break;

}

mass[j] = tmp;

}

}

int main()

{

//ввод N

int N;

printf("Input N: ");

scanf_s("%d", &N);

//выделение памяти под массив

int* mass;

mass = (int*)malloc(N * sizeof(int));

//ввод элементов массива

printf("Input the array elements:\n");

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

scanf_s("%d", &mass[i]);

//сортировка методом Шелла

ShellSort(N, mass);

//вывод отсортированного массива на экран

printf("Sorted array:\n");

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

printf("%d ", mass[i]);

printf("\n");

//освобождение памяти

free(mass);

_getch();

return 0;

}

Рис. 4 - Написание кода

Рис. 5 - Консоль отладки

оператор сортировка алгоритм спецификатор

Заключение

При выполнении настоящей курсовой работы были освоены основные принципы разработки алгоритмов и программ, методы отладки и решения задач на ЭВМ в различных режимах. Так же были разобраны основы системного программирования и основы объектно-ориентированного подхода к программированию.

В процессе решения поставленных задач курсовой работы использовались прикладные системы программирования и необходимые методы решения заданий.

Инструментальной средой разработки программ стала MS Visual Studio 2022.

Ввиду очень удобного объектно-ориентированного дизайна, C# является хорошим выбором для быстрого конструирования различных компонентов - от высокоуровневой бизнес логики до системных приложений, использующих низкоуровневый код. Также следует отметить, что C# является и Web ориентированным - используя простые встроенные конструкции языка ваши компоненты могут быть легко превращены в Web сервисы, к которым можно будет обращаться из Internet посредством любого языка на любой операционной системе. Дополнительные возможности и преимущества перед другими языками приносит в C# использование передовых Web технологий, таких как: XML (Extensible Markup Language) и SOAP (Simple Object Access Protocol). Среда разработки Web сервисов позволяет программисту смотреть на существующие сегодня Web приложения, как на родные C# объекты, что дает возможность разработчикам соотнести имеющиеся Web сервисы с их познаниями в объектно-ориентированном программировании.

Задачи методов сортировки решены не до конца. Хотя и существует много алгоритмов сортировки, их целью является по большей части разработка не просто алгоритмов сортировки, а эффективных и быстрых алгоритмов. Одну задачу можно решить разными алгоритмами. Они меняются постоянно, и приводят к более новым и эффективным методам решения задания. К алгоритмам прилагаются определенные требования, к ним прежде всего относят время, затраченное на его выполнение, и сэкономленная память. Если следовать таким требованиям, то большинство алгоритмов сортировки являются неэффективными (сортироовка пузырьком, вставками).

Список использованной литературы

Павловская Т.А. C#. Программирование на языке высокого уровня: Учебник для вузов. - СПб.: БХВ-Петербург. 2019.

Попов И.И., Партыка Т.Л. Языки программирования: Учебное пособие. - М.: ФОРУМ: ИНФРА-М, 2018.

Голицина О.Л., Попов И.И. Основы алгоритмизации и программирования: Учебное пособие. - М.: ФОРУМ: ИНФРА-М, 2021.

Источник: https://otherreferats.allbest.ru/download/1404311/