- 10 maja 2024
- Opublikował: Norbert Hanf
- Kategoria: Częste pytania i problemy maturalne
Opiszę pokrótce kilka rodzajów zadań, które są bardzo prawdopodobne do pojawienia się na tegorocznej maturze i które warto sobie przed samą maturą powtórzyć. Będzie to kilka przykładów z Excela, Accessa jak i programowania.
1. MS Access – co może być na maturze z informatyki?
1.1 Klauzula where
Pierwszą rzeczą, która dla części z Was może wydawać się oczywista, lecz jak się okazuje, nie dla wszystkich, jest używanie klauzuli WHERE w MS Access. Do czego jest ona właściwie potrzebna i kiedy ją trzeba stosować? Jest to całkiem proste: gdy przy naszym kryterium może się stworzyć kilka rekordów, a chcemy uogólnić to kryterium dla wszystkich razem. Standardowy przykład dla zilustrowania problemu: chcemy policzyć, ile jest dziewczyn w każdej klasie (imiona dziewcząt i tylko dziewcząt kończą się zawsze na literę a).
Dodajemy pola imię, ID ucznia oraz klasa. Dodajemy sumy, liczymy po ID ucznia i do kryterium w polu imię dodajemy Like ’*a’:
Po takiej operacji dostajemy w wyniku bardzo długą listę wyników, która nie odpowiada temu co byśmy chcieli. Dlaczego? Ponieważ w polu imię mamy grupowanie, zatem taka kwerenda liczy nam ile jest dziewczyn dla każdego imienia we wszystkich klasach. Część osób po prostu by to zignorowała i zrobiła drugą kwerendę na bazie tej, jednak jest to niepotrzebna dodatkowa praca. Wystarczy zamienić grupowanie w polu imię na ‘gdzie’ i otrzymamy poprane rozwiązanie zadania:
1.2 Dodawanie tabel w kwerendzie
Tutaj posłużę się powyższym rozwiązaniem dla ilości dziewczyn. Przy tworzeniu kwerend nie możemy w dowolny sposób dodawać tabel, lecz zawsze należy przemyśleć, które tabele będą nam potrzebne w rozwiązaniu. Dla przykładu: mamy tabelę o nazwie Oceny, zawierającą oceny uczniów. W przypadku wyznaczania liczby uczniów jest nam zupełnie niepotrzebna. Dodajmy ją jednak do naszej kwerendy z poprzedniego zadania:
Po takiej operacji wynik kwerendy będzie prezentował się następująco:
W takiej chwili od razu powinna zapalić się czerwona lampka, że wyników jest zdecydowanie za dużo. Ponadto, wyniki są większe niż liczba w całej szkole! (zawartość tabeli Uczniowie). Problemem jest właśnie tabela Oceny, którą dodaliśmy. Otrzymana kwerenda prezentuje nam w tym momencie liczbę ocen uzyskanych przez dziewczyny we wszystkich klasach.
1.3 Wielokrotne zliczanie
Tutaj posłużę się znanym dla większości uczniów zadaniem Formuła 1 z nowej formuły. Naszym zadaniem jest policzyć liczbę kierowców dla każdego kraju, którzy punktowali w sezonie 2012. Dodajemy pola rok, punkty, ustawiamy odpowiednie kryteria i ewentualnie zmieniamy klauzulę na ‘gdzie’. Następnie wybieramy pole kraj i liczymy po ID kierowcy. Na pierwszy rzut oka wszystko wydaje się być poprawnie.
Jednak bardziej spostrzegawczy zauważą, że przecież jeden zawodnik może startować w wielu Grand Prix i możemy policzyć go wielokrotnie. I to jest prawda. W takiej kwerendzie liczymy ilość pozycji punktowanych zdobytych przez zawodników w ciągu sezonu. Jak sobie z tym poradzić? Aby pozbyć się powtarzających rekordów, zmieniamy nasze pole Policz z powrotem na grupuj według. W ten sposób otrzymujemy następujące wyniki:
Liczba rekordów zredukowała się do 18. Następnie możemy odczytać ilu jest zawodników dla każdego kraju, lub stworzyć drugą kwerendę na bazie tej i tam policzyć zawodników dla każdego kraju. Oszczędzę sobie pisania jak to zrobić, dlatego że już wszyscy powinniście to doskonale wiedzieć :).
1.4 Operacje na datach
Ten temat odnosi się zarówno do Excela jak i Accessa, ponieważ w obu przypadkach będziemy postępować dokładnie tak samo. Dla zilustrowania problemu wykorzystajmy zadanie z matury 2018 Centrum Danych. Dla każdego zgłoszenia mamy jego datę naprawy i zgłoszenia awarii, a chcemy znaleźć awarię, która trwała najdłużej. Rozwiązanie jest dosyć trywialne. Wybieramy ID zgłoszenia, a w drugim polu tworzymy różnicę czasu naprawy i awarii i sortujemy wyniki malejąco:
W ten sposób otrzymujemy następującą tabelę rekordów:
Możemy z niej łatwo odczytać, że naszą odpowiedzią jest zgłoszenie o numerze 2087. Jednak co oznacza ta dziwna liczba 6,9998… przy czasie trwania naprawy? Otóż daty interpretowane są tak naprawdę jako liczby (dokładniej liczba dni od 00.01.1900 [wyprzedzając pytania: tak, zerowego stycznia 1900 r.]), stąd możemy wykonywać operacje takie jak odejmowanie czy porównywanie dat. Wartość zwracana przy odejmowaniu to nic innego jak liczba dni. Stąd można wywnioskować, że 6,9998 będzie odpowiadać różnicy minimalnie mniejszej od pełnego tygodnia. Jednak co w przypadku, gdyby autorzy zadania dodatkowo poprosili nas o zwrócenie czasu w minutach najdłuższej naprawy? W takiej sytuacji wystarczy tylko zauważyć, że skoro otrzymaliśmy w wyniku odejmowania liczbę dni, a każdy dzień ma 24 godziny, zaś każda godzina 60 minut, to otrzymany wynik należy pomnożyć przez 60*24, co w wyniku daje liczbę 1440:
Analogicznie, gdybyśmy chcieli otrzymać czas w godzinach mnożylibyśmy przez 60, a w sekundach przez 86400. Tak jak wspomniałem na początku, w przypadku zadań w Excelu robimy dokładnie to samo.
1.5 Pomoc Excela
Część z Was zapomina, że dla zadań wyspecjalizowanych dla Accessa i Excela nie mamy określonych narzędzi, a zatem możemy korzystać z dowolnego programu dostępnego na maturze. Oczywiście pisanie programów w C++, Javie czy Pythonie nie jest najlepszym rozwiązaniem dla Accessa, jednak z pomocą często może przyjść Excel. Dlatego nie bójcie się korzystać z takich rozwiązań, ponieważ często mogą być o wiele przyjemniejsze i łatwiejsze w implementacji. Przykładem może być zadanie maturalne Biblioteka Podręczników z 2016 roku. Otrzymaliśmy pesele uczniów i wiedząc, że parzystość przedostatniego znaku wyznacza nam płeć, mamy za zadanie policzyć liczbę dziewczyn i chłopców. Oczywiście znając funkcję Mid() w Accesie zadanie nie sprawia większej trudności:
Zliczamy dziewczyny, gdzie za kryterium ustalamy wszystkie parzyste cyfry i oczywiście zmieniamy klauzulę grupuj według na gdzie. Analogicznie dla chłopców zmieniamy kryterium na cyfry nieparzyste. Rozwiązanie szybkie i nietrudne, jednak trzeba znać funkcję Mid() i pamiętać o zmianie klauzul. Tymczasem możemy przecież zaimportować (lub skopiować! – kopiowanie danych z Accessa do Excela jest wyjątkowo proste, spróbuj sam przekopiować zawartość dowolnej tabeli z Accessa do Excela, a zobaczysz jakie to proste!) tabelę Studenci do Excela i w nim za pomocą funkcji FRAGMENT.TEKSTU, którą powinniście dobrze znać, wyciągnąć odpowiednią cyfrę, dodać funkcję modulo (w Excelu to funkcja Mod), a następnie przy użyciu LICZ.JEŻELI zliczyć dziewczyny i chłopców. Oczywiście należy później ten plik Excela oddać razem z pozostałymi plikami i wpisać go w pole pod zadaniem, jako jeden z plików z rozwiązaniem, obok głównego pliku z rozwiązaniem w Accessie.
2. MS Excel na maturze z informatyki
W przypadku Excela, oprócz dat opisanych w punkcie 1.4 nie ma aż tylu schematycznych problemów, które wymagałyby omówienia. Kluczem do sukcesu w Excelu jest umiejętność korzystania z tabel przestawnych oraz rozwiązywania zadań w stylu symulacji, które ostatnimi laty pojawiają się zazwyczaj w formie ostatniego podpunktu zadań z Excela.
2.1 Wyszukiwanie pionowe
Najczęstszym błędem, obok nieużywania tabel przestawnych, który zobaczyłem u swoich uczniów jest nie wykorzystywanie funkcji wyszukiwania pionowego. Zakładam, że każdy z Was wie, jak jej użyć. A jeżeli nie – odsyłam do dokumentacji Excela lub filmów na YouTube. Przybliżmy sobie tylko problem, jaki może wyniknąć z nieużywania tej funkcji. Tym razem za przykład wykorzystamy zadanie z matury podstawowej: Działki. Mając powierzchnię każdej działki oraz stawkę za m2 mamy za zadanie policzyć cenę dla każdej z nich. Stawki prezentują się w następujący sposób:
Możemy tutaj skorzystać ze standardowego rozwiązania, a mianowicie użyć w Excelu funkcji JEŻELI w podobny sposób:
Jednak tu od razu powinna zapalić się czerwona lampka. Nie dość, że takie wyrażenie jest długie, łatwo się w nim pomylić, to jakbyśmy mieli 10 rodzajów działek, to musielibyśmy stworzyć aż 9 zagnieżdżonych w sobie funkcji. Do takich zadań właśnie stworzona jest funkcja WYSZUKAJ.PIONOWO:
Jedyne co musimy zrobić to dodać ręcznie tabelę z wartościami stawek, a potem jedną formułę składającą się z iloczynu powierzchni i wartości zwracanej przez wyszukiwanie.
2.2 Typy komórek
Należy pamiętać jedną istotną rzecz: typy liczbowe są domyślnie wyrównane zawsze do prawej strony komórki, zaś tekstowe do lewej, stąd łatwo je można rozróżnić. Trzeba to zapamiętać, ponieważ niektóre funkcje mają z góry ustalony typ parametrów i nie konwertują ich samemu na potrzeby użycia. Tutaj zamieściłem krótki przykład:
Funkcja MOD do wyznaczania reszty z dzielenia bez problemu potrafi przyjąć tekst jako parametr i konwertuje go na liczbę. W przypadku operacji dodawania, Excel również przekonwertuje nam tekst ”123” na liczbę i stąd otrzymujemy w wyniku 246. Jednak funkcja SUMA powinna działać dokładnie tak samo jak dodawanie w komórce poniżej, a zwraca nam 123. Jak widać, SUMA nie potrafi sobie radzić z wartościami tekstowymi i interpretuje je wynikowo jako 0.
2.3 Zaokrąglanie
W bardzo wielu zadaniach na maturze z informatyki autorzy proszą nas o zaokrąglenie wyniku lub części operacji. Warto więc zwrócić uwagę na dwa aspekty z tym związane. Po pierwsze, dokładnie czytajcie, najlepiej kilka razy w jaki sposób powinny być zaokrąglone wartości. Czy jest to zaokrąglenie w górę, w dół i czy może mamy zaokrąglić wartość odejmowaną od obecnej, czy sam wynik odejmowania. To wszystko może wpłynąć na wynik końcowy i liczbę zdobytych punktów za zadanie. Drugim aspektem jest ”zaokrąglanie” za pomocą opcji formatowania komórkowego dostępnego między innymi w zakładce Narzędzia Główne we wstążce. Posłużyłem się cudzysłowem dlatego właśnie, iż tego nie możemy nazywać zaokrągleniem i powinniśmy uważać na korzystanie z tego narzędzia. Już ilustruję przykład tłumaczący co się dzieje nie tak z naszymi danymi:
Liczbę 1,2345 zaokrągliłem najpierw funkcją ZAOKR, a następnie korzystając z narzędzi głównych. Kolejno oba wyniki pomnożyłem przez 1000. W pierwszym wypadku dostajemy oczekiwany wynik 1230, a w drugim zamiast 1230 mamy 1234,5. To dlatego, że tak naprawdę, zaokrąglając przy użyciu formatowania komórki dochodzi tylko do wizualnego ucięcia miejsc po przecinku, a w rzeczywistości w tej komórce kryje się ciągle początkowa liczba.
3. Programowanie – typowe zagadnienia na maturze
Na koniec zostało nam do omówienia programowanie. Będę tutaj równolegle omawiał rozwiązania dla Pythona oraz C++.
3.1 Konwersje systemów liczbowych
System binarny jest nierozłączną częścią matury i jak już pewnie mieliście okazję przekonać się o tym, zadania na różnych systemach liczbowych pojawiają się bardzo często. Z tego też powodu, warto pamiętać jak się tworzy funkcje konwertujące między systemami liczbowymi. W przypadku, gdy chcemy wykonać konwersję na system dziesiętny z dowolnego systemu pomocną rękę wystawiają nam twórcy zarówno Pythona jak i C++. W Pythonie mamy funkcję int(), konwertującą podany tekst w danym systemie na wartość w systemie dziesiętnym, zaś w C++ alternatywą jest funkcja strtol(). Co jednak w przypadku odwrotnym, kiedy to chcemy wartość dziesiętną przekonwertować na inny system? Tutaj niestety C++ całkowicie rozkłada ręce, zaś Python udostępnia ubogie rozwiązanie. Są nim funkcje bin(), oct() oraz hex(), które odpowiednio konwertują naszą liczbę dziesiętną na system binarny, ósemkowy i szesnastkowy. Jednak, żeby uogólnić nasze rozwiązanie dla każdego systemu, znając matematyczny sposób na konwersję przez reszty z dzielenia możemy w łatwy sposób napisać funkcje:
3.1.1 Konwersje systemów liczbowych w Pythonie
1 2 3 4 5 6 7 8 9 10 11 | def odwrotna(liczba, system): l = int(liczba) wynik='' while l > 0: znak = l % system if znak > 9: znak = 55 + znak znak = chr(znak) wynik = str(znak) + wynik l //= system return wynik |
3.1.2 Konwersje systemów liczbowych w C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | string konwersja (int liczba, int system) { int l = liczba; string wynik = ""; while (l > 0) { int znak = l % system; if (znak > 9) { znak += 55; wynik = char(znak) + wynik; } else { char z = znak+'0'; wynik = z + wynik; } l /= system; } return wynik; } |
Funkcje te, zarówno jak int i strtol działają dla systemów od 2 do 36. Ograniczenie górne wynika z maksymalnej wartości liter alfabetu w tablicy ASCII. Nie polecam oczywiście uczyć się tych funkcji na pamięć, lecz zrozumieć sposób ich pisania, aby w ewentualnej potrzebie na maturze potrafić stworzyć własną implementację.
3.2 Przydatne funkcje
Jeśli chcecie przypomnieć i utrwalić sobie funkcje w C++ to zachęcam do sprawdzenia pliku “Tablice IT C++” dostępnego na naszej grupie na Facebooku. Funkcje opisane są tam z przykładami oraz potrzebnymi do ich użycia bibliotekami. Z kolei osoby piszące maturę w Pythonie odsyłam na naszego bloga, do kategorii poświęconej Pythonowi: https://www.korepetycjezinformatyki.pl/python/
Tam znajdują się dwa wpisy o funkcjach przydatnych do matury.
Ciekawe tematy informatyczne są poruszane również w innych kategoriach. Zajrzyj w wolnej chwili tutaj, aby dowiedzieć się m.in. o pierwszej pracy w IT lub o tym, jak wygląda dzień programisty: https://www.korepetycjezinformatyki.pl/nauka-przyjemna-i-skuteczna/
Wpisy, które mogą Cię zainteresować: