# 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**

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

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 </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 </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 </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

## 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)