Matura 2015 (maj). Zadanie 1. Problem telewidza

Matura 2015 (maj). Zadanie 1. Problem telewidza

W Problemie telewidza mamy program telewizyjny, zawierający listę filmów emitowanych w różnych stacjach telewizyjnych jednego dnia. Telewidz zamierza obejrzeć jak najwięcej filmów w całości. Jedyne ograniczenie jest takie, że telewidz może oglądać co najwyżej jeden film (stację telewizyjną) jednocześnie. Zakładamy, że jednego dnia wszystkie filmy są różne.

Program telewizyjny emisji filmów w 4 stacjach telewizyjnych:

Telewizja / stacja Film i godziny jego emisji Czas trwania emisji filmu
TV1 film 1: od 9:00 do 12:00
film 2: od 15:00 do 17:00
3 godziny
2 godziny
TV2 film 3: od 11:00 do 16:00 5 godzin
TV3 film 4: od 12:00 do 14:00 2 godziny
TV4 film 5: od 11:30 do 12:30 1 godzina

Dla programu podanego powyżej telewidz jest w stanie obejrzeć aż trzy filmy, np.: film 1, film 4, film 2. Przyjmujemy, że telewidz nie traci w ogóle czasu na przełączanie pomiędzy stacjami (np. o godz. 12:00 z TV1 na TV3). Innymi słowy, czasy emisji filmów 1 i 4 nie kolidują ze sobą.
Rozważ następujący algorytm wyboru filmów do obejrzenia przez telewidza, w którym w kroku 2. stosuje się jedną z czterech strategii opisanych w tabeli 1.

Specyfikacja:

Dane:

T – zbiór filmów z programu telewizyjnego z godzinami emisji i czasami ich trwania,
S – strategia z tabeli 1.

Wynik:

P – zbiór filmów, które obejrzy telewidz.

Algorytm:

Krok 1. Zainicjuj P jako zbiór pusty.
Krok 2. Dopóki T zawiera jakieś filmy, wykonuj:
– stosując strategię S, wybierz ze zbioru T film x i usuń go z T
– dodaj film x do zbioru P
– usuń ze zbioru T wszystkie filmy, których czasy emisji kolidują z czasem emisji filmu x.
Krok 3. Zakończ wykonywanie algorytmu i wypisz wszystkie filmy ze zbioru P.

Tabela 1. Cztery strategie (S) w Problemie telewidza:

Strategia A Wybierz film, który trwa najdłużej, a jeśli jest takich więcej, to wybierz z nich ten, który się najwcześniej kończy. Jeśli jest więcej takich filmów,wybierz dowolny z nich.
Strategia B Wybierz film, który trwa najkrócej, a jeśli jest takich więcej, to wybierz z nich ten, który się najwcześniej kończy. Jeśli jest więcej takich filmów, wybierz dowolny z nich.
Strategia C Wybierz film, który się najwcześniej zaczyna, a jeśli jest takich więcej, to wybierz z nich ten, który się najwcześniej kończy. Jeśli jest więcej takich filmów, wybierz dowolny z nich.
Strategia D Wybierz film, który się najwcześniej kończy, a jeśli jest takich więcej, to wybierz z nich ten, który się najpóźniej zaczyna. Jeśli jest więcej takich filmów, wybierz dowolny z nich.

Przykład:
Dla podanego programu telewizyjnego zastosowanie w kroku 2. strategii A daje wynik P = {film 3}, czyli telewidz obejrzy tylko jeden film.

Zadanie 1.

Dla podanego programu telewizyjnego podaj wyniki wykonywania algorytmu po zastosowaniu strategii B, C i D:

Strategia S Zawartość zbioru P po zakończeniu wykonywania algorytmu
B P = {film 5, film 2}
C P = {film 1, film 4, film 2}
D P = {film 1, film 4, film 2}

Zadanie 2.

Zastosowana strategia S w algorytmie jest optymalna, jeśli dla każdego programu telewizyjnego wynik algorytmu (zbiór P) zawiera największą możliwą liczbę filmów, które może obejrzeć telewidz.

Uwaga:
Strategia A nie jest optymalna, ponieważ telewidz może obejrzeć trzy filmy: film 1, film 4 oraz film 2.

Dla strategii A, B i C podaj w przygotowanych tabelach przykłady programów telewizyjnych, z emisją czterech filmów w dwóch stacjach, będące dowodami, że żadna z tych strategii nie jest optymalna.

Dla każdej strategii i podanego dla niej programu telewizyjnego podaj wynik działania algorytmu oraz przykład ilustrujący, że telewidz może obejrzeć więcej filmów, jeżeli nie używa tej strategii.

Wskazówka. Podaj takie godziny emisji czterech filmów, aby telewidz był w stanie obejrzeć np. trzy lub więcej filmów, podczas gdy zastosowanie algorytmu z odpowiednią strategią daje rozwiązanie zawierające co najwyżej dwa filmy.

Dowód dla strategii A:

Telewizja / stacja Film i godziny jego emisji Czas trwania emisji filmu
TV1 film 1 (od …………………. do ………………….),
film 2 (od …………………. do ………………….)
………………….
………………….
TV2 film 3 (od …………………. do ………………….),
film 4 (od …………………. do ………………….)
………………….
………………….

Wynik działania algorytmu przy zastosowaniu strategii A:

P

Liczniejszy zbiór filmów, które może obejrzeć widz:

Z

Dowód dla strategii B:

Telewizja / stacja Film i godziny jego emisji Czas trwania emisji filmu
TV1 film 1 (od …………………. do ………………….),
film 2 (od …………………. do ………………….)
………………….
………………….
TV2 film 3 (od …………………. do ………………….),
film 4 (od …………………. do ………………….)
………………….
………………….

Wynik działania algorytmu przy zastosowaniu strategii B:

P

Liczniejszy zbiór filmów, które może obejrzeć widz:

Z

Dowód dla strategii C:

Telewizja / stacja Film i godziny jego emisji Czas trwania emisji filmu
TV1 film 1 (od …………………. do ………………….),
film 2 (od …………………. do ………………….)
………………….
………………….
TV2 film 3 (od …………………. do ………………….),
film 4 (od …………………. do ………………….)
………………….
………………….

Wynik działania algorytmu przy zastosowaniu strategii C:

P

Liczniejszy zbiór filmów, które może obejrzeć widz:

Z

 

Matura 2017 (maj). Zadanie 1. Prostokąt

Matura 2017 (maj). Zadanie 1. Prostokąt

Dane są:

liczba całkowita n większa od 1
zbiór A zawierający n dodatnich, różnych liczb całkowitych
liczba pierwsza p

Zadanie 1.

Dla danych z każdego wiersza w tabeli oblicz największe pole powierzchni prostokąta, które nie jest podzielne przez p, a długości sąsiednich boków tego prostokąta są różne (nie może on być kwadratem) i należą do zbioru A. Zapisz pole tego prostokąta w kolumnie S. Jeżeli taki prostokąt nie istnieje, jako wynik podaj liczbę 0 (zero).

Zbiór A p S – pole szukanego prostokąta lub 0 (zero), jeśli nie można zbudować takiego prostokąta
7, 5, 11, 33 3 77
15, 12, 10, 6, 5, 1 5 72 (6*12)
6, 28, 7, 12, 10, 14, 5, 9, 4, 8, 18 7 216 (18*12)
4, 34, 16, 8, 6, 22, 14, 12, 2, 7 2 0

Rozwiązanie:

Krok 1. 

Szukając największe pole powierzchni prostokąta, które nie jest podzielne przez p rozpocząć należy od odrzucenia liczb podzielnych przez liczbę p.

15, 12, 10, 6, 5, 1
6, 28, 7, 12, 10, 14, 5, 9, 4, 8, 18
4, 34, 16, 8, 6, 22, 14, 12, 2, 7

Krok 2.

Wybieramy dwie największe liczby spośród pozostałych, wykonujemy iloczyn, wynik sprawdzamy czy nie est podzielny przez p.

12*6=72
18*12=216
7*—– brak drugiej liczby

Zadanie 2. 

Zapisz (w postaci pseudokodu, listy kroków lub w wybranym języku programowania) algorytm obliczający największe pole powierzchni prostokąta, które nie jest podzielne przez p, a długości sąsiednich boków tego prostokąta należą do zbioru A i są różne.
Przy ocenie brana będzie pod uwagę złożoność obliczeniowa Twojego algorytmu.

Uwaga:
W zapisie algorytmu możesz wykorzystywać tylko następujące operacje arytmetyczne: dodawanie, odejmowanie, mnożenie, dzielenie całkowite i obliczanie reszty z dzielenia.

Specyfikacja:

Dane:

n – liczba całkowita większa od 1
A[1..n] – tablica zawierająca n różnych, dodatnich liczb całkowitych
p – liczba pierwsza

Wynik:

S – największe pole powierzchni prostokąta, które nie jest podzielne przez p,
a długości sąsiednich boków tego prostokąta są różne i zawarte w tablicy A;
jeśli nie można zbudować takiego prostokąta, wynikiem powinno być 0 (zero)

Rozwiązanie:

#include <iostream>
#define N 11
#define P 7

using namespace std;

int main()
{
    int tab[N]={6, 28, 7, 12, 10, 14, 5, 9, 4, 8, 18};
    int x=0,y=0;
    for (int i=0; i<N; i++) {
        if (tab[i]%P!=0) {
            if (tab[i] > x ) x = tab[i];
        }
    }
    for (int i=0; i<N; i++) {
        if (tab[i]%P!=0) {
            if (tab[i] > y && tab[i] < x ) y = tab[i];
        }
    }
    if (x*y>0)
        cout << "Pole prostokata = " << x << " * " << y << " = " << x*y << endl;
    else
        cout << "Wynik = 0 " << endl;
    return 0;
}

Matura 2018. Zadanie 3. Test

Matura 2018. Zadanie 3. 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.

Zadanie 1.

Na pewnym serwerze WWW znajduje się strona napisana w języku PHP, a jej kod zawiera fragmenty w języku JavaScript. Pewien komputer-klient pobrał i wyświetlił tę stronę.
Wiadomo, że:

1. Kod PHP jest wykonywany przez komputer – serwer. P
2. Kod JavaScript jest wykonywany przez komputer – klient. P
3. Podczas wykonywania kodu PHP zawsze pobierane są dane od klienta. F
4. Podczas wykonywania kodu JavaScript mogą być pobierane dodatkowe dane zarówno od klienta, jak i od serwera. P

Wyjaśnienie:

Kod PHP jest zawsze wykonywany po stronie serwera, a do przeglądarki wysyłany jest wynik działania kodu PHP. Do działania kodu PHP nie są potrzebne żadne dane pobierane od użytkownika. Kod JavaScript jest już wykonywany po stronie przeglądarki, tak jak kod HTML. Do działania kodu JavaScript możemy pobierać dane od użytkownika z przeglądarki oraz serwera, ale nie jest to konieczne.

Zadanie 2.

1. Plakat do druku lepiej przygotować w modelu barw RGB niż CMYK. F
2. Kolor żółty jest kolorem podstawowym w modelu RGB. F
3. W wyniku nałożenia się składowych Yellow i Magenta w modelu CMYK otrzymamy kolor czerwony. P
4. W modelu barw CMYK litera C pochodzi od angielskiego słowa contrast. F

Wyjaśnienie:

RGB – jeden z modeli przestrzeni barw, opisywanej współrzędnymi RGB. Jego nazwa powstała ze złożenia pierwszych liter angielskich nazw barw:
R – red (czerwonej),
G – green (zielonej),
B – blue (niebieskiej),
z których model ten się składa. Jest to model wynikający z właściwości odbiorczych ludzkiego oka, w którym wrażenie widzenia dowolnej barwy można wywołać przez zmieszanie w ustalonych proporcjach trzech wiązek światła o barwie czerwonej, zielonej i niebieskiej.

CMYK – zestaw czterech podstawowych kolorów farb drukarskich stosowanych powszechnie w druku wielobarwnym w poligrafii i metodach pokrewnych (atramenty, tonery i inne materiały barwiące w drukarkach komputerowych, kserokopiarkach itp.). Na zestaw tych kolorów mówi się również barwy procesowe lub kolory triadowe (kolor i barwa w jęz. polskim to synonimy). CMYK to jednocześnie jedna z przestrzeni barw w pracy z grafiką komputerową.
C cyjan (ang. cyan) – odcień niebieskiego,
M magenta (ang. magenta) – w syntezie addytywnej kolor uzyskany w wyniku połączenia czerwieni i niebieskiego,
Y żółty (ang. yellow) – kolor bardzo podobny do żółtego,
K czarny (ang. black lub key colour) – kolor czarny, jednak o niezbyt głębokiej czerni.
Skrót CMYK powstał jako złożenie pierwszych liter angielskich nazw kolorów. Końcowa litera K może oznaczać albo literę ostatnią słowa black (czarny; ostatnią, ponieważ litera B jest skrótem jednego z podstawowych kolorów w analogicznym skrócie RGB) bądź skrót key colour (kolor kluczowy).

Zadanie 3.

Wskaż zdania prawdziwe dla języka SQL.

1. W wynikach zapytania postaci SELECT (…) ORDER BY (…) zawsze dostajemy rekordy uporządkowane ściśle rosnąco według wskazanego pola. F
2. Zapytanie UPDATE może zmienić wartości pól w bazie danych. P
3. Zapytanie postaci SELECT * FROM tabela1 WHERE pole LIKE (…) może w pewnych warunkach dać wszystkie rekordy z tabeli tabela1. P
4. Wynik zapytania SELECT * FROM tabela1 JOIN tabela2 ON tabela1.pole = tabela2.pole może być pusty przy niepustych tabelach tabela1 oraz tabela2. P

Wyjaśnienie:

Języku SQL jest językiem zapytań, tzn. że zadajemy pytanie za pomocą odpowiednich komend:

ORDER BY  – oznacza uporządkowanie rekordów wg wskazanego pola rosnąco ASC lub malejąco DESC.

UPDATE – za pomocą tego zapytania zmieniamy zawartość rekordów.

WHERE – służy do wyodrębniania tylko tych rekordów, które spełniają określony warunek.

JOIN – służy do łączenia wierszy z dwóch lub więcej tabel, w oparciu o powiązaną kolumnę między nimi.

Matura 2018 (maj). Zadanie 6. Centrum danych

Matura 2018 (maj). Zadanie 6. Centrum danych

Pewna firma utrzymuje centrum danych, w którym znajduje się kilkaset pracujących komputerów. Specjalny zespół pracowników odpowiada za wykrywanie i usuwanie awarii komputerów. Pliki komputery.txt, awarie.txt oraz naprawy.txt zawierają dane niezbędne do wykonania zadania.

Plik komputery.txt zawiera opisy maszyn znajdujących się w centrum w 2015 roku, każdy wiersz tego pliku zawiera kolejno:

  • numer komputera (unikatową liczbę całkowitą) – Numer_komputera,
  • sekcję, w której znajduje się komputer (sekcje oznaczone są wielkimi literami alfabetu
    angielskiego: A, B, C, …) – Sekcja.
  • pojemność dysku twardego (liczoną w gigabajtach, liczba całkowita) – Pojemnosc_dysku.

Przykład:

Numer_komputeraSekcjaPojemnosc_dysku
1R700
2N130
3E300

Plik awarie.txt zawiera informację o awariach komputerów w 2015 roku. Każdy wiersz tego pliku zawiera kolejno:

  • unikatowy numer zgłoszenia awarii – Numer_zgloszenia,
  • numer komputera, który uległ awarii – Numer_komputera,
  • datę i godzinę wystąpienia awarii z dokładnością do sekundy – Czas_awarii,
  • priorytet zgłoszenia – liczbę całkowitą określającą w skali od 1 do 10, jak krytyczna jest
    awaria – Priorytet.

Przykład:

Numer_zgloszeniaNumer_komputeraCzas_awariiPriorytet
13652015-01-01 04:40:558
22492015-01-01 06:08:243
33122015-01-01 06:33:434

W pliku naprawy.txt zapisane zostały raporty z prac, jakie wykonał zespół w 2015 roku.

Każdy wiersz tego pliku zawiera kolejno:

  • numer zgłoszenia, którego dotyczyła naprawa (mogło zdarzyć się, że jedno zgłoszenie awarii wymagało kilku napraw) – Numer_zgloszenia,
  • datę i godzinę zakończenia naprawy z dokładnością do sekundy – Czas_naprawy,
  • rodzaj naprawy (słowo restart oznacza ponowne uruchomienie komputera, wymiana –
    wymianę jednego z podzespołów komputera) – Rodzaj.

Przykład:

Numer_zgloszeniaCzas_naprawyRodzaj
22015-01-01 20:08:15restart
72015-01-02 16:30:15restart
42015-01-02 19:37:03wymiana

Dane w wierszach plików są oddzielone znakami tabulacji, pierwszy wiersz pliku jest wierszem nagłówkowym.

Za pomocą dostępnych narzędzi informatycznych podaj odpowiedzi do poniższych zadań, zapisz je w pliku wyniki.txt, a każdą z nich poprzedź numerem odpowiedniego zadania.

Pobieranie danych do programu:

Pobieranie danych z pliku tekstowego do tabeli w Access’ie wykonujemy zgodnie z poniżej przedstawionymi krokami.

Krok 1. 
Pobieramy z pliku tekstowego dane do tabeli wybierając z menu Dane zewnętrzne -> Plik tekstowy.

Krok 2.
Wskazujemy, gdzie znajduje się plik tekstowy. Te czynności powtarzamy tyle razy ile jest plików tekstowych.

Krok 3.
Ustalamy w jaki sposób są wpisane dane do pliku tekstowego.

Krok 4.
Wybieramy znak rozdzielający pola oraz zaznaczamy pierwszy wiersz zawiera nazwy pól.

Krok 5.
Wybieramy odpowiednie typy dla każdej kolumny (dla każdego pola) w tabeli. Należy pamiętać, że konieczne jest wybrania typu dla pola daty.

Krok 6. 
Wybieramy pole dla którego ma być ustawiony klucz podstawowy.

Krok 7.
Podajemy nazwę tabeli pod jaką ma być zapisana w naszej bazie.

Krok 8. 
Ustawienie relacji dla nowo utworzonych tabel w naszej bazie. Pamiętaj, że powinno się wymuszać więzy integralności.

Zadanie 1.

Znajdź 10 najczęstszych rodzajów dysków (czyli 10 najczęściej występujących pojemności) wśród komputerów w centrum. Dla każdej ze znalezionych pojemności podaj liczbę komputerów z takim dyskiem. Posortuj zestawienie nierosnąco względem liczby komputerów z dyskiem o danej pojemności.

Rozwiązanie:

Tworzymy kwerendę która będzie zawierała jedną tabelę komputery, z której wybieramy dwukrotnie pole Pojemnosc_dysku. Wykonujemy Sumy dla pola Pojemnosc_dysku, wybieramy funkcję policz, aby policzyć ile razy występuje dany rodzaj dysku. Ostatnimi elementami zakonczenia zadania jest sortowanie wystąpień dysku Malejąco, oraz ograniczenie występowań dysku do ilości 10 rekordów.

Wyniki działania kwerendy jest następujący:

Na zakończenie zapisujemy kwerendę jako Zadanie 1.

Odpowiedź:

PojemnośćLiczba
300173
20031
50031
80029
70028
60026
40020
29011
16010
22010

Zadanie 2.

Znajdź wszystkie komputery w sekcji A, w których trzeba było przynajmniej dziesięciokrotnie wymieniać podzespoły. Podaj ich numery, a także liczbę wymian podzespołów dla każdego z nich.

Rozwiązanie:

Odpowiedź:

Numer komputeraIlość wymian podzespołów
4211
12311
17112
20212

Zadanie 3.

Pewnego dnia nastąpiła awaria wszystkich komputerów w jednej z sekcji. Podaj datę awarii oraz symbol sekcji, w której nastąpiła awaria.

Rozwiązanie:

Odpowiedź:

Dniem awarii wszystkich komputerów był dzień 23-12, a było to w sekcji Q.

Zadanie 4.

Znajdź awarię, której usunięcie trwało najdłużej (czas liczymy od wystąpienia awarii do momentu zakończenia ostatniej z napraw, jakiej ta awaria wymagała). Podaj numer ogłoszenia, czas wystąpienia awarii i czas zakończenia ostatniej naprawy.

Rozwiązanie:

Odpowiedź:

Podaj numer ogłoszenia: 2087
Czas wystąpienia awarii: 2015-11-05 12:38:46
Czas zakończenia ostatniej naprawy: 2015-11-13 12:38:32

Zadanie 5.

Podaj liczbę komputerów, które nie uległy żadnej awarii o priorytecie większym lub równym 8 (wliczamy w to też komputery, które w ogóle nie uległy awarii).

Rozwiązanie:

Rozwiązanie zadania 5 w SQL:

SELECT 500-Count(*) AS Ilosc_komputerow
FROM (SELECT DISTINCT Numer_Komputera From Awarie WHERE Priorytet >= 8);

Rozwiązanie podane przez Pana Mateusza.

Odpowiedź:

Ilość komputerów: 149.

Matura 2018 (maj). Zadanie 5. Zbiornik

Matura 2018 (maj). Zadanie 5. Zbiornik

Rzeka Wirka co roku wylewała. Aby temu zapobiec, wybudowano na rzece zbiornik retencyjny. W kolejnych wierszach pliku woda.txt znajdują się dane dotyczące dziennego dopływu wody z rzeki Wirki do zbiornika retencyjnego w kolejnych dniach z lat 2008–2017. Plik zawiera 3 653 wiersze. W każdym wierszu podane są dane: data (rrrr-mm-dd) oraz liczba metrów sześciennych wody, jaka dopływała do zbiornika w ciągu doby. Dane oddzielone są znakami tabulacji.

Przykład:
2008-01-01 2275
2008-01-02 2831
2008-01-03 4615
2008-01-04 4084
2008-01-05 3258

Za pomocą dostępnych narzędzi informatycznych podaj odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki.txt, a każdą odpowiedź poprzedź numerem odpowiedniego zadania.

Dodanie danych do programu:

Krok 1. Wybieramy opcje z pliku tekstowego.

Krok 2. Wybieramy odpowiedni plika zawierający dane.

Krok 3. 

Krok 4.

Krok 5.

Krok 6. Wskazanie miejsca gdzie ma importować dane.

Zadanie 1.

Podaj rok, w którym zbiornik retencyjny został zasilony łącznie największą liczbą metrów sześciennych wody z rzeki Wirki.

Rozwiązanie:

Rozpocząć musimy od wybrania roku z daty za pomocą funkcji =ROK(A2).

Do uzyskania odpowiedzi wykorzystamy sum częściowych.

Wybieramy sumy częściowe ze wstążki Dane.

W ustawieniach sum częściowych wybieramy Rok, Suma dla pola m3. Po wykonaniu sum mamy wynik, suma wszystkich metrów sześciennych dla każdego roku.

Do wybrania roku w którym największą liczbą metrów został zasilony zbiornik retencyjny wykorzystamy sortowanie A-Z (lub Z-A).

Odpowiedź:

Rok 2015 – 5364691 m3

Zadanie 2. 

Jaki był najdłuższy okres liczony w dniach, w którym codziennie dopływało do zbiornika retencyjnego co najmniej 10 000 metrów sześciennych wody z rzeki Wirki? Jest tylko jeden taki okres. Podaj datę początkową i datę końcową tego okresu.

Rozwiązanie:

Do obliczenia ilości dni proponuje wykonać następujące czynności. Po pierwsze sprawdzamy którego dnia powyżej 10000 m3 wody dopływa do zbiornika z rzeki. Jeżeli jest tak, należy obliczyć ile dni pod kolei spełnia ten warunek.

Po wykonaniu funkcji: =jeżeli(B2>10000;1;0) i =jeżeli(C3=1;C3+D2;0) należy sprawdzić jaki okres był najdłuższy oraz możemy sprawdzić daty od kiedy to było.

Odpowiedź:

Ilość takich dni to: 55.
Pierwsza data to: 2015-03-17.
Ostatnia data to: 2015-05-10.

Zadanie 3. 

Utwórz i podaj zestawienie łącznej liczby metrów sześciennych wody dopływającej do zbiornika retencyjnego w kolejnych miesiącach 2008 roku (od stycznia 2008 do grudnia 2008). Na podstawie zestawienia wykonaj wykres kolumnowy. Pamiętaj o czytelnym opisie wykresu (tytuł wykresu i opisy osi).

Rozwiązanie:

Przed rozpoczęciem obliczenia należy wybrać z daty nr miesiąca w 2008 roku za pomocą funkcji =MIESIĄC(A2). Następnie do uzyskania odpowiedzi wykorzystam sumy częściowe dla zaznaczonego obszaru m3 i wybrany miesiąc z daty (tylko 2008 rok).

Należy utworzyć wykres dla danych:

Odpowiedź:

m[3]Miesiąc
954331
947302
1094393
6329314
3292035
856286
1665977
1397478
2823429
17072910
22244011
17207212

Zadanie 4. 

Poniżej opisano cykl pracy zbiornika retencyjnego.

1) Na początku doby, zaraz po północy, wykonywany jest pomiar objętości wody w zbiorniku i na jego podstawie realizuje się pozostałe działania.

2) Jeśli pomiar wskazuje w zbiorniku więcej niż 1 000 000 m3 wody, to nastąpiło tzw. przepełnienie zbiornika. W takiej sytuacji, niezwłocznie po wykonaniu pomiaru i stwierdzeniu przepełnienia, nadmiar wody powyżej 1 000 000 m3 jest wypuszczany ze zbiornika.

3) Codziennie rano (o godzinie 8) ze zbiornika wypuszcza się 2% objętości wody wykazanej przez pomiar zaraz po północy. Ilość wypuszczanej wody zaokrągla się w górę do pełnych metrów sześciennych.

Uwaga: pomiar wykonany po północy 2008-02-01 wskazał 338 406 m3 wody.

Uwzględnij opisany cykl pracy zbiornika retencyjnego oraz codzienne dopływy wody z Wirki i przyjmij, że pomiar w dniu 2008-01-01 wskazywał 500 000 m3 wody, a następnie:

a) podaj dzień, w którym pierwszy raz wypuszczono nadmiar wody po przepełnieniu,

b) podaj, w ilu dniach z podanego okresu (tj. od 2008-01-01 do 2017-12-31) w zbiorniku w momencie pomiaru znajdowało się co najmniej 800 000 m3 wody,

c) podaj, ile najwięcej wody znalazłoby się w podanym okresie (tj. od 2008-01-01 do 2017-12-31) w zbiorniku (w momencie pomiaru), gdyby całkowicie zrezygnować z procedury wypuszczania nadmiaru wody powyżej 1 000 000 m3, a zbiornik miałby nieograniczoną pojemność.

Rozwiązanie:

Pkt. a)

Do wykonania punktu należy sprawdzić poprzez utworzenie tabeli z danymi takimi jak na rysunku:

Wykonałem formułę zliczającą ilość wody każdego dnia o północy poprzez policzenie w kolumnie pomocniczej ilość wody o 8 rano, ponieważ każdego dnia rano jest wylewane 2% objętości całkowitej wody.

W kolumnie ilość wody o północy znajduje się formuła:

=JEŻELI(D6+B6>1000000;1000000;D6+B6)

Musiałem wykonać funkcję jeżeli do sprawdzenia czy ilość wody w zbiorniku o północy nie przekracza 1 000 000 m3. Jeżeli przekroczyła ilość wody 1 000 000 m3 to musimy zmniejszyć ilość wody do 1 000 000 m3.

Odpowiedź zaznaczona została na czerwono, ponieważ jest pytanie: Którego dnia pierwszy raz wypuszczono nadmiar wody po przepełnieniu? Wydawać się może, że jest to dzień wcześniej, ale jest błędna odpowiedź, ponieważ tego dnia było równo 1 000 000 m3 wody w zbiorniku, zaś wylano wodę ze zbiornika 2015-04-19. W kolumnie przepełnienie zbiornika wykorzystałem funkcję:

=JEŻELI(C8>=1000000;”tak”;””)

Odpowiedź:

pkt. a)  2015-04-19

Rozwiązanie:

Pkt. b)

To zadanie należy obliczyć wykorzystując funkcję, która policzy nam ilość komórek zawierających 800 000 m3 lub więcej w danym dniu:

=LICZ.JEŻELI(C6:C3658;”>=800000″)

Odpowiedź:

pkt. b) 188

Rozwiązanie:

Pkt. c)

Punkt c w tym zadaniu wykonać należy za pomocą funkcji już wcześniej wykorzystanej licząc ilość wody w zbiorniku, tylko należy usunąć funkcję obniżająca ilość wody w zbiorniku, kiedy przekroczy 1 000 000 m3. Następnie wybrać należy największa wartość za pomocą funkcji MAX.

=MAX(G6:G3658)

Odpowiedź:

pkt. c) 1 399 242 m3

Matura 2018 (maj). Zadanie 2. Krajobraz

Matura 2018 (maj). Zadanie 2. Krajobraz

W pewnym paśmie górskim znajduje się n szczytów, które będziemy przedstawiać jako punkty w układzie kartezjańskim na płaszczyźnie. Wszystkie punkty leżą powyżej osi OX, tzn. druga współrzędna (y) każdego punktu jest dodatnia.

W punkcie (0,0) stoi obserwator. Jeśli dwa szczyty A i B mają współrzędne (xA, yA) oraz (xB, yB), to mówimy, że:

• szczyt A jest dla obserwatora widoczny na lewo od B, jeśli xA/yA < xB/yB;
• szczyt B jest widoczny na lewo od A, jeśli xA/yA > xB/yB.

Wiemy, że żadne dwa szczyty nie leżą w jednej linii z obserwatorem, a zatem dla obserwatora te szczyty nie zasłaniają się nawzajem. Ilustrację przykładowego położenia szczytów można zobaczyć na poniższym rysunku:

W tym przykładzie, patrząc od lewej do prawej strony, obserwator widzi kolejno szczyt D, szczyt A, szczyt B i szczyt C.

Współrzędne szczytów dane są w dwóch tablicach X[1..n] oraz Y[1..n] – szczyt numer i ma współrzędne (X[i], Y[i]).

Zadanie 1. 

Napisz algorytm (w pseudokodzie lub wybranym języku programowania), który znajdzie i poda współrzędne skrajnie lewego szczytu, tzn. widocznego dla obserwatora na lewo od wszystkich pozostałych szczytów.

Specyfikacja:

Dane:

n – liczba całkowita dodatnia
X[1..n] – tablica liczb całkowitych
Y[1..n] – tablica liczb całkowitych dodatnich
Para (X[i], Y[i]) to współrzędne jednego szczytu, i = 1, 2, …, n.
Żadne dwa szczyty nie leżą w jednej linii z obserwatorem.

Wynik:

x, y – współrzędne skrajnie lewego szczytu spośród tych opisanych w tablicach X i Y.

Algorytm:

#include <iostream>
using namespace std;
int main()
{
int n=4;
int X[n]={1,3,2,-2};
int Y[n]={3,4,1,2};
int x,y;
for (int i=0; i<n-1; i++)
  if (float(X[i])/float(Y[i]) < float(X[i+1])/float(Y[i+1])) {
    x = X[i];
    y = Y[i];
  }
cout << x << " " << y << endl;
return 0;
}

Zadanie 2.

Napisz algorytm (w pseudokodzie lub wybranym języku programowania), który przestawi elementy tablic X i Y tak, aby szczyty były uporządkowane w kolejności, w której obserwator widzi je od lewej do prawej strony. Aby otrzymać maksymalną ocenę, Twój algorytm powinien mieć złożoność czasową kwadratową lub mniejszą. Algorytm może używać wyłącznie instrukcji sterujących, operatorów arytmetycznych, operatorów logicznych, porównań i przypisań do zmiennych. Zabronione jest używanie funkcji bibliotecznych dostępnych w językach programowania.

Specyfikacja:

Dane:

n – liczba całkowita dodatnia
X[1..n] – tablica liczb całkowitych
Y[1..n] – tablica liczb całkowitych dodatnich
Para (X[i], Y[i]) to współrzędne jednego szczytu, i = 1, 2, …, n.
Żadne dwa szczyty nie leżą w jednej linii z obserwatorem.

Wynik:

X[1..n], Y[1..n] – tablice zawierające współrzędne danych szczytów, uporządkowanych w kolejności, w której obserwator widzi je od lewej do prawej strony.

Algorytm:

#include <iostream>
using namespace std;
int main()
{
 int n=4;
 int X[n]={1,3,2,-2};
 int Y[n]={3,4,1,2};
 for (int j=0; j<n-1; j++)
   for (int i=0; i<n-1; i++) { 
     if (float(X[i])/float(Y[i]) > float(X[i+1])/float(Y[i+1])) {
       swap(X[i],X[i+1]);
       swap(Y[i],Y[i+1]);
     }
   }
 for (int i=0; i<n; i++) {
   cout << "X[" << i << "]= " << X[i] << " ";
   cout << "Y[" << i << "]= " << Y[i];
   cout << endl;
 }
return 0;
}

Matura 2018 (maj). Zadanie 1. Analiza algorytmu

Matura 2018 (maj). Zadanie 1. Analiza algorytmu

Rozważamy następujący algorytm:

Dane:

n – liczba całkowita dodatnia

Wynik:

p – liczba całkowita dodatnia

p ← 1
 q ← n
 dopóki p < q wykonuj
 s ← (p+q) div 2
 (*) jeżeli s*s*s < n wykonaj
 p ← s+1
 w przeciwnym wypadku
 q ← s

Uwaga: zapis div oznacza dzielenie całkowite.

Zadanie 1.

Podaj wynik działania algorytmu dla wskazanych w tabeli wartości n.

n p
28
64
80

Miejsce na obliczenia.

Algorytm:

#include <iostream>

using namespace std;

int main()
{
 cout << "Podaj n = ";
 int n, p=1;
 cin >> n;
 int q=n;
 int s;
 while (p<q) {
   s = (p+q)/2;
   if (s*s*s<n)
     p=s+1;
   else
     q=s;
 }
 cout << "p = " << p << endl;
 return 0;
}

Zadanie 2.

Podaj najmniejszą oraz największą liczbę n, dla której wynikiem działania algorytmu będzie p = 10.

Miejsce na obliczenia.

Najmniejsza liczba n to 9*9*9+1=730, ponieważ musi być spełniony warunek s3<n. Największa liczba n to 10*10*10=1000, ponieważ musi być spełniony warunek s3<n.

Odpowiedź: Najmniejsza liczba to 730, największa liczba to 1000.

Zadanie 3. 

Dokończ zdanie. Wybierz i zaznacz właściwą odpowiedź spośród podanych. Dla każdej liczby całkowitej n > 1 instrukcja oznaczona w algorytmie symbolem (*) wykona się

A. mniej niż 2*log2n razy.
B. więcej niż n/2, ale mniej niż n razy.
C. więcej niż n+1, ale mniej niż 2n razy.
D. więcej niż n2 razy.

Komentarz:

Odpowiedź A ponieważ, 2*log2n -> 2 * log264 = 2 * 6 = 12. Jest to mniej niż 12.

log264=x
2x = 64
26 = 64

Matura 2011 (maj). Zadanie 2. Potęgowanie

Matura 2011 (maj). Zadanie 2. Potęgowanie

Dana jest następująca specyfikacja oraz algorytm obliczania potęgi o wykładniku naturalnym:

Specyfikacja:

Dane: liczba rzeczywista a oraz liczba naturalna n, n ≠ 0

Wynik: liczba rzeczywista p = an = a * a * a * … * a (n razy)

Algorytm:

krok 1. p = 1 , b = a
krok 2. dopóki n > 0 wykonuj:

a) jeśli a mod 2 ≠ 0, to p = p * b
b) b = b * b
c) n = n div 2

Uwaga:
n div 2 oznacza wynik dzielenia całkowitego n przez 2, a n mod 2 oznacza resztę z dzielenia całkowitego n przez 2.

  1. Przeanalizuj podany algorytm i uzupełnij tabelę wartościami zmiennych p, b oraz n po kolejnych wykonaniach kroku 2 dla dowolnej początkowej wartości a oraz dla początkowej wartości zmiennej n równej 12.
   b   n 
 1  a  12
 1  a2 6
 1 a4 
 a4 a8 
a12  a16 

Opis:
Algorytm w języku c++:

#include <iostream>
using namespace std;
int main()
{
  double a;
  int n;
  cout << "Podaj a: ";
  cin >> a;
  cout << "Podaj n: ";
  cin >> n;
  double p=1, b=a;
  cout << " n = " << n << " b = " << b << " p = " << p << endl;
  while (n>0) {
     if (n%2!=0) p=p*b;
     b=b*b;
     n=n/2;
  cout << " n = " << n << " b = " << b << " p = " << p << endl;
 }
 return 0;
}

Komentarz:
Z algorytmu wynika, iż zmienna b jest podnoszona do kwadratu, czyli b=b*b daje nam: a, a2, a4, a8, a16, a32, itd. Pod b jest podstawiana wartość zmiennej a.
Pod zmienną n przypisywane jest dzielenie całkowite, tzn. dzielenie dwóch liczb całkowitych, gdzie wynikiem jest liczba całkowita.
n=12/2, n=6
n=6/2, n=3
n=3/2, n=1
n=1/2, n=0
Zmienna  p jest zwiększana, tylko wtedy gdy zmienna n jest nieparzysta oraz jest zwiększana tyle razy, ile ma wartość zmienna b w danym kroku.

  1. Uzupełnij poniższą tabelę, wpisując liczby wszystkich mnożeń, wykonywanych przez powyższy algorytm dla podanych wartości n, tzn. liczby wykonanych instrukcji p = p * b i b = b * b.
n liczba mnożeń
2 3
3
4
5
6
7

Opis:
Algorytm w języku c++:

#include <iostream>
using namespace std;
int main()
{
  double a;
  int n;
  cout << "Podaj a: ";
  cin >> a;
  cout << "Podaj n: ";
  cin >> n;
  cout << "n = " << n;
  double p=1, b=a;
  int ile=0;
  while (n>0) {
    if (n%2!=0) {
       p=p*b;
       ile++;
    }
  b=b*b;
  ile++;
  n=n/2;
  }
  cout << " Mnozen = " << ile << endl;
  return 0;
}

Komentarz:
W naszym algorytmie mnożeń, czyli instrukcja b=b*b wykonywana jest tyle ile razy pętla while, zaś instrukcja p=p*b jest wykonywana tyle ile razy instrukcja if.

  1. Podkreśl funkcję, której wartość jest równa liczbie mnożeń wykonywanych przez powyższy algorytm dla wartości n będącej potęgą dwójki:
    • ƒ(n) = 2 + log2n
    • ƒ(n) = 1 + n
    • ƒ(n) = 2n2 – 1
    • ƒ(n) = 2n

Opis:
rozwiązując funkcje dla n = 2, 3, 4, 5 ,6 daje nam:

ƒ(n) = 2 + log2n
ƒ(2) = 2 + log22 = 2 + 1 = 3
ƒ(4) = 2 + log24 = 2 + 2 = 4

ƒ(n) = 1 + n
ƒ(2) = 1 + 2 = 3
ƒ(3) = 4
ƒ(4) = 5
ƒ(5) = 6
ƒ(6) = 7

ƒ(n) = 2n2 – 1
ƒ(2) = 2 * 22 – 1 = 7
ƒ(3) = 17
ƒ(4) = 31
ƒ(5) = 49
ƒ(6) = 71

ƒ(n) = 2n
ƒ(2) = 22 = 4
ƒ(3) = 8
ƒ(4) = 16
ƒ(5) = 32
ƒ(6) = 64