Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace Module3_sem7
- {
- /// <summary>
- /// Обобщенный интерфейс множества
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public interface ISet<T>
- {
- void Add(T val);
- void Remove(T val);
- T max();
- int Length { get; set; }
- bool this[T value] { get; }
- }
- /// <summary>
- /// Обобщенный класс множества
- /// </summary>
- /// <typeparam name="T">Тип, который можно сравнивать</typeparam>
- public class MySet<T> : ISet<T> where T : IComparable<T>
- {
- /// <summary>
- /// Массив, хранящий множество
- /// </summary>
- private T[] set = new T[1];
- /// <summary>
- /// Добавляет элемент в конец множества
- /// </summary>
- /// <param name="val">Добавляемый элемент</param>
- public void Add(T val)
- {
- if (!this[val])
- {
- if (Length == set.Length)
- Array.Resize(ref set, set.Length * 2);
- set[Length] = val;
- Length += 1;
- }
- }
- /// <summary>
- /// Удаляет элемент из множества
- /// </summary>
- /// <param name="val">Удаляемый элемент</param>
- public void Remove(T val)
- {
- if (this[val])
- {
- bool isRemoved = false;
- for (int i = 0; i < Length; i++)
- {
- if (set[i].CompareTo(val) == 0)
- {
- set[i] = default(T);
- Length -= 1;
- isRemoved = true;
- }
- else if (isRemoved)
- {
- set[i - 1] = set[i];
- set[i] = default(T);
- }
- }
- }
- }
- /// <summary>
- /// Находит максимальный элемент во множестве
- /// </summary>
- /// <returns>максимальный элемент во множестве</returns>
- public T max()
- {
- T max = set[0];
- for (int i = 0; i < Length; i++)
- {
- if (set[i].CompareTo(max) == 1) max = set[i];
- }
- return max;
- }
- /// <summary>
- /// Длина множества (количество элементов)
- /// </summary>
- public int Length { get; set; }
- /// <summary>
- /// Определяет, присутствует ли элемент value во множестве
- /// </summary>
- /// <param name="value">Проверяемый объект</param>
- public bool this[T value]
- {
- get
- {
- for (int i = 0; i < Length; i++)
- {
- if (set[i].CompareTo(value) == 0) return true;
- }
- return false;
- }
- }
- /// <summary>
- /// Информация о множестве
- /// </summary>
- /// <returns>Все элементы через пробел</returns>
- public override string ToString()
- {
- string n = "";
- for (int i = 0; i < Length; i++)
- {
- n += set[i]+" ";
- }
- return n;
- }
- }
- internal class Program
- {
- private static Random rnd = new Random();
- public static void Main(string[] args)
- {
- //Создаем множество
- var mySet = new MySet<int>();
- int n = GetInt("n");
- int a = GetInt("a");
- int b = GetInt("b");
- //Добавляем элементы во множество
- for (int i = 0; i < n; i++)
- {
- mySet.Add(rnd.Next(a, b));
- }
- //Печатаем количество элементов во множестве
- Console.WriteLine("Количество элементов во множестве: " + mySet.Length);
- //Печатаем инфо о каждом числе из [a,b) входит ли оно во множество
- for (int i = a; i < b; i++)
- {
- Console.WriteLine(i.ToString() +
- (mySet[i] ? "" : " не") +
- " входит во множество.");
- }
- //Печатаем все множество и его максимальный элемент
- Console.WriteLine("Вот всё множество: \n" + mySet);
- Console.WriteLine("Максимальный элемент: " + mySet.max());
- }
- /// <summary>
- /// Запрашивает у пользователя целое число, парсит его
- /// </summary>
- /// <returns>Целое число</returns>
- private static int GetInt(string s)
- {
- int i;
- Console.WriteLine($"Введите целое число {s}:");
- while (!int.TryParse(Console.ReadLine(), out i))
- {
- Console.WriteLine("Повторите ввод!");
- }
- return i;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement