Arkusz 2020, matura próbna

Rekurencja
Dana jest dodatnia liczba całkowita n oraz uporządkowana rosnąco tablica różnych liczb całkowitych T[1..n]. Przeanalizuj następującą funkcję rekurencyjną, której parametrami są liczby całkowite x, p, k, przy czym 1≤ p ≤ k ≤ n.

Rek(x, p, k):
jeżeli p < k
  s ← (p + k) div 2
  jeżeli T[s] ≥ x
    wynikiem jest Rek(x, p, s)
  w przeciwnym razie
    wynikiem jest Rek(x, s + 1, k)
w przeciwnym razie
  jeżeli T[p] = x
    wynikiem jest p
  w przeciwnym razie
    wynikiem jest −1

Uwaga: div jest operatorem oznaczającym część całkowitą z dzielenia.Podaj największą i najmniejszą możliwą liczbę wywołań funkcji Rek w wyniku wywołania Rek(2020, 5, 14) dla n = 17 i pewnej, uporządkowanej rosnąco tablicy T[1..17] różnych liczb całkowitych.
Uwaga: Pierwsze wywołanie funkcji Rek(2020, 5, 14) włączamy do ogólnej liczby wywołań.
Odpowiedź:
najmniejsza liczba wywołań …………………………
największa liczba wywołań …………………………
Hmm.. przy tego typu zadaniach trzeba dobrze zrozumieć algorytm. A może.. widziałeś już ten kod kiedyś? 🧐
Jest to algorytm na wyszukiwanie binarne w rekurencyjnej formie!
Polega on na tym, że dostarczamy funkcji 3 argumenty: liczbę szukaną (x w naszym przypadku), indeks początkowy tablicy (p) i indeks końcowy tablicy (k).
Cały myk polega na tym, że tablica jest dostarczona w formie posortowanej (np. 1, 2, 4, 10...), a więc jeśli wybierzemy jakąkolwiek liczbę z tej tablicy i nie będzie ona równała się szukanej, to wiemy, po której stronie jej szukać! 
Dla przykładu:
mamy tablicę A w której zapisujemy elementy [3, 5, 8, 9, 11]. Chcemy dowiedzieć się, czy 5. zawiera się w tej liście.
W tym celu poszukamy element środkowy tablicy (zmienna s) - ma on indeks 3 (numerujemy tablice od 1) i pod nim zapisana jest liczba 8. 5 na pewno jest różna od 8. I jest też od niej mniejsza. Dzięki temu, że tablica jest posortowana wiemy, że wystarczy przeszukać resztę liczb, których indeks jest mniejszy od indeksu 8., czyli przeszukujemy teraz tablicę w zakresie [3, 5]!
Drastycznie zmniejszyliśmy liczbę potencjalnych kandydatów, którzy mogliby stanowić szukaną, a więc tym samym algorytm znajdzie ją szybciej! 😎

Tyle by było z wiedzy ogólnej.. Tylko że my musimy podać "największą i najmniejszą możliwą liczbę wywołań funkcji Rek w wyniku wywołania Rek(2020, 5, 14) dla n = 17 i pewnej, uporządkowanej rosnąco tablicy T[1..17] różnych liczb całkowitych." 😥
Okej - musimy zadać sobie pytanie: od czego w głównej mierze zależy ilość wywołań funkcji?
Odpowiedzi szukamy w treści algorytmu, a dokładniej.. w wywołaniach funkcji! 🤠 Spójrzmy kiedy funkcja się wywołuje, a kiedy zwracany jest po prostu wynik:
jeżeli p < k (*)
  s ← (p + k) div 2
  jeżeli T[s] ≥ x
    wynikiem jest Rek(x, p, s) !
 w przeciwnym razie
    wynikiem jest Rek(x, s + 1, k) !
w przeciwnym razie
- [...] wynikiem jest [...]Gwiazdką oznaczyłem bardzo ważny fragment: jeśli p osiągnie wartość równą lub większą niż k, to zwróci się po prostu wynik, co zakończy wykonywanie funkcji. Musimy więc policzyć ilość wywołań (oznaczonych wykrzyknikiem) zanim p ≥ k.
Jak możemy zatem wpływać na ilość wykonań?
Poprzez wartości w tablicy T! Tylko te wartości nie są zdefiniowane, więc możemy dowolnie je modyfikować. Zauważmy, że jeśli T[s] ≥ x, przekazywana jest jako jeden z argumentów s, czyli średnia p i q. Jeśli jednak T[s] < x, to jednym z parametrów będzie s+1. To "+1" stanowi małą, ale znaczącą różnice dla naszego zadania.
Do dzieła! 🤠

A) Najmniejsza liczba wykonań:
aby uzyskać najmniej wykonań, należy dążyć do tego, żeby jak najszybciej p osiągnęło wartość k lub większą, bo wtedy nie wywoła się kolejny raz funkcja. Musimy więc wykorzystać fakt, o którym wspominaliśmy wyżej: przekazywanie "s+1" jako argument, ponieważ w dłuższej mecie zmniejszy to ilość wykonań.
Zróbmy swego rodzaju tabelkę wywołań:
1. x=2020, p=5, k=14. s=(5+14)/2=9. (zakładamy, że T[s] < x) -> wynikiem jest Rek(x, s+1, k)
2. x=2020, p=10, k=14. s=(10+14)/2=12. wynikiem jest Rek(x, s+1, k)
3. x=2020, p=13, k=14. s=(10+14)/2=12. wynikiem jest Rek(x, s+1, k)
4. x=2020, p=14, k=14. KONIEC (bo p ≥ k)
Na 4. wykonaniu skończyliśmy i to właśnie stanowi najmniejszą możliwą ilość wykonań!

B) Największa liczba wykonań:
odwrotnie do wyższego przykładu, teraz zależy nam na tym, żeby przekazywane wartości zwiększały się jak najwolniej, żeby warunek "jeżeli p < k" był przez jak najdłuższy czas prawdziwy - celujemy więc w "wynikiem funkcji jest Rek(x, p, s)". 😀
1. x=2020, p=5, k=14. s=(5+14)/2=9. (zakładamy, że T[s] ≥ x) -> wynikiem jest Rek(x, p, s)
2. x=2020, p=5, k=9. s=(5+9)/2=7. wynikiem jest Rek(x, p, s)
3. x=2020, p=5, k=7. s=(5+7)/2=6. wynikiem jest Rek(x, p, s)
4. x=2020, p=5, k=6. s=(5+6)/2=5. wynikiem jest Rek(x, p, s)
5. x=2020, p=5, k=5. KONIEC (bo p ≥ k)
Tak więc maksymalnie możemy wykonać funkcję Rek(...) 5 razy dla takich parametrów. 🥳
Rekurencja
Dana jest dodatnia liczba całkowita n oraz uporządkowana rosnąco tablica różnych liczb całkowitych T[1..n]. Przeanalizuj następującą funkcję rekurencyjną, której parametrami są liczby całkowite x, p, k, przy czym 1≤ p ≤ k ≤ n.

Rek(x, p, k):
jeżeli p < k
  s ← (p + k) div 2
  jeżeli T[s] ≥ x
    wynikiem jest Rek(x, p, s)
  w przeciwnym razie
    wynikiem jest Rek(x, s + 1, k)
w przeciwnym razie
  jeżeli T[p] = x
    wynikiem jest p
  w przeciwnym razie
    wynikiem jest −1

Uwaga: div jest operatorem oznaczającym część całkowitą z dzielenia.Podaj, jakie będą wartości parametrów przekazywanych do funkcji Rek w kolejnych jej wywołaniach dla n = 11, tablicy T = [1, 5, 8, 10, 12, 14, 19, 20, 23, 30, 38] oraz pierwszego wywołania Rek(7, 1, 11).
Hmm... Wygląda na to, że jedyne co musimy zrobić, to prześledzić kolejne wykonania! 🤠 Stwórzmy więc tabelkę, którą wykorzystywaliśmy już wiele razy przy poprzednich zadaniach:
- w pierwszej kolumnie zapiszmy przekazane parametry (x, p i k)
- w następnej pytanie: "czy p jest mniejsze od k?"
- kolejna będzie zawierać wartość zmiennej s, która jest równa "(p + k) div 2" i od razu sprawdzimy, "czy T[s] ≥ x"
- w przedostatniej znajdzie się kolejne pytanie: "czy T[p] = x?"
- w skrajnej zapiszemy wynik funkcji 
Trzeba tu jednak zaznaczyć, że niektóre kolumny czasem możemy pominąć - wynika to z formy algorytmu: np. wartość zmiennej s będzie nam niepotrzebna, jeśli p ≥ k. 😀
Pamiętajmy, że tak naprawdę to, co wykonujemy wyżej, to zwykłe śledzenie czynności, jakie wykonuje pseudokod. Polecam najpierw spróbować samemu spróbować przejść przez wszystkie fazy, aż do uzyskania wyniku, a dopiero potem zweryfikować to z poniższym rozwiązaniem, bo samym czytaniem też niewiele zdziałamy. 😅


Rozpisaliśmy więc tak naprawdę algorytm w inny sposób, możemy teraz przystąpić do naszej "symulacji wykonania algorytmu". 😎 
Dobrze jest rozpisać sobie to na kartce w formie faktycznej tabeli, ale musimy zadowolić się tutaj tym co mamy. 🙄 

Warto zapisać zawartość z tablicy i w pewien sposób poindeksować ją (pamiętając, że tutaj zaczynamy od jedynki), bo będziemy często z niej korzystać!
T = [1:1, 2:5, 3:8, 4:10, 5:12, 6:14, 7:19, 8:20, 9:23, 10:30, 11:38]
1. x=7, p=1, k=11. p < k, więc s = (1+11) div 2 = 6. T[6]=14, więc T[6] ≥ x. Wynik to Rek(x, p, s)
2. x=7, p=1, k=6. p < k, więc s=(1+6) div 2 = 3. T[3]=8, więc T[3] ≥ x. Wynik to Rek(x, p, s)
3. x=7, p=1, k=3. p < k, więc s=(1+3) div 2 = 2. T[2]=5, więc T[2] < x. Wynik to Rek(x, s+1, k)
4. x=7, p=3, k=3. p = k, więc sprawdzamy, czy T[p] = x. T[3]=8, więc T[3] =/= x. Wynik to -1

Tak oto uzyskaliśmy odpowiedzi do naszego zadania! Są nimi zapisy kolejnych wywołań (np. Rek(x, p, s)), ale nie zapominajmy o uzupełnieniu ich faktycznymi wartościami. 😀 Wartości te zapisaliśmy w następnej linijce: dla 1. wykonania  zmienne te wynoszą: x=7, p=1, k=6 i to je musimy przepisać:
1. Rek(7, 1, 6)
2. Rek(7, 1, 3)
3. Rek(7, 3, 3)
Rekurencja
Dana jest dodatnia liczba całkowita n oraz uporządkowana rosnąco tablica różnych liczb całkowitych T[1..n]. Przeanalizuj następującą funkcję rekurencyjną, której parametrami są liczby całkowite x, p, k, przy czym 1≤ p ≤ k ≤ n.

Rek(x, p, k):
jeżeli p < k
  s ← (p + k) div 2
  jeżeli T[s] ≥ x
    wynikiem jest Rek(x, p, s)
  w przeciwnym razie
    wynikiem jest Rek(x, s + 1, k)
w przeciwnym razie
  jeżeli T[p] = x
    wynikiem jest p
  w przeciwnym razie
    wynikiem jest −1

Uwaga: div jest operatorem oznaczającym część całkowitą z dzielenia.Złożoność czasowa algorytmu opisanego funkcją Rek dla parametrów x = 1, p = 1, k = n jest
A. sześcienna.
B. kwadratowa.
C. liniowa.
D. logarytmiczna.
Wybierz właściwą odpowiedź.
O złożoności algorytmu mówiliśmy już przy okazji poprzedniego arkusza, tutaj link do zadania.
W skrócie: chodzi o to, w jakim tempie czas potrzebny na wykonanie algorytmu będzie rosnąć w stosunku do parametru n. 📈 
Na przykład: zakładając, że jedno wykonanie pętli zajmuje 1. sekundę - jeśli mamy pętlę, która wykona się n razy, oznacza to, że czas potrzebny do realizacji tej pętli wynosi n sekund -> rośnie on liniowo w stosunku do parametru n. Gdyby wystąpił taki przypadek, zaznaczylibyśmy "C. liniowa".
Jednak u nas sprawa wygląda trochę inaczej. Jak wspomnieliśmy przy okazji rozwiązywania poprzednich zadań z tym algorytmem (polecam zajrzeć!), ten pseudokod to nic innego, jak wyszukiwanie binarne! 😀 
Zasada działania jest prosta: mamy posortowaną tablicę, która zawiera n elementów. Mamy sprawdzić, czy w tym zbiorze znajduje się element x: jeśli tak, zwracamy jego indeks (miejsce w tablicy), jeśli nie: zwracamy -1.

Na czym polega akurat to wyszukiwanie?
Wykorzystujemy metodę "dziel i zwyciężaj" 🧙‍♂️ (warto zapamiętać na przyszłość!), która działa następująco: wybieramy środkowy element z tablicy, porównujemy go z szukaną wartością x i sprawdzamy, czy jest on równy bądź większy od tej wartości. Jeśli tak - wiemy, że szukany x może znajdować się po lewej stronie od środka (obliczony s stanowi środek), bo tablica jest przecież posortowana! 
Jeśli jednak wyszło nam, że środkowa wartość jest mniejsza od szukanej, oznacza to, że musimy szukać po prawej stronie. Eliminujemy w ten sposób 50% kandydatów, a to naprawdę spora liczba!

Ale jak to się ma do naszego zadania?
Tak właściwie to już uzyskaliśmy odpowiedź do niego! Spójrzmy: jeśli co każde wykonanie pętli będziemy zmniejszać o połowę ilość danych do przetrawienia, a będziemy dążyć do 1 elementu, to uzyskamy coś takiego:
dla n=2: 2/2=1: 1 wykonanie
dla n=4: 4/2=2, 2/2=1: 2 wykonania
dla n=8: 8/2=4, 4/2=2, 2/2=1: 3 wykonania
dla n=32: 32/2=16, 16/2=8...: 5 wykonań!
Widzicie tą zależność? zwiększyliśmy ilość danych 16-krotnie, a potrzebowaliśmy jedynie... o 4 sprawdzeń więcej!
Dla osób, które mniej więcej ogarniają logarytmy: liczba wykonań stanowi logarytm o podstawie 2 z n, a więc wiemy, że złożoność czasowa jest logarytmiczna. 😎
Dla osób bardziej niematematycznych: najważniejsze jest to, że w odpowiedziach mamy kolejno, od najmniejszej wielkości: złożoność logarytmiczna, liniowa, kwadratowa, sześcienna. Jeśli wiemy, że złożoność jest mniejsza od liniowej (wykonujemy mniej operacji niż wynosi n), to jedyną poprawną odpowiedzią może być złożoność logarytmiczna! (jednak dla waszego dobra lepiej powtórzyć sobie logarytmy 😋)

I tak zakończyliśmy nasze zadanie. Jak raz zrozumie się zasadę obliczania złożoności czasowej, to raczej poradzi się z tym już zawsze. Przynajmniej przy w miarę prostych przykładach. 😃 Warto ją znać, bo tego typu zadania dość często pojawiają się na maturze! 
Trzymajcie się!

Zadanie 2.1 (0-1)

Moda
Moda
Moda (dominanta) zestawu danych to element, który występuje w tym zestawie najczęściej. Np. dla zestawu danych 2, 3, 4, 2, 3, 5, 2, 100, 67 liczba 2 jest modą tego zestawu. W zestawie danych 2, 3, -4, 2, 3, -5, 2, 3 są dwie mody: 2 i 3.
Jeśli wszystkie elementy zestawu występują w nim z taką samą liczebnością, to przyjmujemy, że taki zestaw nie ma mody. Np. w zestawie danych 4, 4, 2, 3, 2, 3 nie ma mody.Ile maksymalnie różnych mód (dominant) może mieć 10 elementowy zestaw danych? Podaj przykład 10 elementowego zestawu danych z dokładnie trzema różnymi modami.
Hmm, wygląda na króciutkie zadanie! 🥳
Widzimy, że może występować kilka mód w zestawie danych. Musi jednak być choć jeden element, który różni się liczbą wystąpień, np. 2, 2, 1, 1, 3 - mamy tu dwie mody: 1 i 2. Jeśli jednak "wszystkie elementy zestawu występują w nim z taką samą liczebnością, to przyjmujemy, że taki zestaw nie ma mody", więc w zestawie: 2, 2, 1, 1, 3, 3 mody już nie ma!
Tak więc jak będzie wyglądać 10-elementowy zestaw z największą liczbą dominant? 🤔
Żeby uzyskać maksymalną liczbę mód, musimy znaleźć najmniejszą liczbę wystąpień, które będą stanowić modę, a liczba ta wynosi dwa! Dlaczego? bo zestaw składający się z liczb występujących z tą samą częstotliwością nie będzie mieć żadnej mody, zgodnie z tym, co zapisaliśmy wyżej, więc same pojedynczo występujące liczby odpadają.
Tak więc naszą odpowiedzią na pierwsze pytanie będzie: 10-elementowy zestaw danych może mieć maksymalnie 4 mody. (dwa elementy muszą różnić się od reszty, jeśli wrzucilibyśmy do tego zestawu 5 par tych samych liczb, to nie byłoby żadnej mody)

Teraz znajdźmy odpowiedź na drugie pytanie: "Podaj przykład 10 elementowego zestawu danych z dokładnie trzema różnymi modami". Tutaj prawidłowych odpowiedzi może być wiele: ważne, żeby 3 wartości występowały tyle samo razy, np: 1, 1, 1, 2, 2, 2, 3, 3, 3 i 4 - mamy 3 mody? mamy! 🐱‍🏍  Poprawną odpowiedzią będzie też: 1, 1, 2, 2, 3, 3, 4, 5, 6, 7.

Jak widać - łatwiejsze zadania na maturze też się zdarzają! 😎 W następnym zadaniu będziemy pisać algorytm, który znajdzie nam modę dowolnej tablicy liczb! Może już teraz podejmiecie się tego zadania? 🤠

Zadanie 2.2 (0-5)

Moda
Moda
Moda (dominanta) zestawu danych to element, który występuje w tym zestawie najczęściej. Np. dla zestawu danych 2, 3, 4, 2, 3, 5, 2, 100, 67 liczba 2 jest modą tego zestawu. W zestawie danych 2, 3, -4, 2, 3, -5, 2, 3 są dwie mody: 2 i 3.
Jeśli wszystkie elementy zestawu występują w nim z taką samą liczebnością, to przyjmujemy, że taki zestaw nie ma mody. Np. w zestawie danych 4, 4, 2, 3, 2, 3 nie ma mody.W wybranej przez siebie notacji (w postaci pseudokodu, listy kroków, lub języka programowania) napisz algorytm zgodny z poniższą specyfikacją:
Dane:
  n – dodatnia liczba całkowita większa niż 2
  T[1..n] – tablica n liczb całkowitych, w której występuje dokładnie jedna moda
Wynik:
  m – moda zestawu liczb zapisanego w tablicy T
Uwaga: w zapisie możesz wykorzystać tylko operacje arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, reszta z dzielenia), odwoływanie się do pojedynczych elementów tablicy, porównywanie liczb, instrukcje sterujące i przypisania do zmiennych lub samodzielnie napisane funkcje zawierające wyżej wymienione operacje.
Tak jak przy okazji poprzednich algorytmów, proponuję zapis w pseudokodzie bądź liście kroków: wykorzystując te metody, zmniejszamy szanse na popełnienie jakiegoś głupiego błędu (np. brak średnika na końcu w C++). 😜

Okej, wypiszmy rzeczy, które są ważne przy realizacji zadania:
- wiemy, że jest tylko jedna moda
- moda to wartość, która występuje najczęściej
- liczby zapisane są w tablicy indeksowanej od 1 do n
do czego nas to prowadzi? Będziemy musieli policzyć, ile razy każda liczba powtórzyła się w tablicy i wybrać liczbę, która najczęście występowała. 🤠
Możemy rozwiązać to na kilka sposobów, np.:
a) tworzymy dwie tablice Liczby i Wyst[ąpienia]: w pierwszej zapisujemy liczbę, a w drugiej pod tym samym indeksem zapisujemy ilość wystąpień tej liczby; w pętli "powtarzaj dla i=1..n" porównujemy element T[i] z każdym elementem tablicy Liczby i jeśli taki element się tam znajduje, to bierzemy indeks z tablicy Liczby i dodajemy 1 pod ten indeks w tablicy Wyst. Jeśli jednak nie znajduje się w Liczby taka wartość,  to dopisujemy ją i to samo robimy w tablicy Wyst, zapisując pod ten indeks 1. Po ukończeniu tego procesu wybieramy najwyższą liczbę w tablicy Wyst i pod tym indeksem w tablicy Liczby znajduje się nasza moda. 🥳
Taki algorytm w pseudokodzie wygląda tak: 
Liczby=[]
Wyst=[]
il=0
powtarzaj dla i=1..n:
  znaleziono = Fałsz
  powtarzaj dla j=1..il:
    jeśli T[i] == Liczby[j]:
      Wyst[j] = Wyst[j] + 1
      znaleziono = Prawda
  jeśli nie znaleziono:
    il = il + 1
    Liczby[il] = T[i]
    Wyst[il] = 1
maks = 0
powtarzaj dla i=1..il:
  jeżeli Wyst[i] > Wyst[maks]:
    maks = i
m = Liczby[maks]
b) druga opcja jest podobna do powyższej, z tą różnicą, że nie tworzymy tabel, a robimy wszystko "w locie". Najpierw zadeklarujemy dwie zmienne: maxL[iczba wystąpień] i maxW[artość]. Następnie - podobnie jak poprzednio - zastosujemy pętlę "powtarzaj dla i=1..n", w której zainicjujemy tymczasowe zmienne: l[iczba wystąpień]=0 i w[artość]=T[i]. Teraz wprowadzimy kolejną, taką samą pętlę, w której znajdziemy naszą liczbę wystąpień. Po tej pętli jedyne co musimy jeszcze zrobić, to sprawdzić czy L jest większe od maxL i jeśli tak, to przypisujemy do maxL wartość l, a do maxW wartość w. Po zakończeniu wykonywania pętli mamy naszą modę w postaci maxW 🥰
Pseudokod wygląda tak:
maxW, maxL
powtarzaj dla i=1..n:
  w = T[i]
  l = 0
  powtarzaj dla j=1..n:
    jeśli w==T[j]:
      l = l+1
  jeśli l > maxL:
    maxW = w
    maxL = l
m = maxLJak widać, istnieje wiele sposobów rozwiązania danego zadania. Jestem pewien, że można zapisać ten algorytm jeszcze na przynajmniej kilka innych sposobów, a ogranicza was jedynie wyobraźnia! 😎
Test
Oceń prawdziwość podanych zdań. Zaznacz P, jeśli zdanie jest prawdziwe, albo F – jeśli jest
fałszywe.
W każdym zadaniu punkt uzyskasz tylko za komplet poprawnych odpowiedzi.W tabeli T zapisano wiele rekordów danych zawierających informacje o zawodnikach. Pola rekordu to: id, nazwisko, imie, plec, wzrost, numer_startowy, punkty, id_klubu. Polecenie SQL obliczające średnią punktów zawodników z klubu o id_klubu równym liczbie 100, może mieć postać:
1. select count(punkty) as srednia from T where id_klubu=100; [P/F]
2. select avg(punkty) as srednia from T where id=100; [P/F]
3. select sum(punkty) from T where id_klubu=100; [P/F]
4. select avg(punkty) from T where id_klubu=100; [P/F]
Okej, mamy SQLa. Troszeczkę opowiedzieliśmy o nim przy okazji poprzedniego testu: fb.com/informatura/posts/119501256330262
Czyli tak: jest tabela T, do której się odwołujemy (from T). Mamy obliczyć średnią punktów zawodników z klubu setnego. 🏆 Zawsze w celu obliczania średniej w SQLu wykorzystujemy instrukcję AVG - od average, a jako argument podajemy kolumnę, dla której obliczamy średnią, tutaj np. avg(punkty). Jeśli id_klubu ma wynosić 100, to musimy postawić warunek: "where id_klubu=100" (gdzie id_klubu równa się 100). Tyle wystarczy, aby odpowiedzieć na powyższe pytania. 😃
1. select count(punkty) as srednia from T where id_klubu=100; fałsz, bo tutaj następuje zliczanie (COUNT), które zwraca liczbę rekordów - w tym wypadku rekordów, w których id_klubu=100.
2. select avg(punkty) as srednia from T where id=100; fałsz, choć to pytanie jest dość podchwytliwe! zwróćcie uwagę na końcówkę: "id=100" - miało być id_klubu=100, prawda? 🧐
3. select sum(punkty) from T where id_klubu=100; ponownie fałsz, niestety sum - suma, to nie to samo co średnia : (
4. select avg(punkty) from T where id_klubu=100; tego można było się już domyślić: prawda! mamy wszystko to, o czym mówiliśmy wyżej: avg(punkty), from T oraz where id_klubu=100! 🐱🏍


Treść drugiego zadania:
Zadanie 3.2. (0–1)
Różnica 11001001₂ – 1111110₂ (dwóch liczb zapisanych w systemie binarnym) jest równa
1. 4C₁₆ [P/F]
2. 113₈ [P/F]
3. 1023₄ [P/F]
4. 1001010₂ [P/F]

Ohoo, tutaj zrobiło się gorąco. 🤒 Ale coś uda nam się wymyślić..
A więc musimy zrobić sobie małą powtórkę z systemów liczb. Z jakiego systemu korzystamy na co dzień? Dziesiętnego, chociaż tutaj może niektórych zaskoczę: również często z systemu sześćdziesiętnego i dwunastkowego! Korzystamy z nich chociażby przy okazji korzystania z zegara (skądś się przecież wzięło 12 godzin, 60 minut czy 60 sekund ⏲). Ale wracając do sedna: jak działają systemy liczbowe? 
Każda cyfra znajduje się na pewnej pozycji, a ta pozycja określa "jak ważna" jest dana cyfra. Weźmy na przykład liczbę 123: składa się z 3 cyfr, jednej setki, dwóch dziesiątek i trzech jedynek. Jak jednak uzyskaliśmy tę liczbę (choć to pytanie brzmi nieco dziwnie)?
Chodzi tu o to, że każdy system na swoją podstawę: dziesiętny - 10, dwójkowy - 2, szesnastkowy - 16. Właśnie ona określa to, że pierwsza cyfra od prawej przyjmuje wartość 3*1, a ściślej rzecz biorąc: 3*10^0. Dokładnie tak samo jest z kolejnymi cyframi, za każdym razem jednak zwiększamy potęgę o jedną: 2*10^1 = 2*10 = 20; 1*10^2 = 1*100 = 100.
Co ta wiedza nam daje?
Możemy z jej pomocą obliczyć wartość "różnicy 110010012 – 11111102", sprowadzając te dwie liczby do systemu dziesiętnego! Do dzieła. 😎
Warto zapisać sobie tabelkę, z której będziemy aktywnie korzystać, a także ołówkiem ponumerować sobie zaczynając od prawej strony cyfry, które chcemy zamienić na system dziesiętny:
2^0=1
2^1=2
2^2=4
2^3=8
2^4=16
2^5=32
2^6=64
2^7=128
2^8=256
...
110010012 = 2^0+0+0+2^3+0+0+2^6+2^7 = 1+8+64+128=201
Podobnie robimy z drugą liczbą:
11111102 = 2^0+2^1+2^2+2^3+2^4+2^5 = 2+4+8+16+32+64=126
A więc teraz możemy wreszcie poznać wynik różnicy, który wynosi 201-126=75!
Niestety...... to tylko połowa sukcesu. 😭
Musimy jeszcze postąpić identycznie z resztą liczb, podstawiając prawidłowy system.
1. 4C₁₆ [P/F]: tutaj litery stanowią zamiennik cyfr: po dziewiątce mamy więc: A, B, C, D, E i F. A=10, B=11... Nie zmienia nam to dużo, popatrzcie: 12*16^0+4*16^1 = 12+64 = 76, więc mamy fałsz!
2. 113₈ [P/F]: 3*8^0+1*8^1+1*8^2 = 3+8+64 = 75, prawda! 🤠
3. 1023₄ [P/F]: 3*4^0+2*4^1+0*4^2+1*4^3 = 3+8+64 = 75, ponownie prawda!
4. 1001010₂ [P/F]: ❓❓❓ Zostawiam ten przykład dla was!

Wiedza zarówno z SQLa, jak i systemów liczbowych może bardzo się przydać, szczególnie w drugiej części, praktycznej, więc warto ją stale poszerzać! Swoją drogą, niedługo mogą pojawić się też rozwiązania praktycznej części, ale w trochę innej formie niż ta! 🤫
Test
Oceń prawdziwość podanych zdań. Zaznacz P, jeśli zdanie jest prawdziwe, albo F – jeśli jest
fałszywe.
W każdym zadaniu punkt uzyskasz tylko za komplet poprawnych odpowiedzi.Różnica 11001001₂ – 1111110₂ (dwóch liczb zapisanych w systemie binarnym) jest równa
1. 4C₁₆ [P/F]
2. 113₈ [P/F]
3. 1023₄ [P/F]
4. 1001010₂ [P/F]
Ohoo, tutaj zrobiło się gorąco. 🤒 Ale coś uda nam się wymyślić..
A więc musimy zrobić sobie małą powtórkę z systemów liczb. Z jakiego systemu korzystamy na co dzień? Dziesiętnego, chociaż tutaj może niektórych zaskoczę: również często z systemu sześćdziesiętnego i dwunastkowego! Korzystamy z nich chociażby przy okazji korzystania z zegara (skądś się przecież wzięło 12 godzin, 60 minut czy 60 sekund ⏲). Ale wracając do sedna: jak działają systemy liczbowe? 
Każda cyfra znajduje się na pewnej pozycji, a ta pozycja określa "jak ważna" jest dana cyfra. Weźmy na przykład liczbę 123: składa się z 3 cyfr, jednej setki, dwóch dziesiątek i trzech jedynek. Jak jednak uzyskaliśmy tę liczbę (choć to pytanie brzmi nieco dziwnie)?
Chodzi tu o to, że każdy system na swoją podstawę: dziesiętny - 10, dwójkowy - 2, szesnastkowy - 16. Właśnie ona określa to, że pierwsza cyfra od prawej przyjmuje wartość 3*1, a ściślej rzecz biorąc: 3*10^0. Dokładnie tak samo jest z kolejnymi cyframi, za każdym razem jednak zwiększamy potęgę o jedną: 2*10^1 = 2*10 = 20; 1*10^2 = 1*100 = 100.
Co ta wiedza nam daje?
Możemy z jej pomocą obliczyć wartość "różnicy 110010012 – 11111102", sprowadzając te dwie liczby do systemu dziesiętnego! Do dzieła. 😎
Warto zapisać sobie tabelkę, z której będziemy aktywnie korzystać, a także ołówkiem ponumerować sobie zaczynając od prawej strony cyfry, które chcemy zamienić na system dziesiętny:
2^0=1
2^1=2
2^2=4
2^3=8
2^4=16
2^5=32
2^6=64
2^7=128
2^8=256
...
110010012 = 2^0+0+0+2^3+0+0+2^6+2^7 = 1+8+64+128=201
Podobnie robimy z drugą liczbą:
11111102 = 2^0+2^1+2^2+2^3+2^4+2^5 = 2+4+8+16+32+64=126
A więc teraz możemy wreszcie poznać wynik różnicy, który wynosi 201-126=75!
Niestety...... to tylko połowa sukcesu. 😭
Musimy jeszcze postąpić identycznie z resztą liczb, podstawiając prawidłowy system.
1. 4C₁₆ [P/F]: tutaj litery stanowią zamiennik cyfr: po dziewiątce mamy więc: A, B, C, D, E i F. A=10, B=11... Nie zmienia nam to dużo, popatrzcie: 12*16^0+4*16^1 = 12+64 = 76, więc mamy fałsz!
2. 113₈ [P/F]: 3*8^0+1*8^1+1*8^2 = 3+8+64 = 75, prawda! 🤠
3. 1023₄ [P/F]: 3*4^0+2*4^1+0*4^2+1*4^3 = 3+8+64 = 75, ponownie prawda!
4. 1001010₂ [P/F]: ❓❓❓ Zostawiam ten przykład dla was!

Zadanie 3.3 (0-1)

Test
Test
Oceń prawdziwość podanych zdań. Zaznacz P, jeśli zdanie jest prawdziwe, albo F – jeśli jest
fałszywe.
W każdym zadaniu punkt uzyskasz tylko za komplet poprawnych odpowiedzi.Protokół HTTPS
1. jest protokołem pobierania poczty elektronicznej ze zdalnego serwera przez połączenie TCP/IP. [P/F]
2. jest szyfrowaną wersją protokołu HTTP. [P/F]
3. przydziela adresy IP poszczególnym komputerom. [P/F]
4. obsługuje system nazywania domen. [P/F]
Okej, opowiedzmy trochę o HTTPS'ie i jego pochodnych.
Protokół HTTP to z angielskiego skrót od Hypertext Transfer Protocol. Nazwa wskazuje, jaką funkcję będzie pełnił: brał udział w transferze plików hipertekstowych, czyli takich, które są zorganizowane i połączone ze sobą w jakiś sposób. Strony internetowe stanową właśnie takie pliki! Tak więc protokół HTTP, działający na porcie 80, pozwala m.in. na pobieranie stron internetowych. Jak można jednak przeczytać na wielu stronach: HTTP jest protokołem nieszyfrowanym, a więc jeśli ktoś przechwyci ruch sieciowy, będzie mógł bezproblemowo dowiedzieć się, co dana strona zawierała (zakładając, że nie ma innych zabezpieczeń).
Ta wada szczególnie dotknęła pierwsze sklepy internetowe, w których robienie zakupów było po prostu niebezpieczne, bo każdy, kto miał pewne umiejętności, mógł przechwycić dane np. karty kredytowej. Inżynierowie z firmy Netscape zauważyli w tym swoją szansę: jeśli stworzymy protokół, w której ruch będzie szyfrowany i bezpieczny, a następnie zaimplementujemy ten protokół do własnej przeglądarki, to każdy, kto będzie chciał skorzystać z wygody zakupów online, będzie musiał zainstalować naszą przeglądarkę. 😎
W celu stworzenia szyfrowanego HTTP, zbudowali i wykorzystali kolejny protokół: SSL, którego zadanie polega na szyfrowaniu. Kombinując HTTP i SSL, wyszła im nazwa HTTPS, która oznacza tyle, co Hypertext Transfer Protocol Secure.
Tyle z historii. Teraz przejdziemy do zadań!
1. Protokół HTTPS jest protokołem pobierania poczty elektronicznej ze zdalnego serwera przez połączenie TCP/IP. - jak mówiliśmy, HTTPS służy do (w miarę) bezpiecznego przesyłania głównie stron internetowych, możemy zaznaczyć więc fałsz. (do pobierania maili służy POP i IMAP)
2. jest szyfrowaną wersją protokołu HTTP. - yup, o tym właśnie opowiadaliśmy, prawda
3. przydziela adresy IP poszczególnym komputerom. - niestety, to jest funkcja protokołu DHCP, fałsz
4. obsługuje system nazywania domen. - heh, jest to problematyczne pytanie. Z jednej strony: zajmuje się tym protokół DNS (Domain Name System), ale z drugiej: powstał w niedawnym czasie protokół DNS-over-HTTPS, który obecnie wspiera jedynie Firefox. Protokół ten jednak zajmuje się jedynie "ukrywaniem" zapytań DNS w ruchu HTTPS, więc dlatego powinniśmy zaznaczyć fałsz. Swoją drogą: wiedzieliście, że zapytania DNS nie są domyślnie szyfrowane, co sprawia, że wszystkie adresy, które wpisaliśmy do przeglądarki, pochodzące z bardzo popularnych stron, jak i różnych odmętów internetu są łatwo dostępne dla naszego dostawcy sieci? 😇
Test
Oceń prawdziwość podanych zdań. Zaznacz P, jeśli zdanie jest prawdziwe, albo F – jeśli jest
fałszywe.
W każdym zadaniu punkt uzyskasz tylko za komplet poprawnych odpowiedzi.Liczba, która w zapisie binarnym ma dokładnie 16 cyfr i jedynkę na najbardziej znaczącej pozycji ma w zapisie
1. czwórkowym dokładnie 9 cyfr [P/F]
2. ósemkowym dokładnie 7 cyfr. [P/F]
3. szesnastkowym dokładnie 4 cyfry. [P/F]
4. dziesiętnym dokładnie 5 cyfr. [P/F]
Taka liczba w zapisie binarnym ma taki wygląd: 1000000000000000₂
Jak jednak odpowiedzieć na zadane pytania? Mamy kilka opcji:
a) przekonwertować wszystkie te liczby do dziesiętnych (o tym, jak to robić, mówiliśmy w poprzednim poście), czyli:
- dwójkowy: 1000000000000000₂ = 32768
- czwórkowy: 300000000₄ = 196608, z tą uwagą, że w systemach innych niż dwójkowe musimy obliczyć dwie wartości: z cyfrą najmniejszą z przodu oraz największą, a więc: 100000000₄ = 65536, jak widzimy, liczba 32768 nie zawiera się w przedziale <65536; 196608>, więc system czwórkowy na pewno odpada, fałsz
itd.

b) zamienić bezpośrednio z systemu binarnego na docelowe: robimy to, grupując cyfry w kilka, zaczynając od PRAWEJ strony!:
- dla czwórkowego: po dwie cyfry (które dają kombinacje 00, 01, 10 i 11) - 10 00 00 00 00 00 00 00, czyli 10₂ = 2₄, 00₂ = 0₄, więc wychodzi liczba 20000000₄, która ma 8 cyfr, wychodzi nam fałsz!
- dla ósemkowego: po trzy cyfry - 1 000 000 000 000 000, czyli 1₂ = 1₈, 000₂ = 0₈, więc wychodzi liczba 100000₈: liczba ta ma 6 cyfr, a nie 7, więc odpada - fałsz
- dla szesnastkowego: po cztery cyfry - 1000 0000...., więc mamy 1000₂ = 8₁₆, 0000₂ = 0₁₆, czyli 8000₁₆: wreszcie prawda! mamy 4 cyfry
- tej metody niestety nie zastosujemy dla systemu dziesiętnego, bo żeby ona zadziałała, podstawą systemu (np. 4 czy 8) musi być jedna z potęg dwójki: naszego pierwotnego systemu. Jednak omawiałem zamianę w ten sposób tutaj: fb.com/informatura/posts/133361728277548

c) skorzystać z pewnej matematycznej własności potęg: (a^m)^n = a^m*n. Teraz może to wydawać się czystą magią, w jaki sposób jest to powiązane z naszym zadaniem. Jednak popatrzmy: liczba 1000000000000000₂ to nic innego jak 2^15 (już w dziesiętnym). 15 oznacza tu ilość cyfr w danym zapisie, jednak uszczuploną o początkowy symbol. A więc potęga+1 oznacza ilość cyfr w danym systemie liczbowym, którego podstawą jest cyfra podana jako podstawa potęgi. Na przykładach będzie łatwiej pokazać tą zależność:
- dla czwórkowego: 2^15 = (2^2)^7.5 = 4^7.5: wychodzi, że dla systemu czwórkowego będzie 7.5+1 cyfr. 🤨 Coś tu nie jest, jak powinno być. Wystarczy jednak, że zaokrąglimy tę liczbę w dół i wyjdzie nam już prawidłowa wartość: 8 cyfr!
- dla ósemkowego: 2^15 = (2^3)^5 = 8^5: mamy 5 cyfr dla systemu oktalnego, co się zgadza z wyższymi obliczeniami!
itd...

Widzimy więc, na jak wiele sposobów możemy wykonać to zadanie, a z pewnością znajdzie się jeszcze kilka! Warto znać kilka, bo niektóre z nich możemy wykorzystać tylko w określonych sytuacjach, ale za to szybciej, a jak wiemy, na maturze czas ma wielkie znaczenie. ⏰

Zadanie 5.1 (0-2)

Zbiornik wody
Zbiornik wody
Właściciele ogrodu postanowili zaoszczędzić na opłatach za wodę i przed laty zainstalowali zbiornik o pojemności 25 000 litrów, w którym gromadzą wodę do podlewania roślin.
Podlewanie roślin wodą ze zbiornika i uzupełnianie zbiornika regulują następujące zasady:
• średnia dobowa temperatura i opady dobowe są mierzone od godziny 20:00 dnia poprzedniego do godz. 20:00 dnia bieżącego,
• do godziny 20:00 opady uzupełniają sumarycznie zbiornik w ilości: 700 * x litrów (gdzie x – opady dobowe deszczu w l/m2 ), jednak nie więcej niż do maksymalnej pojemności zbiornika,
• w dni bezdeszczowe dzienne parowanie wody (ubytek) ze zbiornika jest zależny od średniej dobowej temperatury T i wynosi: 0,03% * T^1,5 * y litrów (gdzie y – oznacza stan zbiornika z godziny 21:00 dnia poprzedniego) w zaokrągleniu w górę do pełnych litrów,
• ogród jest podlewany w każdym dniu, w którym średnia dobowa temperatura przekroczy 15°C, a jednocześnie opady dobowe nie przekraczają 0,6 l/m2 ,
• podlewanie, jeśli ma miejsce, jest wykonywane o godz. 20:00,
• do podlewania zużywa się 12 000 litrów wody (1 porcja), jeśli średnia dobowa temperatura nie przekracza 30°C, oraz 24 000 litrów wody (2 porcje), jeśli średnia dobowa temperatura przekracza 30°C,
• jeśli o godz. 20:00 w dniu, w którym należy podlać rośliny, w zbiorniku jest za mało wody, jest on tuż przed podlaniem uzupełniany wodą z wodociągu do pełna,
• podlewanie kończy się o godz. 
21:00. 31 marca o godzinie 21:00 zbiornik był pełen.
Plik pogoda.txt zawiera dane dotyczące średniej temperatury oraz wysokości opadów dobowych w l/m2 w okresie od 1 kwietnia do 30 września 2015 roku.
Przykład:
temperatura_srednia	opady
4	2
2	6
4	1
4	0,8
Korzystając z dostępnych narzędzi informatycznych, wykonaj poniższe polecenia. Odpowiedzi do zadań zapisz w pliku wyniki5.txt, a każdą z nich poprzedź numerem odpowiedniego zadania.
Uwaga:
W całym okresie od kwietnia do września 2015 roku do zbiornika dolano 743 427 litrów wody – wykorzystaj tę informację do sprawdzenia wyników swoich obliczeń.
Wykonując odpowiednie obliczenia oraz podając odpowiedzi, wyniki zawsze zaokrąglaj w górę do pełnych litrów. Podaj datę, kiedy pierwszy raz trzeba było dolać wodę do zbiornika, i podaj ilość dolanej wody.
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.

Zadanie 5.2 (0-2)

Zbiornik wody
Zbiornik wody
Właściciele ogrodu postanowili zaoszczędzić na opłatach za wodę i przed laty zainstalowali zbiornik o pojemności 25 000 litrów, w którym gromadzą wodę do podlewania roślin.
Podlewanie roślin wodą ze zbiornika i uzupełnianie zbiornika regulują następujące zasady:
• średnia dobowa temperatura i opady dobowe są mierzone od godziny 20:00 dnia poprzedniego do godz. 20:00 dnia bieżącego,
• do godziny 20:00 opady uzupełniają sumarycznie zbiornik w ilości: 700 * x litrów (gdzie x – opady dobowe deszczu w l/m2 ), jednak nie więcej niż do maksymalnej pojemności zbiornika,
• w dni bezdeszczowe dzienne parowanie wody (ubytek) ze zbiornika jest zależny od średniej dobowej temperatury T i wynosi: 0,03% * T^1,5 * y litrów (gdzie y – oznacza stan zbiornika z godziny 21:00 dnia poprzedniego) w zaokrągleniu w górę do pełnych litrów,
• ogród jest podlewany w każdym dniu, w którym średnia dobowa temperatura przekroczy 15°C, a jednocześnie opady dobowe nie przekraczają 0,6 l/m2 ,
• podlewanie, jeśli ma miejsce, jest wykonywane o godz. 20:00,
• do podlewania zużywa się 12 000 litrów wody (1 porcja), jeśli średnia dobowa temperatura nie przekracza 30°C, oraz 24 000 litrów wody (2 porcje), jeśli średnia dobowa temperatura przekracza 30°C,
• jeśli o godz. 20:00 w dniu, w którym należy podlać rośliny, w zbiorniku jest za mało wody, jest on tuż przed podlaniem uzupełniany wodą z wodociągu do pełna,
• podlewanie kończy się o godz. 
21:00. 31 marca o godzinie 21:00 zbiornik był pełen.
Plik pogoda.txt zawiera dane dotyczące średniej temperatury oraz wysokości opadów dobowych w l/m2 w okresie od 1 kwietnia do 30 września 2015 roku.
Przykład:
temperatura_srednia	opady
4	2
2	6
4	1
4	0,8
Korzystając z dostępnych narzędzi informatycznych, wykonaj poniższe polecenia. Odpowiedzi do zadań zapisz w pliku wyniki5.txt, a każdą z nich poprzedź numerem odpowiedniego zadania.
Uwaga:
W całym okresie od kwietnia do września 2015 roku do zbiornika dolano 743 427 litrów wody – wykorzystaj tę informację do sprawdzenia wyników swoich obliczeń.
Wykonując odpowiednie obliczenia oraz podając odpowiedzi, wyniki zawsze zaokrąglaj w górę do pełnych litrów. Utwórz wykres liniowy przedstawiający kształtowanie się ilości wody w zbiorniku w okresie od 1 kwietnia do 30 września 2015 roku. 
Pamiętaj o czytelnym opisie wykresu (tytuł, opis osi). Przyjmij jako stan zbiornika każdego dnia wartość z godziny 21.00 po podlaniu roślin.
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.

Zadanie 5.3 (0-4)

Zbiornik wody
Zbiornik wody
Właściciele ogrodu postanowili zaoszczędzić na opłatach za wodę i przed laty zainstalowali zbiornik o pojemności 25 000 litrów, w którym gromadzą wodę do podlewania roślin.
Podlewanie roślin wodą ze zbiornika i uzupełnianie zbiornika regulują następujące zasady:
• średnia dobowa temperatura i opady dobowe są mierzone od godziny 20:00 dnia poprzedniego do godz. 20:00 dnia bieżącego,
• do godziny 20:00 opady uzupełniają sumarycznie zbiornik w ilości: 700 * x litrów (gdzie x – opady dobowe deszczu w l/m2 ), jednak nie więcej niż do maksymalnej pojemności zbiornika,
• w dni bezdeszczowe dzienne parowanie wody (ubytek) ze zbiornika jest zależny od średniej dobowej temperatury T i wynosi: 0,03% * T^1,5 * y litrów (gdzie y – oznacza stan zbiornika z godziny 21:00 dnia poprzedniego) w zaokrągleniu w górę do pełnych litrów,
• ogród jest podlewany w każdym dniu, w którym średnia dobowa temperatura przekroczy 15°C, a jednocześnie opady dobowe nie przekraczają 0,6 l/m2 ,
• podlewanie, jeśli ma miejsce, jest wykonywane o godz. 20:00,
• do podlewania zużywa się 12 000 litrów wody (1 porcja), jeśli średnia dobowa temperatura nie przekracza 30°C, oraz 24 000 litrów wody (2 porcje), jeśli średnia dobowa temperatura przekracza 30°C,
• jeśli o godz. 20:00 w dniu, w którym należy podlać rośliny, w zbiorniku jest za mało wody, jest on tuż przed podlaniem uzupełniany wodą z wodociągu do pełna,
• podlewanie kończy się o godz. 
21:00. 31 marca o godzinie 21:00 zbiornik był pełen.
Plik pogoda.txt zawiera dane dotyczące średniej temperatury oraz wysokości opadów dobowych w l/m2 w okresie od 1 kwietnia do 30 września 2015 roku.
Przykład:
temperatura_srednia	opady
4	2
2	6
4	1
4	0,8
Korzystając z dostępnych narzędzi informatycznych, wykonaj poniższe polecenia. Odpowiedzi do zadań zapisz w pliku wyniki5.txt, a każdą z nich poprzedź numerem odpowiedniego zadania.
Uwaga:
W całym okresie od kwietnia do września 2015 roku do zbiornika dolano 743 427 litrów wody – wykorzystaj tę informację do sprawdzenia wyników swoich obliczeń.
Wykonując odpowiednie obliczenia oraz podając odpowiedzi, wyniki zawsze zaokrąglaj w górę do pełnych litrów. Zrób zestawienie miesięczne (w okresie kwiecień – wrzesień 2015 roku) kosztów dolewanej wody z wodociągu. Weź pod uwagę, że cena 1 m3 (1000 litrów) jest równa 11,74 zł. Opłaty są realizowane miesięcznie i dotyczą pełnych m3 (po zaokrągleniu w górę).
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.

Zadanie 5.4 (0-3)

Zbiornik wody
Zbiornik wody
Właściciele ogrodu postanowili zaoszczędzić na opłatach za wodę i przed laty zainstalowali zbiornik o pojemności 25 000 litrów, w którym gromadzą wodę do podlewania roślin.
Podlewanie roślin wodą ze zbiornika i uzupełnianie zbiornika regulują następujące zasady:
• średnia dobowa temperatura i opady dobowe są mierzone od godziny 20:00 dnia poprzedniego do godz. 20:00 dnia bieżącego,
• do godziny 20:00 opady uzupełniają sumarycznie zbiornik w ilości: 700 * x litrów (gdzie x – opady dobowe deszczu w l/m2 ), jednak nie więcej niż do maksymalnej pojemności zbiornika,
• w dni bezdeszczowe dzienne parowanie wody (ubytek) ze zbiornika jest zależny od średniej dobowej temperatury T i wynosi: 0,03% * T^1,5 * y litrów (gdzie y – oznacza stan zbiornika z godziny 21:00 dnia poprzedniego) w zaokrągleniu w górę do pełnych litrów,
• ogród jest podlewany w każdym dniu, w którym średnia dobowa temperatura przekroczy 15°C, a jednocześnie opady dobowe nie przekraczają 0,6 l/m2 ,
• podlewanie, jeśli ma miejsce, jest wykonywane o godz. 20:00,
• do podlewania zużywa się 12 000 litrów wody (1 porcja), jeśli średnia dobowa temperatura nie przekracza 30°C, oraz 24 000 litrów wody (2 porcje), jeśli średnia dobowa temperatura przekracza 30°C,
• jeśli o godz. 20:00 w dniu, w którym należy podlać rośliny, w zbiorniku jest za mało wody, jest on tuż przed podlaniem uzupełniany wodą z wodociągu do pełna,
• podlewanie kończy się o godz. 
21:00. 31 marca o godzinie 21:00 zbiornik był pełen.
Plik pogoda.txt zawiera dane dotyczące średniej temperatury oraz wysokości opadów dobowych w l/m2 w okresie od 1 kwietnia do 30 września 2015 roku.
Przykład:
temperatura_srednia	opady
4	2
2	6
4	1
4	0,8
Korzystając z dostępnych narzędzi informatycznych, wykonaj poniższe polecenia. Odpowiedzi do zadań zapisz w pliku wyniki5.txt, a każdą z nich poprzedź numerem odpowiedniego zadania.
Uwaga:
W całym okresie od kwietnia do września 2015 roku do zbiornika dolano 743 427 litrów wody – wykorzystaj tę informację do sprawdzenia wyników swoich obliczeń.
Wykonując odpowiednie obliczenia oraz podając odpowiedzi, wyniki zawsze zaokrąglaj w górę do pełnych litrów. Podaj liczby dni, w których:
– temperatura powietrza nie przekraczała 15°C,
– temperatura przekraczała 15°C, a jednocześnie opady dobowe nie przekraczały 0,6 l/m2,
– temperatura przekraczała 15°C i jednocześnie opady dobowe przekraczały 0,6 l/m2.
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.