LINQ w Microsoft Visual Basic zadania Zestaw danych: Dim tabl() As Integer = {-1, -2, 0, 1, 2, 3} 1. Wyświetlić wszystkie liczby zawarte w tablicy tabl(). For Each x In tabl 2. Wyświetlić wyłącznie liczby ujemne zawarte w tablicy tabl(). For Each x In From w In tabl Where w < 0 3. Wyświetlić rosnąco liczby ujemne zawarte w tablicy tabl(). For Each x In From w In tabl Where w < 0 Order By w 4. Wyświetlić wszystkie liczby dodatnie zawarte w tablicy tabl() w porządku malejącym. For Each x In From w In tabl Where w >= 0 Order By w Descending 5. Obliczyć sumę wszystkich liczb zawartych w tablicy tabl(). Console.WriteLine(tabl.Sum) 6. Obliczyć sumę wszystkich liczb dodatnich zawartych w tablicy tabl(). Console.WriteLine(tabl.Where(Function(p) p >= 0).Sum) 7. Obliczyć sumę wszystkich liczb parzystych dodatnich zawartych w tablicy tabl(). Console.WriteLine(tabl.Where(Function(p) p >= 0 And p Mod 2 = 0).Sum)
lub Console.WriteLine(Aggregate p In tabl Where p >= 0 And p Mod 2 = 0 Into suma = Sum()) lub Console.WriteLine((From x In tabl Where x >= 0 And x Mod 2 = 0).Sum) 8. Wyświetlić wszystkie liczby z tablicy tabl() z wyjątkiem najmniejszej (najmniejszych) i największej (największych). For Each x In From w In tabl Where w > tabl.min And w < tabl.max 9. Wyświetlić wartości bezwzględne liczb zawartych w tablicy tabl(). For Each x In From w In tabl Select Math.Abs(w) 10. Obliczyć wartość średnią z liczb dodatnich zawartych w tablicy tabl(). Console.WriteLine(tabl.Where(Function(x) x >= 0).Average) 11. Obliczyć liczbę unikatowych wartości w kolekcji tabl(). Console.WriteLine(tabl.Distinct.Count)
Zestaw danych: Dim tabl1() As Integer = {-1, -2, 0, 1, 2, 3} Dim tabl2() As Integer = {6, 3, 1, 0, -1, 3} 12. Wyświetlić zawartość tablic tabl1() i tabl2(). For Each x In tabl1.concat(tabl2) 13. Wyświetlić wartości unikatowe (bez powtórzeń) z tablic tabl1() i tabl2(). For Each x In tabl1.union(tabl2) 14. Wyświetlić wartości wspólne dla obu tablic. For Each x In tabl1.intersect(tabl2) 15. Obliczyć ile jest wartości wspólnych dla obu tablic. Console.WriteLine(tabl1.Intersect(tabl2).Count) 16. Obliczyć sumę wartości ujemnych zawartych w tablicach tabl1() i tabl2(). Console.WriteLine(tabl1.Concat(tabl2).Where(Function(x) x < 0).Sum) 17. Wyświetlić wartości różne (nie wspólne) zawarte w tablicach tabl1() i tabl2(). For Each x In tabl1.concat(tabl2).except(tabl1.intersect(tabl2)) Zestaw danych: Dim tablica_liczb() As Integer = {-1, -2, 0, 1, 2, 3} Dim tablica_ciagow() As String = {"6", "3", "1", "0", "-1", "3"}
18. Wyświetlić wspólne wartości liczbowe dla obu tablic. For Each x In tablica_liczb.intersect(tablica_ciagow.select(function(p) Convert.ToInt32(p))) 19. Obliczyć sumę wartości liczbowych dodatnich zawartych w tablicy tablica_ciagow(). Console.WriteLine(tablica_ciagow.Select(Function(p) Convert.ToDouble(p)).Where(Function(p) p >= 0).Sum)
Zestaw danych: Structure liczby_opisy Dim liczba As Integer Dim opis As String End Structure Function dodaj_opis(liczba As Integer, opis As String) As liczby_opisy Dim lopis As liczby_opisy With lopis.liczba = liczba.opis = opis End With Return lopis End Function Sub oblicz() Dim liczby() As Integer = {0, 1, 2, 3, 9} Dim opisy As New List(Of liczby_opisy) opisy.addrange({dodaj_opis(0, "zero"), dodaj_opis(1, "jeden"), dodaj_opis(2, "dwa"), dodaj_opis(3, "trzy"), dodaj_opis(4, "cztery"), dodaj_opis(5, "pięć"), dodaj_opis(6, "sześć"), dodaj_opis(7, "siedem"), dodaj_opis(8, "osiem"), dodaj_opis(9, "dziewięć")}) End Sub 20. Napisz zapytanie LINQ w procedurze oblicz() zwracające liczby i ich opisy na bazie zawartości powyższych kolekcji. For Each x In From liczba In liczby Join opis In opisy On liczba Equals opis.liczba Select wartosc = liczba, opis_slowny = opis.opis Console.WriteLine(x.wartosc & " => " & x.opis_slowny) 21. Napisz zapytanie LINQ w procedurze oblicz() zwracające parzyste liczby i ich opisy na bazie zawartości powyższych kolekcji. For Each x In From liczba In liczby Join opis In opisy On liczba Equals opis.liczba Select wartosc = liczba, opis_slowny = opis.opis Where wartosc Mod 2 = 0 Console.WriteLine(x.wartosc & " => " & x.opis_slowny)
22. Napisz zapytanie LINQ w procedurze oblicz() zwracające parzyste liczby i ich opisy na bazie zawartości powyższych kolekcji posortowane względem wartości liczbowych malejąco. For Each x In From liczba In liczby Join opis In opisy On liczba Equals opis.liczba Select wartosc = liczba, opis_slowny = opis.opis Where wartosc Mod 2 = 0 Order By wartosc Descending Console.WriteLine(x.wartosc & " => " & x.opis_slowny)
Zestaw danych: Dim wyrazy As String = "Ala MA kota i Ala ma psa" 23. Wyświetlić statystykę występowania wyrazów w zdaniu powyżej (bez rozróżniania wielkości liter). For Each x In From y In (From t In wyrazy.tolower.split(" ").Distinct) Select termin = y, ile = (From p In wyrazy.split(" ") Where p.tolower = y.tolower).count Console.WriteLine(x.termin & " => " & x.ile) Console.WriteLine("========= lub =========") For Each x In From y In wyrazy.split(" ") Group By y.tolower Into ile = Count() Select ile, y2 = ToLower Console.WriteLine(x.y2 & " => " & x.ile) 24. Obliczyć liczbę unikatowych wyrazów w zdaniu powyżej (bez rozróżniania wielkości liter). Console.WriteLine(wyrazy.ToLower.Split(" ").Distinct.Count) Zestaw danych: Dim pola_kw() As Integer = {3, 4, 5, 10, 12, 4, 1} Dim pola_tr() As Integer = {5, 1, 9, 8, 10} 25. Napisać program, który obliczy ile jest pól trójkątów, których wartość nie jest większa od średniej wartości pól o wartości parzystej z kolekcji pól kwadratów Dim k As Double = pola_tr.where(function(p) p <= (pola_kw.where(function(x) x Mod 2 = 0).Average)).Count
Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Kraków 2014