Advertisement
patryk

[PW] Lab 4 (23-03-2016), Lab 5 (30-03-2016), Lab 6, Lab7

Mar 23rd, 2016
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.53 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. using System.Globalization;
  8.  
  9.  
  10. namespace ConsoleApplication2
  11. {
  12.     public static class Extensions
  13.     {
  14.         public static IEnumerable<T> BelowAverage<T>(this IEnumerable<T> collection, Func<T, double> func)
  15.         {
  16.             List<T> l = new List<T>();
  17.             var avg = collection.Average(func);
  18.  
  19.             foreach (var i in collection)
  20.             {
  21.                 if (func(i) < avg) l.Add(i);
  22.             }
  23.             return l;
  24.         }
  25.     }
  26.  
  27.     class Program
  28.     {
  29.         static void Main(string[] args)
  30.         {
  31.             string _path = "C:\\Users\\inf117288\\Desktop\\tabele\\";
  32.             var zespoly = from l in File.ReadAllLines(_path + "ZESPOLY.csv").Skip(1)
  33.                           let x = l.Split(';')
  34.                           select new
  35.                           {
  36.                               ID_ZESP = int.Parse(x[0]),
  37.                               NAZWA = x[1],
  38.                               ADMINISTRACJA = x[2]
  39.                           };
  40.             var etaty = from l in File.ReadAllLines(_path + "ETATY.csv").Skip(1)
  41.                         let x = l.Split(';')
  42.                         select new
  43.                         {
  44.                             NAZWA = x[0],
  45.                             PLACA_MIN = double.Parse(x[1]),
  46.                             PLACA_MAX = double.Parse(x[2])
  47.                         };
  48.             var pracownicy = from l in File.ReadAllLines(_path + "PRACOWNICY.csv").Skip(1)
  49.                              let x = l.Split(';')
  50.                              select new
  51.                              {
  52.                                  ID_PRAC = int.Parse(x[0]),
  53.                                  NAZWISKO = x[1],
  54.                                  ETAT = x[2],
  55.                                  ID_SZEFA = x[3] != "NULL" ? (new Nullable<int>(int.Parse(x[3]))) : (null),
  56.                                  ZATRUDNIONY = DateTime.ParseExact(x[4], "dd-MM-yy", CultureInfo.InvariantCulture),
  57.                                  PLACA_POD = double.Parse(x[5]),
  58.                                  PLACA_DOD = (x[6] != "NULL") ? new Nullable<double>(double.Parse(x[6])) : (null),
  59.                                  ID_ZESP = int.Parse(x[7])
  60.                              };
  61.  
  62.             /* var g = from p in pracownicy
  63.                            let z = p.PLACA_POD + (p.PLACA_DOD ?? 0)
  64.                            orderby z descending
  65.                            select new
  66.                            {
  67.                                x = p.NAZWISKO,
  68.                                y = z
  69.                            };
  70.               g.ToList().ForEach(x => Console.WriteLine(x));*/
  71.  
  72.             /*  var g = from p in pracownicy    
  73.                       group p by p.ID_ZESP into q
  74.                       join z in zespoly on q.Key equals z.ID_ZESP
  75.                       select new
  76.                       {
  77.                           x = z.NAZWA,
  78.                           List = q.ToList().Count
  79.                       };
  80.  
  81.               g.ToList().ForEach(x => {
  82.                   Console.WriteLine(x.x + ": " + x.List);
  83.               });*/
  84.  
  85.             /*
  86.             var g = from p in pracownicy
  87.                     let placa_s = (from pr in pracownicy select pr.PLACA_POD).Average()
  88.                     where (p.PLACA_POD > placa_s)
  89.                     select p;
  90.  
  91.             g.ToList().ForEach(x =>
  92.             {
  93.                 Console.WriteLine(x);
  94.             });*/
  95.  
  96.  
  97.             //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  98.  
  99.             /*  ZAD 1 Wypisać ID_PRAC i NAZWISKO */
  100.             /*var q = pracownicy.Select(p => new { p.ID_PRAC, p.NAZWISKO  });
  101.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  102.            
  103.  
  104.             /* ZAD 2 Wypisać osoby tych co mają PLAC_POD > 400 */
  105.             /*var q = pracownicy.Where(p => p.PLACA_POD > 400);
  106.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  107.  
  108.  
  109.             /* ZAD 3 Posortuj elementy z kolekcji po PLACA_POD + PLACA_DOD */
  110.             /*var q = pracownicy
  111.                 .OrderByDescending(p => p.PLACA_POD + (p.PLACA_DOD ?? 0))
  112.                 .Select(p => new {Nazwisko = p.NAZWISKO, Placa = p.PLACA_POD + (p.PLACA_DOD ?? 0)})
  113.                 .Distinct()            
  114.                 .ToArray();
  115.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  116.  
  117.  
  118.             /* ZAD 4 Wykonaj to samo, upraszczając zapis */
  119.             /*var q = pracownicy
  120.                 .Select(p => new { Nazwisko = p.NAZWISKO, Placa = p.PLACA_POD + (p.PLACA_DOD ?? 0)})
  121.                 .OrderByDescending(p => p.Placa)
  122.                 .Distinct()
  123.                 .ToArray();
  124.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  125.  
  126.  
  127.             /* ZAD 5 Wypisać ilu pracowników ma nazwisko zaczynające się na daną literę */
  128.             /*var q = pracownicy
  129.                 .GroupBy(p => p.NAZWISKO.First())
  130.                 .Select(p => new { l = p.Key, Ile = p.Count() });
  131.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  132.  
  133.  
  134.             /* ZAD 6 Znajdź ilu pracowników jest w danym zespole i wypisz jego nazwę */
  135.             /*var q = pracownicy
  136.                 .GroupBy(p => p.ID_ZESP)
  137.                 .Join(zespoly, p => p.Key, z => z.ID_ZESP, (p, z) => new { p, z })
  138.                 .Select(y => new {nazwa = y.z.NAZWA, ile = y.p.Count()});
  139.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  140.  
  141.  
  142.             /* ZAD 7 Wypisz takich pracowników co mają płacę podstawową powyżej średniej wszystkich pracowników */
  143.             /*var q = pracownicy
  144.                 .SelectMany(p1 => pracownicy.Where(p2 => p2.PLACA_POD > pracownicy.Select(p3 => p3.PLACA_POD).Average()), (p1, p2) => new { p1, p2 })
  145.                 .Select(p => new { p.p2.NAZWISKO, p.p2.PLACA_POD })
  146.                 .Distinct();
  147.              *
  148.              * ALTERNATIVE *
  149.              *
  150.              var q = pracownicy.Where(x => x.PLACA_POD > (pracownicy.Select(p => p.PLACA_POD).Average())).Select(x => x.NAZWISKO);
  151.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  152.  
  153.             //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  154.            
  155.             /* ZAD 1 Wartość średniej pensji wszystkich szefów i odjąć od niej średnią płacę wszystkich podwładnych */
  156.             /*var s1 = pracownicy.Where(p => pracownicy.Where(d => d.ID_SZEFA == p.ID_PRAC).Count() > 0).Average(p => p.PLACA_POD);
  157.             var s2 = pracownicy.Where(p => p.ID_SZEFA != null).Average(p => p.PLACA_POD);
  158.             Console.WriteLine(s1 - s2);
  159.              */
  160.  
  161.             /* ZAD 2 Dla każdego zespołu podaj różnicę między drugim najlepiej zarabiającym pracownikiem tego zespołu, a drugim najgorzej zarabiającym pracownikiem tego zespołu */
  162.             /*var zm1 = pracownicy.GroupBy(p => p.ID_ZESP).Select(x => new { x.Key, roznica = (x.OrderByDescending(z => z.PLACA_POD).Select(a => a.PLACA_POD).ElementAtOrDefault(1) - x.OrderBy(z => z.PLACA_POD).Select(a => a.PLACA_POD).ElementAtOrDefault(1)) });
  163.  
  164.             foreach (var e in zm1)
  165.             {
  166.                 Console.WriteLine(e.Key + " " + e.roznica);
  167.             }*/
  168.  
  169.             /* ZAD 3  Metoda rozszerzająca isPalindrom sprawdzajaca, czy dany ciag jest palindromem */
  170.             /* MUSI BYC W NAMESPACE ŻEBY DZIAŁAŁO
  171.             public static class Extensions
  172.             {
  173.                 public static bool isPalindrom(this String str)
  174.                 {
  175.                     return str.SequenceEqual(str.Reverse());
  176.                 }
  177.             }
  178.                
  179.             Console.WriteLine("kajaka".isPalindrom());
  180.             */
  181.  
  182.             /*
  183.             public static class Extensions
  184.             {
  185.                 public static bool isPalindrom <T> (this IEnumerable<T> collection)
  186.                 {
  187.                     int dl = collection.Count();
  188.                     --dl;
  189.  
  190.                     for (int i = 0; i < dl / 2; i++)
  191.                         if (!collection.ElementAt(i).Equals(collection.ElementAt(dl - i))) return false;
  192.                     return true;
  193.                 }
  194.             }
  195.              *
  196.              *
  197.             char[] list = new char[5];
  198.             list[0] = 'K';
  199.             list[1] = 'A';
  200.             list[2] = 'J';
  201.             list[3] = 'A';
  202.             list[4] = 'K';
  203.  
  204.             int[] list2 = new int[3];
  205.             list2[0] = 1;
  206.             list2[1] = 0;
  207.             list2[2] = 1;
  208.  
  209.             Console.WriteLine(list2.isPalindrom());*/
  210.  
  211.     //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  212.    
  213.             /* ZAD 1 Zwróć dominantę z dowolnej kolekcji */
  214.             /*
  215.             public static class Extensions
  216.             {
  217.                 public static T findDominant <T> (this IEnumerable<T> collection)
  218.                 {
  219.                     int dl = collection.Count();
  220.                     if (dl == 0) return default(T);
  221.                     int top = 0;
  222.                     int topIdx = 0;
  223.  
  224.                     for (int i = 0; i < dl; i++)
  225.                     {
  226.                         int wystapil = 0;
  227.                         for (int j = 0; j < dl; j++)
  228.                         {
  229.                             if (collection.ElementAt(j).Equals(collection.ElementAt(i)))
  230.                             {
  231.                                 wystapil++;
  232.                             }
  233.                             if (wystapil > top)
  234.                             {
  235.                                 top = wystapil;
  236.                                 topIdx = i;
  237.                             }
  238.                         }
  239.                     }
  240.  
  241.                     return collection.ElementAt(topIdx);
  242.                 }
  243.             }*/
  244.  
  245.             /* ZAD 2 To samo co wyżej, tym razem z wykorzystaniem slownika, zlozonosc O(nlogn) a nie O(n^3) jak wczesniej */
  246.             /*
  247.             public static class Extensions
  248.             {
  249.                     public static T findDominant <T> (this IEnumerable<T> collection)
  250.                     {
  251.                         int len = collection.Count();
  252.                         if (len == 0) return default(T);
  253.            
  254.                         Dictionary<T, int> dict = new Dictionary<T,int>();
  255.  
  256.                         for (int i = 0; i < len; i++)
  257.                         {
  258.                             if (dict.ContainsKey(collection.ElementAt(i)))
  259.                             {
  260.                                 dict[collection.ElementAt(i)] += 1;
  261.                             }
  262.                             else
  263.                             {
  264.                                 dict.Add(collection.ElementAt(i), 1);
  265.                             }
  266.                         }
  267.                         return dict.Keys.Max();
  268.                     }
  269.             }
  270.             char[] list = new char[5];
  271.             list[0] = 'K';
  272.             list[1] = 'A';
  273.             list[2] = 'K';
  274.             list[3] = 'A';
  275.             list[4] = 'K';
  276.  
  277.             Console.WriteLine(list.findDominant());
  278.              */
  279.  
  280.             /* ZAD 3 ZNAJDZ DOMINUJACY ETAT W DANYM ZESPOLE */
  281.             /*var q = pracownicy
  282.                 .GroupBy(p => p.ID_ZESP)
  283.                 .Select(x => new { x.Key, etat = pracownicy.Select(p2 => p2.ETAT).findDominant() });
  284.  
  285.             q.ToList().ForEach(x => Console.WriteLine(x));*/
  286.  
  287.             /* ZAD 4 STWORZ METODE ROZSZERZAJACA KTORA ZWROCI KOLEKCJE ELEMENTOW PONIZEJ SREDNIEJ */
  288.             /*public static class Extensions
  289.             {
  290.                 public static IEnumerable<T> BelowAverage<T>(this IEnumerable<T> collection, Func<T, double> func)
  291.                 {
  292.                     List<T> l = new List<T>();
  293.                     var avg = collection.Average(func);
  294.  
  295.                     foreach (var i in collection)
  296.                     {
  297.                         if (func(i) < avg) l.Add(i);
  298.                     }
  299.                     return l;
  300.                 }
  301.             } */
  302.  
  303.             /* ALTERNATYWNIE   BY KRZYSZTOF PRICE */
  304.             /*public static class Extensions
  305.             {
  306.                 public static IEnumerable<T> BelowAverage<T>(this IEnumerable<T> collection, Func<T, double> func)
  307.                 {
  308.                     return collection.Where(x => func(x) < collection.Average(func));
  309.                 }
  310.             }*/
  311.  
  312.         }
  313.     }
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement