Technikum Klasa I 45 minut PP: I, II (powtorzenie)

Lekcja 30: Powtorzenie i sprawdzian - semestr I

Powtorzenie semestru: algorytmy, programowanie w Pythonie, testowanie

📋 Podstawa programowa: I+II
algorytmyegzaminpowtorzenieprogramowaniesprawdziantest
00:00
Wprowadzenie
5 min
00:05
Teoria
15 min
00:20
Cwiczenia
15 min
00:35
Podsumowanie
10 min
📚

Teoria

Powtorzenie semestru I - najwazniejsze zagadnienia

Ponizej znajdziesz podsumowanie kluczowych tematow z calego semestru. Uzyj tego jako materialu do powtorki przed sprawdzianem.

Zakres sprawdzianu: Algorytmy (schematy blokowe, pseudokod), programowanie w Pythonie (zmienne, warunki, petle, funkcje, listy, stringi), sortowanie, wyszukiwanie, ciagi liczbowe, testowanie programow.

1. Algorytmy - podstawy

Algorytm to skonczony, uporzadkowany zbior jednoznacznych krokow prowadzacych do rozwiazania problemu.

  • Schemat blokowy - graficzna reprezentacja algorytmu (prostokaty = operacje, romby = decyzje, rownolegloboki = wejscie/wyjscie)
  • Pseudokod - opis algorytmu w jezyku zblizonym do naturalnego
  • Zlozonosc obliczeniowa - O(1) stala, O(n) liniowa, O(n^2) kwadratowa, O(log n) logarytmiczna
# Przyklad pseudokodu: Wyszukiwanie liniowe
# WEJSCIE: lista L, szukana wartosc x
# WYJSCIE: indeks x w L lub -1

DLA i OD 0 DO dlugoscLlisty - 1:
    JESLI L[i] == x:
        ZWROC i
ZWROC -1

2. Python - zmienne i typy danych

# Typy danych w Pythonie
liczba_calkowita = 42          # int
liczba_zmiennop = 3.14         # float
tekst = "Hello, World!"        # str
prawda = True                  # bool
lista = [1, 2, 3, 4, 5]       # list

# Konwersja typow
x = int("42")        # str -> int
y = float("3.14")    # str -> float
z = str(42)           # int -> str

# Operatory
print(10 // 3)  # 3   (dzielenie calkowite)
print(10 % 3)   # 1   (reszta z dzielenia)
print(2 ** 10)  # 1024 (potegowanie)

3. Instrukcje warunkowe

# if-elif-else
wiek = int(input("Podaj wiek: "))

if wiek < 0:
    print("Bledny wiek!")
elif wiek < 13:
    print("Dziecko")
elif wiek < 18:
    print("Nastolatek")
elif wiek < 65:
    print("Dorosly")
else:
    print("Senior")

# Operatory logiczne: and, or, not
if wiek >= 18 and wiek <= 65:
    print("Wiek produkcyjny")

4. Petle

# Petla for - znana liczba powtorzen
for i in range(5):          # 0, 1, 2, 3, 4
    print(i, end=" ")

for i in range(2, 10, 2):   # 2, 4, 6, 8
    print(i, end=" ")

# Petla while - powtarzaj dopoki warunek prawdziwy
n = 1
while n <= 100:
    print(n, end=" ")
    n *= 2    # 1, 2, 4, 8, 16, 32, 64

# break i continue
for i in range(10):
    if i == 3:
        continue  # pomin 3
    if i == 7:
        break     # zakoncz na 7
    print(i, end=" ")  # 0 1 2 4 5 6

5. Funkcje

# Definiowanie funkcji
def pole_prostokata(a, b):
    """Oblicza pole prostokata o bokach a i b."""
    return a * b

# Wywolanie
wynik = pole_prostokata(5, 3)
print(f"Pole: {wynik}")  # Pole: 15

# Funkcja z parametrem domyslnym
def powitanie(imie, jezyk="pl"):
    if jezyk == "pl":
        return f"Czesc, {imie}!"
    else:
        return f"Hello, {imie}!"

print(powitanie("Jan"))           # Czesc, Jan!
print(powitanie("Jan", "en"))     # Hello, Jan!

6. Listy i operacje na listach

# Tworzenie i podstawowe operacje
lista = [10, 20, 30, 40, 50]
print(lista[0])     # 10 (pierwszy element)
print(lista[-1])    # 50 (ostatni element)
print(lista[1:3])   # [20, 30] (wycinanie)

# Metody list
lista.append(60)      # dodaj na koniec
lista.insert(0, 5)    # wstaw na pozycji 0
lista.remove(30)      # usun wartosc 30
lista.pop()           # usun ostatni
lista.sort()          # posortuj
lista.reverse()       # odwroc

# List comprehension
kwadraty = [x**2 for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

parzyste = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

7. Operacje na tekstach (stringach)

tekst = "Python jest Super"

print(len(tekst))         # 17 (dlugosc)
print(tekst.lower())      # "python jest super"
print(tekst.upper())      # "PYTHON JEST SUPER"
print(tekst.split())      # ["Python", "jest", "Super"]
print(tekst.replace("Super", "swietny"))
print(tekst[0:6])         # "Python" (wycinanie)
print(tekst[::-1])        # odwrocony tekst

# Sprawdzanie
print("Python" in tekst)   # True
print(tekst.startswith("Py"))  # True
print(tekst.isdigit())    # False

# f-stringi
imie = "Jan"
wiek = 16
print(f"Nazywam sie {imie} i mam {wiek} lat.")

8. Algorytmy sortowania i wyszukiwania

# Wyszukiwanie liniowe - O(n)
def szukaj_liniowo(lista, x):
    for i in range(len(lista)):
        if lista[i] == x:
            return i
    return -1

# Wyszukiwanie binarne - O(log n) - lista MUSI byc posortowana
def szukaj_binarnie(lista, x):
    lewy, prawy = 0, len(lista) - 1
    while lewy <= prawy:
        srodek = (lewy + prawy) // 2
        if lista[srodek] == x:
            return srodek
        elif lista[srodek] < x:
            lewy = srodek + 1
        else:
            prawy = srodek - 1
    return -1

# Sortowanie babelkowe - O(n^2)
def sortuj_babelkowo(lista):
    lista = lista.copy()
    n = len(lista)
    for i in range(n - 1):
        for j in range(n - 1 - i):
            if lista[j] > lista[j + 1]:
                lista[j], lista[j + 1] = lista[j + 1], lista[j]
    return lista

9. Ciag Fibonacciego

def fibonacci(n):
    """Zwraca n-ty wyraz ciagu Fibonacciego (iteracyjnie)."""
    if n <= 0: return 0
    if n == 1: return 1
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b

# Pierwsze 10 wyrazow: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34

10. Testowanie programow

# Uzywaj assert do testowania
def jest_pierwsza(n):
    if n < 2: return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

# Testy
assert jest_pierwsza(2) == True
assert jest_pierwsza(7) == True
assert jest_pierwsza(4) == False
assert jest_pierwsza(1) == False
assert jest_pierwsza(0) == False
assert jest_pierwsza(-5) == False
print("Testy OK!")
Wskazowki do sprawdzianu: (1) Czytaj tresc zadania dokladnie. (2) Zacznij od latwych zadan. (3) Testuj swoj kod "w glowie" - prześledz wykonanie dla przykladowych danych. (4) Pamietaj o przypadkach brzegowych (puste listy, zero, liczby ujemne). (5) Dbaj o wcięcia w Pythonie!
✏️

Zadania

Latwe

Zadanie 1: Pytania teoretyczne

Odpowiedz na pytania (forma ustna lub pisemna):

  1. Czym jest algorytm? Podaj 3 cechy dobrego algorytmu.
  2. Jaka jest roznica miedzy petla for a while?
  3. Co oznacza zlozonosc O(n) i O(n^2)? Podaj przyklady algorytmow.
  4. Dlaczego wyszukiwanie binarne jest szybsze od liniowego?
  5. Co to sa dane brzegowe i dlaczego testujemy dla nich?
Pokaz przykladowe rozwiazanie
1. Algorytm to skonczony, uporzadkowany zbior krokow prowadzacych
   do rozwiazania problemu.
   Cechy: skonczony (zatrzymuje sie), jednoznaczny (kazdy krok
   jest jasny), poprawny (daje prawidlowy wynik).

2. Petla for - uzywamy gdy znamy liczbe powtorzen
   (np. for i in range(10)).
   Petla while - uzywamy gdy nie znamy liczby powtorzen,
   powtarzamy dopoki warunek jest prawdziwy
   (np. while n > 0).

3. O(n) - zlozonosc liniowa - czas rosnie proporcjonalnie
   do rozmiaru danych. Przyklad: wyszukiwanie liniowe.
   O(n^2) - zlozonosc kwadratowa - czas rosnie z kwadratem
   rozmiaru. Przyklad: sortowanie babelkowe.

4. Wyszukiwanie binarne dziala na posortowanej liscie i w kazdym
   kroku odrzuca polowe elementow. Dla 1000 elementow:
   liniowe - max 1000 krokow, binarne - max 10 krokow (log2 1000).

5. Dane brzegowe to skrajne wartosci: pusta lista, zero,
   jeden element, bardzo duza liczba. Testujemy dla nich,
   bo wlasnie tam najczesciej pojawiaja sie bledy.
Srednie

Zadanie 2: Mini-sprawdzian - czesc praktyczna A

Napisz funkcje statystyki(lista), ktora dla podanej listy liczb zwraca slownik z kluczami: "min", "max", "srednia", "suma", "ilosc". Obsluz pusta liste (zwroc None). Napisz testy.

Pokaz przykladowe rozwiazanie
def statystyki(lista):
    """Oblicza statystyki dla listy liczb."""
    if len(lista) == 0:
        return None

    return {
        "min": min(lista),
        "max": max(lista),
        "srednia": sum(lista) / len(lista),
        "suma": sum(lista),
        "ilosc": len(lista)
    }

# Testy
wynik = statystyki([4, 8, 15, 16, 23, 42])
assert wynik["min"] == 4
assert wynik["max"] == 42
assert wynik["suma"] == 108
assert wynik["ilosc"] == 6
assert wynik["srednia"] == 18.0

# Testy brzegowe
assert statystyki([]) == None
assert statystyki([5])["min"] == 5
assert statystyki([5])["max"] == 5
assert statystyki([-3, -1, -2])["min"] == -3
assert statystyki([0, 0, 0])["srednia"] == 0.0

print("Testy statystyk OK!")
Srednie

Zadanie 3: Mini-sprawdzian - czesc praktyczna B

Napisz program, ktory: (1) wczytuje od uzytkownika zdanie, (2) wyswietla liczbe slow, (3) wyswietla najdluzsze slowo, (4) wyswietla zdanie z odwrocona kolejnoscia slow, (5) wyswietla ile razy kazda litera wystepuje w zdaniu (bez spacji, male litery).

Pokaz przykladowe rozwiazanie
zdanie = input("Podaj zdanie: ")
# Przykladowe zdanie: "Python jest swietnym jezykiem programowania"

# 1. Liczba slow
slowa = zdanie.split()
print(f"Liczba slow: {len(slowa)}")

# 2. Najdluzsze slowo
najdluzsze = max(slowa, key=len)
print(f"Najdluzsze slowo: {najdluzsze} ({len(najdluzsze)} znakow)")

# 3. Odwrocona kolejnosc slow
odwrocone = " ".join(slowa[::-1])
print(f"Odwrocone: {odwrocone}")

# 4. Liczba wystapien kazdej litery
tekst_maly = zdanie.lower().replace(" ", "")
licznik = {}
for litera in tekst_maly:
    if litera in licznik:
        licznik[litera] += 1
    else:
        licznik[litera] = 1

# Sortowanie po liczbie wystapien (malejaco)
posortowane = sorted(licznik.items(), key=lambda x: x[1], reverse=True)
print("\nCzestosc liter:")
for litera, ile in posortowane:
    print(f"  '{litera}': {ile}")
Trudne

Zadanie 4: Mini-sprawdzian - czesc praktyczna C

Napisz program, ktory implementuje prosty system ocen uczniow: (1) Funkcja dodaj_ocene(dziennik, uczen, ocena) - dodaje ocene do slownika, (2) Funkcja srednia_ucznia(dziennik, uczen) - oblicza srednia, (3) Funkcja najlepszy_uczen(dziennik) - zwraca ucznia z najwyzsza srednia, (4) Funkcja statystyki_klasy(dziennik) - srednia klasy, najwyzsza i najnizsza ocena. Uzyj slownika {imie: [lista_ocen]}.

Pokaz przykladowe rozwiazanie
def dodaj_ocene(dziennik, uczen, ocena):
    """Dodaje ocene uczniowi. Tworzy wpis jesli nie istnieje."""
    if ocena < 1 or ocena > 6:
        print(f"Bledna ocena: {ocena} (dozwolone 1-6)")
        return
    if uczen not in dziennik:
        dziennik[uczen] = []
    dziennik[uczen].append(ocena)

def srednia_ucznia(dziennik, uczen):
    """Oblicza srednia ocen ucznia."""
    if uczen not in dziennik or len(dziennik[uczen]) == 0:
        return 0
    return sum(dziennik[uczen]) / len(dziennik[uczen])

def najlepszy_uczen(dziennik):
    """Zwraca imie ucznia z najwyzsza srednia."""
    if len(dziennik) == 0:
        return None
    najlepszy = None
    najlepsza_sr = 0
    for uczen in dziennik:
        sr = srednia_ucznia(dziennik, uczen)
        if sr > najlepsza_sr:
            najlepsza_sr = sr
            najlepszy = uczen
    return najlepszy

def statystyki_klasy(dziennik):
    """Zwraca statystyki calej klasy."""
    if len(dziennik) == 0:
        return None
    wszystkie = []
    for oceny in dziennik.values():
        wszystkie.extend(oceny)
    if len(wszystkie) == 0:
        return None
    return {
        "srednia_klasy": sum(wszystkie) / len(wszystkie),
        "najwyzsza": max(wszystkie),
        "najnizsza": min(wszystkie),
        "liczba_ocen": len(wszystkie)
    }

# Testowanie
dziennik = {}
dodaj_ocene(dziennik, "Jan", 5)
dodaj_ocene(dziennik, "Jan", 4)
dodaj_ocene(dziennik, "Jan", 5)
dodaj_ocene(dziennik, "Anna", 6)
dodaj_ocene(dziennik, "Anna", 5)
dodaj_ocene(dziennik, "Anna", 6)
dodaj_ocene(dziennik, "Piotr", 3)
dodaj_ocene(dziennik, "Piotr", 4)
dodaj_ocene(dziennik, "Piotr", 3)

# Srednie uczniow
for uczen in dziennik:
    print(f"{uczen}: oceny={dziennik[uczen]}, "
          f"srednia={srednia_ucznia(dziennik, uczen):.2f}")

# Najlepszy uczen
print(f"\nNajlepszy uczen: {najlepszy_uczen(dziennik)}")

# Statystyki klasy
stat = statystyki_klasy(dziennik)
print(f"Srednia klasy: {stat['srednia_klasy']:.2f}")
print(f"Najwyzsza ocena: {stat['najwyzsza']}")
print(f"Najnizsza ocena: {stat['najnizsza']}")

# Asserty
assert srednia_ucznia(dziennik, "Jan") == 14/3
assert najlepszy_uczen(dziennik) == "Anna"
assert stat["najwyzsza"] == 6
assert stat["najnizsza"] == 3
print("\nWszystkie testy OK!")
🎥

Materialy wideo

Sesja z plusem klasa 6 - powtórka materiału
matematykagryzie
Sesja z plusem klasa 5 - powtórka materiału
matematykagryzie
🎧

Podcasty

✔️

Quiz - sprawdz sie!

📜

Podstawa programowa

← Lekcja 29: Prawo autorskie i licencje Lekcja 31: Semestr II →