Powtorzenie materialu semestru I: programowanie, struktury danych, sortowanie, bazy danych, projekty webowe
ð Podstawa programowa: I+IISprawdzian obejmuje tematy z lekcji 1-13 semestru I klasy III. Ponizej znajdziesz podsumowanie najwazniejszych zagadnien z kazdego bloku tematycznego. Wykorzystaj to powtorzenie jako checkliste - zaznacz tematy, ktore dobrze znasz, i te, ktore wymagaja dodatkowej pracy.
Pamietaj, ze sprawdzian nie polega na pamieciowym odtwarzaniu - wazniejsze jest zrozumienie zasad i umiejetnosc zastosowania wiedzy w praktyce. Jesli rozumiesz logike algorytmow i potrafisz pisac programy, sprawdzian nie powinien byc trudny.
# Przypomnienie kluczowych konstrukcji Pythona:
# List comprehension
kwadraty = [x**2 for x in range(1, 11)]
# Slownik
uczen = {"imie": "Anna", "oceny": [5, 4, 6]}
# Funkcja
def srednia(lista):
return sum(lista) / len(lista) if lista else 0
# Sortowanie babelkowe - zasada
# Porownujemy pary sasiadow, zamieniamy jesli w zlej kolejnosci
# Powtarzamy az do posortowania
# Szyfr Cezara - zasada
# C = (P + klucz) % 26 (szyfrowanie)
# P = (C - klucz) % 26 (deszyfrowanie)
W tym bloku poznalismy rozne narzedzia wspierajace programowanie i prace z danymi. Warto pamietac o roznicach miedzy poszczegolnymi srodowiskami.
Arkusze kalkulacyjne to potezne narzedzie do analizy danych. Na sprawdzianie mozesz zostac poproszony o napisanie formuly lub wytlumaczenie dzialania funkcji.
Funkcje do pamietania:
=JEZELI(warunek; prawda; falsz)
=WYSZUKAJ.PIONOWO(szukana; tabela; kolumna; dokladnosc)
=LICZ.JEZELI(zakres; kryterium)
=SUMA.JEZELI(zakres_sumy; zakres_kryterium; kryterium)
=SREDNIA(), =MEDIANA(), =DOMINANTA()
=MIN(), =MAX(), =ILE.LICZB()
Bazy danych sa fundamentem wspolczesnych aplikacji. Jezyk SQL pozwala na efektywne wyszukiwanie, filtrowanie i analizowanie danych. Pamietaj o kluczowych poleceniach i ich skladni.
Kluczowe polecenia SQL:
SELECT kolumny FROM tabela WHERE warunek;
SELECT ... ORDER BY kolumna ASC/DESC;
SELECT ... GROUP BY kolumna HAVING warunek;
SELECT ... JOIN tabela2 ON warunek_laczenia;
INSERT INTO tabela VALUES (...);
CREATE TABLE nazwa (kolumna TYP, ...);
Pojecia: klucz glowny (PK), klucz obcy (FK),
relacja, diagram ER, normalizacja
W ostatnim bloku tematycznym pracowaliscie nad projektami zespolowymi. Najwazniejsze pojecia i umiejetnosci z tego bloku to:
Odpowiedz na pytania (po 1 pkt):
a) Czym rozni sie lista od krotki w Pythonie?
b) Jaka jest zlozonosc obliczeniowa sortowania babelkowego?
c) Co robi funkcja WYSZUKAJ.PIONOWO w arkuszu kalkulacyjnym?
d) Co to jest klucz obcy (FOREIGN KEY) w bazie danych?
e) Co to jest wireframe i do czego sluzy?
a) Lista jest MUTOWALNA (mozna zmieniac po utworzeniu),
krotka jest NIEMUTOWALNA (nie mozna zmieniac).
Lista: [1,2,3], krotka: (1,2,3).
b) Zlozonosc pesymistyczna: O(n^2) - kwadratowa.
W najgorszym przypadku wykonuje n*(n-1)/2 porownan.
c) WYSZUKAJ.PIONOWO szuka wartosci w pierwszej kolumnie
tabeli i zwraca wartosc z innej kolumny tego wiersza.
d) Klucz obcy to pole w tabeli odwolujace sie do
klucza glownego w innej tabeli, tworzac relacje.
e) Wireframe to uproszczony szkielet strony WWW,
pokazujacy rozmieszczenie elementow bez kolorow
i grafik. Sluzy do planowania struktury strony.
Napisz funkcje analiza(lista), ktora dla listy liczb calkowitych zwraca slownik z kluczami: "suma", "srednia", "parzyste" (lista parzystych), "nieparzyste" (lista nieparzystych), "posortowana" (lista posortowana rosnaco).
def analiza(lista):
return {
"suma": sum(lista),
"srednia": sum(lista) / len(lista) if lista else 0,
"parzyste": [x for x in lista if x % 2 == 0],
"nieparzyste": [x for x in lista if x % 2 != 0],
"posortowana": sorted(lista)
}
# Test
dane = [7, 2, 9, 4, 1, 8, 3, 6, 5]
wynik = analiza(dane)
for klucz, wartosc in wynik.items():
print(f"{klucz}: {wartosc}")
Tabele: uczniowie(id, imie, nazwisko, klasa), oceny(id, id_ucznia, przedmiot, ocena). Napisz zapytania:
a) Uczniowie z klasy "3a" posortowani po nazwisku
b) Srednia ocen ucznia o id=5
c) Uczniowie ze srednia powyzej 4.5
d) Ile ocen "6" z przedmiotu "Informatyka"
-- a)
SELECT imie, nazwisko FROM uczniowie
WHERE klasa = '3a' ORDER BY nazwisko ASC;
-- b)
SELECT ROUND(AVG(ocena), 2) as srednia
FROM oceny WHERE id_ucznia = 5;
-- c)
SELECT u.imie, u.nazwisko, ROUND(AVG(o.ocena), 2) as sr
FROM uczniowie u JOIN oceny o ON u.id = o.id_ucznia
GROUP BY u.id HAVING AVG(o.ocena) > 4.5;
-- d)
SELECT COUNT(*) as liczba_szostek
FROM oceny
WHERE ocena = 6 AND przedmiot = 'Informatyka';
Zaimplementuj sortowanie przez wstawianie, ktore liczy i zwraca liczbe porownan i przesuniec. Wypisz stan listy po kazdym wstawieniu. Przetestuj na listach: losowej (10 elem.), rosnacej i malejacej. Ktora wymaga najmniej/najwiecej operacji i dlaczego?
def insertion_sort_analiza(lista):
n = len(lista)
porownania = 0
przesuniecia = 0
print(f"Start: {lista}")
for i in range(1, n):
klucz = lista[i]
j = i - 1
while j >= 0:
porownania += 1
if lista[j] > klucz:
lista[j + 1] = lista[j]
przesuniecia += 1
j -= 1
else:
break
lista[j + 1] = klucz
print(f"Krok {i}: {lista}")
return porownania, przesuniecia
# Rosnaca - NAJMNIEJ operacji O(n)
# Malejaca - NAJWIECEJ operacji O(n^2)