
осень / котлин2
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Старший преподаватель |
|
|
|
В.И. Ушаков |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ПРАКТИЧЕСКОЙ РАБОТЕ №2 |
РАЗРАБОТКА КЛАССОВ, НАСЛЕДОВАНИЕ, ПОЛИМОРФИЗМ |
по курсу: Разработка мобильных приложений. Основы языка программирования Kotlin |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ гр. № |
4116 |
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2023
Задание
Вариант 38
Определить класс Множество символов. Реализовать методы для определения принадлежности заданного элемента множеству; пересечения, объединения, разности двух множеств. Создать методы сложения, вычитания, умножения (пересечения), индексирования, присваивания. Создать массив объектов и передавать пары объектов в метод другого класса, который строит множество, состоящее из элементов, входящих только в одно из-заданных множеств.
Листинг кода:
class МножествоСимволов {
private val множество = mutableSetOf<Char>()
// Метод для добавления символа в множество
fun добавление(el: Char) {
множество.add(el)
}
// Метод для проверки наличия символа в множестве
fun содержит(el: Char): Boolean {
return множество.contains(el)
}
// Метод для вычисления пересечения двух множеств
fun пересечение(второеМножество: МножествоСимволов): МножествоСимволов {
val result = МножествоСимволов()
for (el in множество) {
if (второеМножество.содержит(el)) {
result.добавление(el)
}
}
return result
}
// Метод для вычисления объединения двух множеств
fun объединение(второеМножество: МножествоСимволов): МножествоСимволов {
val result = МножествоСимволов()
result.множество.addAll(this.множество)
result.множество.addAll(второеМножество.множество)
return result
}
// Метод для вычисления разности двух множеств
fun разность(второеМножество: МножествоСимволов): МножествоСимволов {
val result = МножествоСимволов()
for (el in множество) {
if (!второеМножество.содержит(el)) {
result.добавление(el)
}
}
return result
}
// Перегруженный оператор для вычисления пересечения множеств.
operator fun times(второеМножество: МножествоСимволов): МножествоСимволов {
return пересечение(второеМножество)
}
// Перегруженный оператор для вычисления объединения множеств.
operator fun plus(второеМножество: МножествоСимволов): МножествоСимволов {
return объединение(второеМножество)
}
// Перегруженный оператор для вычисления разности множеств.
operator fun minus(второеМножество: МножествоСимволов): МножествоСимволов {
return разность(второеМножество)
}
// Метод для доступа к символу по индексу в множестве
operator fun get(index: Int): Char? {
return if (index in 0 until множество.size) множество.elementAt(index) else null
}
// Метод для присваивания символа по индексу в множестве
operator fun set(index: Int, el: Char) {
if (index in 0 until множество.size) {
val элементы = множество.toMutableList()
элементы[index] = el
множество.clear()
множество.addAll(элементы)
}
}
fun getМножество(): Set<Char> {
return множество.toSet()
}
//переопределение метода toString() для возращения строкового представления множества
override fun toString(): String {
return множество.toString()
}
}
class НовоеМножество {
//Метод для создания нового множества из уникальных символов, входящих только в одно из заданных множеств
fun построитьМножество(пары: Array<Pair<МножествоСимволов, МножествоСимволов>>): МножествоСимволов {
val новоеМножество = mutableSetOf<Char>()
for ((первое, второе) in пары) {
for (el in первое.getМножество()) {
if (!второе.содержит(el) && !новоеМножество.contains(el)) {
новоеМножество.add(el)
}
}
for (el in второе.getМножество()) {
if (!первое.содержит(el) && !новоеМножество.contains(el)) {
новоеМножество.add(el)
}
}
}
val result = МножествоСимволов()
for (el in новоеМножество) {
result.добавление(el)
}
return result
}
}
fun main() {
val множество1 = МножествоСимволов()
множество1.добавление('А')
множество1.добавление('Б')
множество1.добавление('В')
val множество2 = МножествоСимволов()
множество2.добавление('Б')
множество2.добавление('В')
множество2.добавление('Г')
println("Множество 1: $множество1")
println("Множество 2: $множество2")
val пересечениеМножеств = множество1 * множество2
println("Пересечение: $пересечениеМножеств")
val объединениеМножеств = множество1 + множество2
println("Объединение: $объединениеМножеств")
val разностьМножеств1 = множество1- множество2
println("Разность1: $разностьМножеств1")
val разностьМножеств2 = множество2- множество1
println("Разность2: $разностьМножеств2")
println("Второй элемент множества1: ${множество1[1]}")
множество2[1] = 'А'
println("Множество2 после присваивания: $множество2")
val пары = arrayOf(Pair(множество1, множество2))
val new = НовоеМножество()
val результат = new.построитьМножество(пары)
println("Множество из элементов, входящих только в одно из заданных множеств: $результат")
}
Результат работы программы:
Рисунок 1- результат работы программы
Рисунок 2- результат работы программы для других данных
Вывод: в ходе выполнения практической работы была написана программа, которая позволяет работать с множествами, создан класс МножествоСимволов, написан метод добавления элементов в множество; метод, определения принадлежности заданного элемента множеству, методы для вычисления пересечения, объединения и разности двух множеств, также перегруженные операторы вычитания, умножения и сложения; метод для доступа к символу по индексу в множестве; метод для присваивания символа по индексу в множестве; метод для создания нового множества из уникальных символов из других множеств.