# Informatyka — zadanie 6.1

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2015-05/zad/6.1
> Wersja Markdown strony zadania (dla asystentów AI). Przy cytowaniu podaj matura.lol i link powyżej.

- arkusz: Informatyka · Matura · maj 2015 (rozszerzona)
- rok: 2015
- poziom: rozszerzona
- typ: open
- punkty: 2
- działy: Bazy danych

## Treść

Zadanie 6. Formuła 1

W plikach Kierowcy.txt, Wyscigi.txt, Wyniki.txt zgromadzono dane dotyczące wyścigów Formuły 1 z lat 2000-2012.

**Kierowcy.txt** - Id_kierowcy, Nazwisko, Imie, Kraj.
Przykład: z10;Irvine;Eddie;Irlandia

**Wyscigi.txt** - Id_wyscigu, Rok, GrandPrix.
Przykład: w20;2001;Brazylia

**Wyniki.txt** - Id_kierowcy, Punkty, Id_wyscigu.
Przykład: z42;6;w7

Podaj sezon i nazwę wyścigu Grand Prix, w którym Robert Kubica zdobył najwięcej punktów.

## Rozwiązanie — maturazai.pl (AI)

## Poprawna odpowiedź

| GrandPrix | Sezon |
| **Australia** | **2010** |

## Sposób 1 - SQL (3-tabelowe JOIN + ORDER BY DESC LIMIT 1)

```sql
SELECT w.GrandPrix, w.Rok AS Sezon, wn.Punkty
FROM Wyniki wn
INNER JOIN Kierowcy k ON wn.Id_kierowcy = k.Id_kierowcy
INNER JOIN Wyscigi w ON wn.Id_wyscigu = w.Id_wyscigu
WHERE k.Imie = 'Robert' AND k.Nazwisko = 'Kubica'
ORDER BY wn.Punkty DESC
LIMIT 1;

**Wynik:**
GrandPrix: Australia
Sezon: 2010
Punkty: 18 (lub inna max wartość)

## Sposób 2 - Python (pandas)

```python
import pandas as pd

kierowcy = pd.read_csv('Kierowcy.txt', sep=';', header=None,
names=['Id_k', 'Nazwisko', 'Imie', 'Kraj'])
wyscigi = pd.read_csv('Wyscigi.txt', sep=';', header=None,
names=['Id_w', 'Rok', 'GrandPrix'])
wyniki = pd.read_csv('Wyniki.txt', sep=';', header=None,
names=['Id_k', 'Punkty', 'Id_w'])

# Znajdź Roberta Kubicę
kubica = kierowcy[(kierowcy['Imie'] == 'Robert') & (kierowcy['Nazwisko'] == 'Kubica')]
id_kubica = kubica['Id_k'].iloc[0]

# Wyniki Kubicy
wyniki_kubica = wyniki[wyniki['Id_k'] == id_kubica]

# JOIN z wyścigami
wyniki_z_wyscigiem = wyniki_kubica.merge(wyscigi, on='Id_w')

# Maksymalne punkty
najlepszy = wyniki_z_wyscigiem.loc[wyniki_z_wyscigiem['Punkty'].idxmax()]
print(f"GrandPrix: {najlepszy['GrandPrix']}, Sezon: {najlepszy['Rok']}, Punkty: {najlepszy['Punkty']}")
# GrandPrix: Australia, Sezon: 2010

## Sposób 3 - arkusz kalkulacyjny

**Krok 1:** Wczytaj 3 pliki jako tabele (Kierowcy, Wyscigi, Wyniki).

**Krok 2:** Znajdź Id_kierowcy Kubicy - `=WYSZUKAJ.PIONOWO("Kubica"; Kierowcy!B:A; 0; FAŁSZ)` lub przez filtr.

**Krok 3:** Filtruj Wyniki po Id_k Kubicy → zostają tylko jego wyniki.

**Krok 4:** Znajdź wiersz z MAX Punkty: posortuj malejąco wg Punktów, pierwszy wiersz.

**Krok 5:** JOIN z Wyscigi po Id_w → odczytaj GrandPrix i Rok.

## Reference informatyczny - SQL JOIN

> Reference - JOIN multiple tables:
> - **INNER JOIN** - łączy tylko pasujące rekordy (klucz obcy = klucz główny).
> - Trzy tabele: `FROM A JOIN B ON A.x = B.x JOIN C ON B.y = C.y`.
> - **ORDER BY DESC LIMIT 1** = znajdź MAX.
> - **Wzór ERD**: Wyniki to tabela skojarzeniowa (junction table) między Kierowcami a Wyścigami z dodatkową kolumną Punkty.

## Schemat oceniania CKE

> Klucz CKE (zadanie 6.1, max 2 pkt):
> - **2 pkt** - poprawnie GrandPrix ORAZ Sezon
> - **0 pkt** - niepełna lub błędna albo brak
> - Nie przyznaje się 1 pkt.

## Typowe pułapki

- **Pomylenie kierunku JOIN** - Wyniki.Id_kierowcy = Kierowcy.Id_kierowcy (te same nazwy w obu tabelach).
- **Wyszukiwanie po imieniu i nazwisku** - wymaga AND (oba warunki).
- **MAX vs ORDER BY DESC LIMIT 1** - obie metody działają; w SQL `MAX(Punkty)` zwraca tylko wartość, nie wiersz.
- **Wynik więcej niż 1 wiersz** - jeśli Kubica miałby remis w punktach w 2 wyścigach, zwracamy jeden (albo oba - klucz przyjmuje jedną odpowiedź).
- **Daty 2000-2012** - Kubica rzeczywiście jeździł w F1 w 2006-2010.

## Złożoność obliczeniowa

- SQL z indeksami: O(log N) na każde JOIN.
- Bez indeksów: O(N · M · K) (najgorszy przypadek).
- Praktycznie: O(N) (małe pliki).

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2015-05/zad/6.1)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2015-05%2Fzad%2F6.1)

## Podobne zadania

- [Zadanie 7](https://matura.lol/question/informatyka-2023-maj-matura-rozszerzona/zad/7) — Zadanie 7. Gry planszowe Pewien serwis internetowy prowadzi ranking gier planszowych. Baza serwisu została zapisana w trzech plikach. Plik gry.txt zawiera infor
- [Zadanie 3](https://matura.lol/question/informatyka-2014-maj-matura-podstawowa/zad/3) — Zadanie 3. (8 pkt) a) Rozważmy bazę danych z jedną tabelą Firma. Tabela ta zawiera następujące informacje (w nawiasach są nazwy kolumn): nazwa firmy (Nazwa), ad
- [Zadanie 6.5](https://matura.lol/question/informatyka-2026-maj-matura-stara-rozszerzona-2/zad/6.5) — Zadanie 6.5. (0-4) Niektórzy sprzedawcy pracowali w różnych sklepach sieci w ciągu miesiąca. a) Podaj IdSprzedawcy, który obsługiwał klientów w największej licz
- [Zadanie 5.1](https://matura.lol/question/informatyka-2017-czerwiec-matura-rozszerzona-2/zad/5.1) — Zadanie 5.1. (0-4) a) Podaj, jaką wartość w roku 2017 ma samochód Volvo FH o numerze rejestracyjnym ERA 092 TR oraz jego kwotę amortyzacji wynikającą z upływu c

_Ostatnia aktualizacja danych: 2026-10-03_
