# Przygotowania do matury
## Linki
- https://tinyurl.com/dysk-matura-2023 - dysk
- https://meet.google.com/ptf-fvyj-net - Konsultacje online (środa 18:00-18:30)
- https://cplusplus.com/reference - kompendium wiedzy o języku C++
- https://www.algorytm.edu.pl/matura-informatyka - materiały do przygotowania do matury z informatyki
## Spotkania
### 2022-10-14
- Omówienie środowiska i sposobu pracy
- Rozwiązywanie problemów programistycznych
- Zadanie samodzielne:
- Program obliczający średnią arytmetyczną znanej tablicy liczb
#### Praca domowa
- Przerobienie programu do obliczania średniej tak, aby używał plików tekstowych do pobierania danych wejściowych i zapisu wyników działania.
##### Uwagi do rozwiązania
- Styl pisania kodu
- Otwarcie i zamknięcie nawiasów klamrowych :information_source:
Genralnie tak jest lepiej
```cpp=
int main() {
// kod programu
}
```
niż tak:
```cpp=
int main()
{
// kod programu
}
```
- Wcięcia. Nie jest to błąd składniowy, ale znacznie poprawia czytelność, a co za tym idzie ułatwia wykrywanie błędów :warning:
- Spacje przy operatorach dwuargumentowych. Nie jest to błąd składniowy, ale znacznie poprawia czytelność, a co za tym idzie ułatwia wykrywanie błędów :information_source:
:heavy_check_mark:
```cpp=
plik >> dlugosc;
for(int j = 0; j < dlugosc; j++) {
plik >> wartosc;
suma += wartosc;
}
srednia = float(suma) / dlugosc;
```
:x:
```cpp=
plik>>dlugosc;
for(int j=0; j<dlugosc; j++) {
plik>>wartosc;
suma+=wartosc;
}
srednia=float(suma)/dlugosc;
```
- Dobrą praktyką jest trzymanie deklaracji zmiennych w jednym miejscu, najlepiej na początku programu
:heavy_check_mark:
```cpp=
fstream plik;
fstream plikzapis;
float srednia;
int dlugosc = 0, suma = 0, wartosc = 0;
plikzapis.open("srednia.txt");
plik.open("liczby.txt");
```
:x:
```cpp=
fstream plik;
fstream plikzapis;
float srednia;
plikzapis.open("srednia.txt");
plik.open("liczby.txt");
int dlugosc = 0, suma = 0, wartosc = 0;
```
* Poprawność kodu
* Pamiętaj, żeby zamykać otwarte strumienie
```cpp=
int dlugosc=0, suma=0, wartosc=0;
plikzapis.open("srednia.txt");
plik.open("liczby.txt");
plik >> dlugosc;
for(int j=0; j<dlugosc; j++) {
plik >> wartosc;
suma += wartosc;
}
plik.close(); // <------------------- tego zabrakło
srednia = float(suma) / dlugosc;
plikzapis << "Suma liczb w pliku to: " << suma << endl;
plikzapis << "Ilosc liczb w pliku to: " << dlugosc << endl;
plikzapis << "Srednia z liczb w pliku to: " << srednia << endl;
plikzapis.close(); // <----------- tego zabrakło
```
- [link](https://drive.google.com/file/d/1HgqValoiVQBg7jJU8Buu34k5hc0rrO-6/view?usp=sharing) do mojego kodu
### 2022-10-21
- Iteracja i rekurencja
- Silnia
- Potęgowanie
- Ciąg Fibonacciego*
- Algorytm Euklidesa
- Działanie
- Wersja iteracyjna i rekurencyjna
#### Notatki
- Opis algorytmu Euklidesa
> Poniżej przedstawiono wersję obliczania NWD liczb a i b wykorzystującą operację reszty z dzielenia (modulo):
> 1. Oblicz c jako resztę z dzielenia a przez b
> 2. Zastąp a liczbą b, następnie b liczbą c
> 3. Jeżeli wartość b wynosi 0, to a jest szukaną wartością NWD, w przeciwnym wypadku przejdź do kroku 1
- Zrealizowane zagadnienia:
- Algorytmy iteraycjne i rekurencyjne
- Mechanizm działania rekurencji
- Implementacja algorytmów
- Silnia (reurencyjnie i iteracyjnie)
- Obliczanie n-tego wyrazu ciągu Fibonacciego (nie skończone)
#### Praca domowa
- Arkusz 1
- Zadanie 1.1
- Zadanie 1.2
- Zadanie 1.3
- [Rozwiązanie Jurka](https://drive.google.com/file/d/1gGaNFSa_8bsKKf_Delj8mrVw9ocjb5Ci/view?usp=sharing)
### 2022-10-28
#### Plan
- Przegląd pracy domowej
- Możliwości poprawy algorytmów
- Elementy składniowe języka C++, które mogą być przydatne do rozwiązania zadania
- Dokończenie zagadnień implementacji iteracji i rekurencji
- N-ty wyraz ciągu Fibonacciego
- Algorytm Euklidesa
- Wyszukiwanie wartości w zbiorze nieuporządkowanym
- Implementacja iteracyjna
- Złożoność obliczeniowa
#### Praca domowa
- Jeszcze jedno podejście do Arkusza 1.
#### Podsumowanie
- Zagadnienia związane z implementacją rekurencji i podejściem do rozwiązywania zadań związanych z rekurencją zdominowały spotkanie.
### 2022-11-04
#### Plan
- Przegląd pracy domowej
- Omówienie algorytmów
- Wyjaśnienie problemów i wspólna implementacja części niezrozumiałych
- Przeszukiwanie zbiorów nieuporządkowanych
- Wyszukiwanie elementu w zbiorze
- Przeszukiwanie zbirów uporządkowanych
- Wyszukiwanie binarne
#### Praca domowa
- Poprawki w algorytmach dotyczących rozwiązania Arkusza 1
#### Notatki
- Nie udało się zrealizować przeszukiwania zbiorów.
- Zdecydowana większość czasu spotkania została spożytkowana na omówienie implementacji rozwiązania do zadnia z Arkusza 1
### 2022-11-11
#### Plan
- Przegląd pracy domowej (Arkusz 1 - liczby szczęśliwe)
- Wyszukiwanie wartości w tablicy
- Rozwiązanie trywialne z użyciem prostej pętli
- Omówienie algorytmu przeszukiwania binarnego dla uporządkowanych tablic
#### Praca domowa
- Zadanie 1.1 z Arkusza - liczby palindromiczne
- Rozszerzenie programu wykonanego na zajęciach o wyszukiwanie przy pomocy algorytmu wyszukiwania binarnego
### 2022-11-18
#### Plan
- Przegląd implementacji przeszukiwania binarnego
- Konwersja liczb między różnymi systemami liczbowymi
- Implementacja konwersji na system szesnastkowy
- Obsługa łańcuchów znaków w C++
#### Praca domowa
- Rozwiązanie zadania 1.3 z arkusza maturalnego (liczby palindromiczne)
### 2022-12-06
### Plan
- Przegląd rozwiązań próbnej matury z informatyki
### Praca domowa
- Zadanie 3.2
- Zadanie 3.3
#### 2022-12-11 (konsultacje online)
### Plan
- Przegląd pracy domowej z 2022-12-06
- Omówienie sposobu rozwiązania zadania 2.4 z matury próbnej
- Drzewa - reprezentacja i przeszukiwania
### Praca domowa
- Implemnetacja rozwiązania zadania 2.4
#### 2022-12-13
### Plan
- Omówienie rozwiązania zadania 2.4
### Praca domowa