Advertisement
renurtt

CW_module3

Mar 20th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.60 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Module3_sem7
  4. {
  5.     /// <summary>
  6.     /// Обобщенный интерфейс множества
  7.     /// </summary>
  8.     /// <typeparam name="T"></typeparam>
  9.     public interface ISet<T>
  10.     {
  11.         void Add(T val);
  12.         void Remove(T val);
  13.         T max();
  14.         int Length { get; set; }
  15.         bool this[T value] { get; }
  16.     }
  17.     /// <summary>
  18.     /// Обобщенный класс множества
  19.     /// </summary>
  20.     /// <typeparam name="T">Тип, который можно сравнивать</typeparam>
  21.     public class MySet<T> : ISet<T> where T : IComparable<T>
  22.     {
  23.         /// <summary>
  24.         /// Массив, хранящий множество
  25.         /// </summary>
  26.         private T[] set = new T[1];
  27.  
  28.         /// <summary>
  29.         /// Добавляет элемент в конец множества
  30.         /// </summary>
  31.         /// <param name="val">Добавляемый элемент</param>
  32.         public void Add(T val)
  33.         {
  34.             if (!this[val])
  35.             {
  36.                 if (Length == set.Length)
  37.                     Array.Resize(ref set, set.Length * 2);
  38.                 set[Length] = val;
  39.                 Length += 1;
  40.             }
  41.         }
  42.  
  43.         /// <summary>
  44.         /// Удаляет элемент из множества
  45.         /// </summary>
  46.         /// <param name="val">Удаляемый элемент</param>
  47.         public void Remove(T val)
  48.         {
  49.             if (this[val])
  50.             {
  51.                 bool isRemoved = false;
  52.                 for (int i = 0; i < Length; i++)
  53.                 {
  54.                     if (set[i].CompareTo(val) == 0)
  55.                     {
  56.                         set[i] = default(T);
  57.                         Length -= 1;
  58.                         isRemoved = true;
  59.                     }
  60.                     else if (isRemoved)
  61.                     {
  62.                         set[i - 1] = set[i];
  63.                         set[i] = default(T);
  64.                     }
  65.                 }
  66.             }
  67.         }
  68.  
  69.         /// <summary>
  70.         /// Находит максимальный элемент во множестве
  71.         /// </summary>
  72.         /// <returns>максимальный элемент во множестве</returns>
  73.         public T max()
  74.         {
  75.             T max = set[0];
  76.             for (int i = 0; i < Length; i++)
  77.             {
  78.                 if (set[i].CompareTo(max) == 1) max = set[i];
  79.             }
  80.  
  81.             return max;
  82.         }
  83.  
  84.         /// <summary>
  85.         /// Длина множества (количество элементов)
  86.         /// </summary>
  87.         public int Length { get; set; }
  88.  
  89.         /// <summary>
  90.         /// Определяет, присутствует ли элемент value во множестве
  91.         /// </summary>
  92.         /// <param name="value">Проверяемый объект</param>
  93.         public bool this[T value]
  94.         {
  95.             get
  96.             {
  97.                 for (int i = 0; i < Length; i++)
  98.                 {
  99.                     if (set[i].CompareTo(value) == 0) return true;
  100.                 }
  101.  
  102.                 return false;
  103.             }
  104.         }
  105.  
  106.         /// <summary>
  107.         /// Информация о множестве
  108.         /// </summary>
  109.         /// <returns>Все элементы через пробел</returns>
  110.         public override string ToString()
  111.         {
  112.             string n = "";
  113.             for (int i = 0; i < Length; i++)
  114.             {
  115.                 n += set[i]+" ";
  116.             }
  117.             return n;
  118.         }
  119.     }
  120.  
  121.     internal class Program
  122.     {
  123.         private static Random rnd = new Random();
  124.  
  125.         public static void Main(string[] args)
  126.         {
  127.             //Создаем множество
  128.             var mySet = new MySet<int>();
  129.             int n = GetInt("n");
  130.             int a = GetInt("a");
  131.             int b = GetInt("b");
  132.            
  133.             //Добавляем элементы во множество
  134.             for (int i = 0; i < n; i++)
  135.             {
  136.                 mySet.Add(rnd.Next(a, b));
  137.             }
  138.  
  139.             //Печатаем количество элементов во множестве
  140.             Console.WriteLine("Количество элементов во множестве: " + mySet.Length);
  141.  
  142.             //Печатаем инфо о каждом числе из [a,b) входит ли оно во множество
  143.             for (int i = a; i < b; i++)
  144.             {
  145.                 Console.WriteLine(i.ToString() +
  146.                                   (mySet[i] ? "" : " не") +
  147.                                   " входит во множество.");
  148.             }
  149.  
  150.             //Печатаем все множество и его максимальный элемент
  151.             Console.WriteLine("Вот всё множество: \n" + mySet);
  152.             Console.WriteLine("Максимальный элемент: " + mySet.max());
  153.         }
  154.  
  155.         /// <summary>
  156.         /// Запрашивает у пользователя целое число, парсит его
  157.         /// </summary>
  158.         /// <returns>Целое число</returns>
  159.         private static int GetInt(string s)
  160.         {
  161.             int i;
  162.             Console.WriteLine($"Введите целое число {s}:");
  163.             while (!int.TryParse(Console.ReadLine(), out i))
  164.             {
  165.                 Console.WriteLine("Повторите ввод!");
  166.             }
  167.  
  168.             return i;
  169.         }
  170.     }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement