Kolekcje i algorytmy (Generics)

Przykład: Lista - losowanie Lotto

using System;
using System.Collections.Generic;
 
namespace Lotto
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> lista = new List<int>();
            for (int i = 1; i <= 49; i++) lista.Add(i);
            Console.WriteLine("Zawartośc kolekcji");
            foreach (int i in lista) Console.Write("{0} ", i);
 
            Console.WriteLine("\n\nSize={0} Capacity={1}", lista.Count, lista.Capacity);
 
            Console.Write("Losowanie Lotto: ");
            Shuffle<int>(lista);
 
            for (int i = 0; i < 6; i++) Console.Write("{0} ", lista[i]);
            Console.WriteLine();
 
            lista.Sort();
        }
 
        public static void Shuffle<T>(List<T> sequence)
        {            
            Random random = new Random();
            for (int i = 0; i < sequence.Count; i += 1)
            {
                int swapIndex = random.Next(sequence.Count);
                if (swapIndex != i)
                {
                    T tmp = sequence[i];
                    sequence[i] = sequence[swapIndex];
                    sequence[swapIndex] = tmp;
                }
            }
        }
    }
}

Przykład: Dictionary (słownik)

using System;
using System.Collections.Generic;
 
namespace Dictionary
{
    class Program
    {
        static void Main(string[] args)
        {
            string line;
            SortedDictionary<string, int> slownik = new SortedDictionary<string, int>();
 
            while ((line = Console.ReadLine()) != null)
            {
                if (!slownik.ContainsKey(line)) slownik.Add(line,1);
                else slownik[line]++;
            }
 
            foreach (KeyValuePair<string, int> kvp in slownik)
                Console.WriteLine("{0} {1}", kvp.Key, kvp.Value);
        }
    }
}

Utwórz klasę reprezentującą listę płac w firmie. Do listy płac można dodać dowolną ilość pracowników, listę można wydrukować na ekranie, zapisać do pliku oraz posortować względem wysokości pensji. Wykorzystaj w tym celu klasy pochodzące z rozwiązania zadania Firma z poprzednich zajęć.

Klasa udostępnia następujące operacje:

  • metodę pozwalającą dodać nowego pracownika do listy
  • przeciążoną metodę ToString() zwracająca tekst zawierający listę płac. W każdym wierszu tekstu znajduje się wpis dotyczący pojedynczego pracownika: numer porządkowy, imię, nazwisko oraz wysokość pensji.
  • metodę pozwalającą posortować listę względem wysokości pensji, od najwyższej do najniższej.
    Kolejność ta powinna być widoczna po wywołaniu metody ToString(). Sortowanie kolekcji wymaga utworzenie delegata realizującego porównanie Comparison lub obiektu implementującego interfejs IComparer.
  • konstruktor domyślny
  • konstruktor pozwalający zainicjować listę płac dowolną kolekcją (enumerowalną) zawierającą obiekty związane z pracownikami
  • metodę pozwalającą zapisać listę w postaci tekstowej do pliku o nazwie danej w argumencie metody
  • klasa reprezentująca listę płac implementuje interfejs IEnumerable<T>, pozwalając na iterowanie po kolejnych pracownikach umieszczonych na liście.

Zaimplementuj klasę o nazwie Wykres realizującą dwuwymiarowy układ współrzędnych. Wykres przechowuje zbiór figur zaimplementowanych na poprzednich zajęciach. Klasa ta stanowi więc pojemnik do którego możemy dodać dowolną liczbę punktów, kół oraz trójkątów. Do przechowywania figur użyj wybranej kolekcji z przestrzeni nazw System.Collections.Generic.
Dla obiektu reprezentującego wykres zaimplementuj:

  • konstruktor domyślny
  • konstruktor przyjmujący jako argument tablicę figur
    • [dla zaawansowanych] konstruktor przyjmujący jako argument dowolną kolekcję figur
  • metodę Clone() tworzącą kopię obiektu (interfejs IClonable)
  • metodę pozwalającą dodawać figury do wykresu
  • własność LiczbaFigur do odczytu liczby przechowywanych w kolekcji figur
  • zaimplementuj metodę dającą dostęp do elementu wykresu o podanym indeksie
    • [dla zaawansowanych] indekser dający dostęp do figury o podanym indeksie
  • dociąż metodę ToString() umieszczającą w łańcuchu znakowym informacje o wszystkich elementach umieszczonych na wykresie
  • W klasie reprezentującej wykres zaimplementuj metodę Sort(), która posortuje kolekcję figur na wykresie w rosnącym porządku ze względu na wartość obwodu.
    Kolejność ta powinna być widoczna po wywołaniu metody ToString(). Sortowanie kolekcji wymaga utworzenie delegata realizującego porównanie Comparison lub obiektu implementującego interfejs IComparer.
  • Niech klasa reprezentująca wykres implementuje interfejs IEnumerable<T>.