# Materiały do Matury z Informatyki [TOC] ## Podstawy Programowania ### Pycharm [Instalacja PyCharm](https://www.youtube.com/watch?v=NN5Pht2FRWs) ### Kurs [Cały kurs pythona](https://www.youtube.com/watch?v=NN5Pht2FRWs&list=PLdBHMlEKo8UcOaykMssI1_X6ui0tzTNoH) *1 - 8* - **podstawy** *9 - 12* - bardziej zaawansowane podstawy *13* - **bardzo ważne** *14* - raczej niepotrzebne do matury *15* - **bardzo ważne** *16* - raczej niepotrzebne do matury *17* - przydatne *18 - 20* - nie potrzebne do matury ale **warto wiedzieć** *21 -22* - dla ciekwaskich * [typy zmiennych](https://www.learnpython.org/pl/Zmienne_i_typy) **odc.3** ![](https://i.imgur.com/YFU2xuv.png) o liście(list), krotce(tuple), tablicy(array) będzie w następnych odcinkach * kodowanie znaków - [ASCII](https://pl.wikipedia.org/wiki/ASCII) **odc.3** | Function | Description | | -------- | ----------- | | chr() | Converts an integer to a character | |ord()|Converts a character to an integer | |len()|Returns the length of a string| |str()|Returns a string representation of an object| * **logika Boolowska/algebra Boola** W logice Boolowskiej istniej tylko dwie wartości (prawda/fałsz)(1/0) [prezentacja](http://www-users.mat.umk.pl/~zssz/nsi2013/ab.pdf) prawo de morgana przyda ci się na maturę z matmy ![](https://i.imgur.com/dgHJnfj.png) zdania po obejrzejniu danych odcinków - [1-7 zadania łatwe](https://docs.google.com/document/d/19Ub7inYmBP8mJXLH9DHCyGtydRV4S3n1No3Sn3GPoCA/edit?usp=sharing) - [1-8 trudne](https://docs.google.com/document/d/1lgRvLLmCtMNq6mKtSBBcaHb8bkY1KA-Tnk-uSVmgXIk/edit?usp=sharing) (na pl.spoj.com możesz sprawdzić swój kod) - ## Przydatne funkcje [stronka (nie sprawdzałem wszytkiego ale wygląda legit) ](https://www.korepetycjezinformatyki.pl/przydatne-funkcje-w-jezyku-python/) [split()](https://www.w3schools.com/python/ref_string_split.asp) [sort()](https://www.w3schools.com/python/ref_list_sort.asp) [revers()](https://www.programiz.com/python-programming/methods/list/reverse) [range() dla fora](https://snakify.org/pl/lessons/for_loop_range/) [format()](https://pyformat.info/) - ucz się tylko nowych plus jest tam dużo za dużo rzeczy. Ważne to jest wkładanie coś w śodek tekstu i formatowanie np. wyświetlanie tylko dwóch liczb po przecinku... [enumerate()](https://book.pythontips.com/en/latest/enumerate.html) ## Systemy liczbowe ### system binarny (Dwójkowy) Nie mówiliśmy o dzieleni więc tu jest filmik jak to robić(podobnie jak w dziesiętnym): **[dzielenie](https://www.youtube.com/watch?v=59SLPMkHnZg)** [zadania na system binarne na dole strony](https://eduinf.waw.pl/inf/alg/006_bin/0012.php) [przekrztałcanie z liczby dziesiętnej na inne](https://www.youtube.com/watch?v=VUHwfugYFEA) Mirosław Zelent to Polska legend informatyki(większość inforamtyków uczyła się z jego poradników) [zadania na programowanie](https://docs.google.com/document/d/1oa3-tuORcKKUJRM-kX5Wxay_SUVXy_uvJe3rt2R-Kd8/edit?usp=sharing) ### pamięć komputera <table style="border: 1px solid #aaaaaa; background-color: #f9f9f9; color: black; margin-bottom: 0.5em; margin-left: 1em; padding: 0.2em; float: right; clear: right; text-align: center;"> <tbody><tr> <th colspan="6" style="background-color:#ccf;">Wielokrotności <a href="/wiki/Bajt" title="Bajt">bajtów</a> </th></tr> <tr> <th colspan="3" style="background-color: #ddf;"><a href="/wiki/Przedrostek_SI" title="Przedrostek SI">Przedrostki dziesiętne</a><br>(<a href="/wiki/Uk%C5%82ad_SI" title="Układ SI">SI</a>) </th> <th colspan="3" style="background-color: #ddf;"><a href="/wiki/Przedrostek_dw%C3%B3jkowy" title="Przedrostek dwójkowy">Przedrostki binarne</a><br>(<a href="/wiki/Przedrostek_dw%C3%B3jkowy" title="Przedrostek dwójkowy">IEC 60027-2</a>) </th></tr> <tr> <th>Nazwa</th> <th>Symbol</th> <th>Mnożnik </th> <th>Nazwa</th> <th>Symbol</th> <th>Mnożnik </th></tr> <tr> <td style="text-align:left;text-indent:1em"><a class="mw-selflink selflink">kilobajt</a></td> <td>kB</td> <td>10<sup>3&nbsp;&nbsp;</sup> = 1000<sup>1</sup> </td> <td style="text-align:left;text-indent:1em"><a class="mw-selflink selflink">kibibajt</a></td> <td>KiB</td> <td>2<sup>10</sup> = 1024<sup>1</sup> </td></tr> <tr> <td style="text-align:left;text-indent:1em"><a href="/wiki/Megabajt" title="Megabajt">megabajt</a></td> <td>MB</td> <td>10<sup>6&nbsp;&nbsp;</sup> = 1000<sup>2</sup> </td> <td style="text-align:left;text-indent:1em"><a href="/wiki/Megabajt" title="Megabajt">mebibajt</a></td> <td>MiB</td> <td>2<sup>20</sup> = 1024<sup>2</sup> </td></tr> <tr> <td style="text-align:left;text-indent:1em"><a href="/wiki/Gigabajt" title="Gigabajt">gigabajt</a></td> <td>GB</td> <td>10<sup>9&nbsp;&nbsp;</sup> = 1000<sup>3</sup> </td> <td style="text-align:left;text-indent:1em"><a href="/wiki/Gigabajt" title="Gigabajt">gibibajt</a></td> <td>GiB</td> <td>2<sup>30</sup> = 1024<sup>3</sup> </td></tr> <tr> <td style="text-align:left;text-indent:1em"><a href="/wiki/Terabajt" title="Terabajt">terabajt</a></td> <td>TB</td> <td>10<sup>12</sup> = 1000<sup>4</sup> </td> <td style="text-align:left;text-indent:1em"><a href="/wiki/Terabajt" title="Terabajt">tebibajt</a></td> <td>TiB</td> <td>2<sup>40</sup> = 1024<sup>4</sup> </td></tr> <tr> <td style="text-align:left;text-indent:1em"><a href="/wiki/Petabajt" title="Petabajt">petabajt</a></td> <td>PB</td> <td>10<sup>15</sup> = 1000<sup>5</sup> </td> <td style="text-align:left;text-indent:1em"><a href="/wiki/Petabajt" title="Petabajt">pebibajt</a></td> <td>PiB</td> <td>2<sup>50</sup> = 1024<sup>5</sup> </td></tr> <tr> <td style="text-align:left;text-indent:1em"><a href="/wiki/Eksabajt" title="Eksabajt">eksabajt</a></td> <td>EB</td> <td>10<sup>18</sup> = 1000<sup>6</sup> </td> <td style="text-align:left;text-indent:1em"><a href="/wiki/Eksabajt" title="Eksabajt">eksbibajt</a></td> <td>EiB</td> <td>2<sup>60</sup> = 1024<sup>6</sup> </td></tr> <tr> <td style="text-align:left;text-indent:1em"><a href="/wiki/Zettabajt" title="Zettabajt">zettabajt</a></td> <td>ZB</td> <td>10<sup>21</sup> = 1000<sup>7</sup> </td> <td style="text-align:left;text-indent:1em"><a href="/wiki/Zettabajt" title="Zettabajt">zebibajt</a></td> <td>ZiB</td> <td>2<sup>70</sup> = 1024<sup>7</sup> </td></tr> <tr> <td style="text-align:left;text-indent:1em"><a href="/wiki/Jottabajt" title="Jottabajt">jottabajt</a></td> <td>YB</td> <td>10<sup>24</sup> = 1000<sup>8</sup> </td> <td style="text-align:left;text-indent:1em"><a href="/wiki/Jottabajt" title="Jottabajt">jobibajt</a></td> <td>YiB</td> <td>2<sup>80</sup> = 1024<sup>8</sup> </td></tr></tbody></table> ## Liczby Pierwsze **Liczba pierwsza** - liczba posiadająca dokładnie dwa dzielniki [Zadania](https://docs.google.com/document/d/1-ZJQQ6oj1HlKUDJXHkvybr7EbKpLi7Sn3GLXQ-A5TJA/edit?usp=sharing) ### sito erastotenesa ![](https://upload.wikimedia.org/wikipedia/commons/b/b9/Sieve_of_Eratosthenes_animation.gif) ## Liczby doskonałe [Definicja liczb dokskonałych](https://www.matemaks.pl/liczby-doskonale.html) ### Mniejsze programy * sprawdzanie czy liczba tto dzielnik * wypisanie wyszystkich dzielników liczby * dodawanie cyfr liczby ### Kod ```python suma = 0 x = input("Podaj liczbę") for i in range(2,x-1): if x%i == 0: suma +=i if suma == x: print( "{} JEST liczbą doskonałą".format(x) ) else: print( "{} NIE JEST liczbą doskonałą".format(x) ) ``` ## Rozkładanie liczby na czynniki pierwsze zastanów się i napisz program rokładający liczbę na czynniki pieirwsze. Zastanów się nad tym jak wyświetlić wynik np. * x = 2^3 + 5^15 + 7 * x = 2\*2+5*5\*5\*5\*5\*5\*5\*5+7 ## Funkcje Funkcje to takie małe programy **przykład:** ```python= def dodawanie(a,b): wynik = a + b return wynik ``` Funkcje definuje się przez słowo ```def``` a następnie podaje się nazwa funkcji ``` def nazwa_funkcji()``` w nawiasach podajemy argumenty funkcji ```def nazwa_funkcji(argument1,argument2,argument3...)``` ilość argumentów defniowana jest przez programistę. Można stworzyć funkcję bez argumentów. **Podpowiedź:** jeśli nie wiadomo ile argmuentów będzie podanych np. w sortowaniu listy. to zamiast podawać oddzielnie elemety. można jako argument podać listę. Słowo ```return``` oznacza zwracanie, w tamty miejscu funkcja zwróci wynik i przestanie się wykonywać. Jest to analogiczne do funkcji matematycznych np. sin(x) zwraca pewną wartość, tak samo funkcja w programowaniu. W liceum uczymy się, że fukcja zwraca jedną wartość, jednak to nie prawda; jest wiele funkcji w matematyce które zwracją kilka wartości(listę wartości), albo nawet nie musi być to liczba, a ciąg znaków. (funkcja nie musi nic zwracać, może np. coś zmieniać, lub wyświetlać) Przykład wykorzystania funkcji w większym programie: ```python= def dodawanie(a,b): #defnicja dodawnia wynik = a + b return wynik def wyswietlanie(liczba, zmienna): #defnicja wyświetlania tekst = "zmienna {} równa się {}".format(zmienna, liczba) print(tekst) x = 5 y = 6 z = 0 wyswietlanie(x, 'x') #wykorzystnie funkcji wyswietlanie(liczba, zmienna) wyswietlanie(y, 'y') wyswietlanie(z, 'z') z = dodawanie(x,y) #wykorzystanie funkcji dodawanie(a,b) wyswietlanie(x, 'x') wyswietlanie(y, 'y') wyswietlanie(z, 'z') ``` * jeśli czujesz, że potrzebujesz zadania do ogarnięcia tematu to napisz jakiś program ze spoja, upraszczając kod funkcjami **Po co używa funkcji?** są dwa główne powody dla których używa się funkcji: 1. Aby nie powtarzać kodu. zamiast pisać/kopiować ten sam kod kilka razy można stworzyć funkcję i użyć jej wiele razy. Jest to szybszy sposób napisanie programu oraz ułatwia robienie poprwek, ponieważ wystarczy zmienić to w jednym miejscu, a nie w każdy skopiowanym. 2. Aby łatwiej było domyśłić się co ten kod robi(czytelność kodu). Narazie nikt twojego kodu nie będzie czytał oprócz mine i egzaminatorów i nie jest to skomplikowany, także nie jest to duży problem. Jednak programiści pracują w grupach i ważne jest by osoba czytająca nie musiała spędzać 2h żeby zrozumieć co się dzieje w kodzie. Też czasem wraca się do swojego kodu który napisało się np. kilka miesięcy wcześniej i znów trzeba ogarniać co tam się napisało.(to samo tyczy się nazw zmiennych) przykład: ```python= def update_state(per1,per2): x = per1.wep.dmg y = per1.strong z = per2.def per2.dealdmg(x+y-z) ``` można się domyślać o co chodzi i ostatecznie jest się wstanie ogarnąć xo robi kod ale jest ot trudne ```python= def deal_damage(ataker,defender): weapon_damage = ataker.weapon.damage personal_strenght = atacker.point_of_strength damage = weapon_damage + personal_strength defence = defender.point_of_defence defender.reduce_hp( damge - defence) ``` tutaj dużo łatwiej zrozumieć co się dzieje, nawet jak nie jest się wprowadzonym do projektu. ### Rekurencja Mówimy o krekurencji jeśli w definicji funkcji znajduję się ona sama np. ```python= def funkcja_rec(a,b) print(a) funkcja_rec(b,a) ``` jeśli prześłedzimy te funkcje to zauważymy że ona nigdy się nie wykona do końca bo cały czas wykonuje sama siebie. **Pytanie: co ta funkcja będzie wyświetlać?** najbardziej znane rekurencje to [ciąg Fibonacciego](https://pl.wikipedia.org/wiki/Ci%C4%85g_Fibonacciego) oraz [algorytmu Euklidesa](https://pl.wikipedia.org/wiki/Algorytm_Euklidesa) ### Ciąg Fibonacciego https://ddeby.pl/blog/implementacja-ciagu-fibonacciego-w-python Napisz Dwa programy wypisującą n'tą liczbę fibonacciego: - intefacyjną(Od początku do końca) - rekurencyjną (od Końca do początku) Rekurencyjna część jest bardziej skomplikowana. [Materiały do rekurencji](https://youtu.be/UBMiqy69RoM) ### Algorytmu Euklidesa [Teoria](https://youtu.be/Mt-qP7-V6oU) [Praktyka](https://youtu.be/yYrtZs1v5cw) ## słowniki/mapy ## Algorytmy ### algorytmy na liczbach całkowitych, np.: - [x] reprezentacja liczb w dowolnym systemie pozycyjnym, w tym w dwójkowym i szesnastkowym, - [x] sprawdzanie, czy liczba jest liczbą pierwszą, - [x] sprawdzanie, czy liczba jest liczbą doskonałą - [x] rozkładanie liczby na czynniki pierwsze, - [x] iteracyjna i rekurencyjna realizacja algorytmu Euklidesa, - [x] iteracyjne i rekurencyjne obliczanie wartości liczb Fibonacciego, - [x] wydawanie reszty metodą zachłanną ### lgorytmy wyszukiwania i porządkowania (sortowania),np.: - [x] jednoczesne znajdowanie największego i najmniejszego elementu w zbiorze: algorytm naiwny i optymalny, - [x] algorytmy sortowania ciągu liczb: bąbelkowy, przez wybór, przez wstawianie liniowe lub binarne, przez scalanie, szybki, kubełkowy, ### algorytmy numeryczne,np.: - [ ] obliczanie wartości pierwiastka kwadratowego, - [ ] obliczanie wartości wielomianu za pomocą schematu Homera, - [ ] zastosowania schematu Homera: reprezentacja liczb w różnych systemach liczbowych, szybkie podnoszenie do potęgi, - [ ] wyznaczanie miejsc zerowych funkcji metodą połowienia, - [ ] obliczanie pola obszarów zamkniętych metodą trapezów i prostokątów ### algorytmy na tekstach,np.: - [x] sprawdzanie, czy dany ciąg znaków tworzy palindrom, anagram, - [ ] porządkowanie alfabetyczne, (leksykograficzne) - [x] wyszukiwanie wzorca w tekście, - [x] obliczanie wartości wyrażenia podanego w postaci odwrotnej notacji polskiej, ### algorytmy kompresji i szyfrowania,np.: - [ ] kody znaków o zmiennej długości, np. alfabet Morse'a, kod Huffmana, - [x] szyfr Cezara, - [ ] szyfr przestawieniowy, - [ ] szyfr z kluczem jawnym (RSA), - [ ] wykorzystanie algorytmów szyfrowania, np. w podpisie elektronicznym, ### algorytmy badające własności geometryczne,np.: - [x] sprawdzanie warunku trójkąta, - [ ] badanie położenia punktów względem prostej, - [ ] badanie przynależności punktu do odcinka, - [ ] przecinanie się odcinków, - [ ] przynależność punktu do obszaru, - [ ] konstrukcje rekurencyjne: drzewo binarne, dywan Sierpińskiego, płatek Kocha; # Zadania [link](https://docs.google.com/document/d/1gbnc9kejR1iXiyKmUXEO5H1G2yByLCrEl6-i4z8fv94/edit?usp=sharing) # Excel [podstawy](https://www.youtube.com/watch?v=vDig2c7hbWw&t=6s) - prawdopodobnie znasz [funkcje](https://www.youtube.com/watch?v=xo0KqBB_Ekw) [video 1 ](https://www.youtube.com/watch?v=de44MtdIlw4) [video 2 ](https://www.youtube.com/watch?v=M9Xq70cug80&t=472s) wymagania: - importowanie danych do excel - znajomość funkcji MAX,MIN, SUMA,Jeżeli itd. - podstawowe działanie z dużymi danymu - tworzenie wykresów # Access wymaganie: - rozumienie bazy - rozumienie tabel - kwerendy - podstawowa znajomość SQL'a - relacje - importowanie bazy z plików - klucz główny - funkcje - grupowanie [video 1](https://www.youtube.com/watch?v=_xGnuzcEaao) [dosyć dokładnie opisane zadanie](https://www.youtube.com/watch?v=F8FaiQyDKOc) [tłumaczenie relacji](https://www.youtube.com/watch?v=EzVZ-i1PCEc) [2020](https://www.youtube.com/watch?v=zcrlDt64gjE)