m Matura-Online.pl Rozwiązania zadań maturalnych
MINP-R0-100-2405 • Otwarte rozszerzone • 10 pkt • Trudność: ★★★★☆

Zadanie 7

Matura z informatyki, maj 2024, poziom rozszerzony

Wymaganie:

II.4) przygotowując opracowania rozwiązań złożonych problemów, posługuje się wybranymi aplikacjami w stopniu zaawansowanym: b) stosuje zaawansowane funkcje arkusza kalkulacyjnego w zależności od rodzaju danych […]. P.II.3) przygotowuje opracowania rozwiązań problemów, posługując się wybranymi aplikacjami: b) gromadzi dane pochodzące z różnych źródeł w tabeli arkusza kalkulacyjnego, korzysta z różnorodnych funkcji arkusza w zależności od rodzaju danych, filtruje dane według kilku kryteriów, dobiera odpowiednie wykresy do zaprezentowania danych, analizuje dane, korzystając z dodatkowych narzędzi, w tym z tabel i wykresów przestawnych.

Treść zadania

Zadanie 7. Hurtownia

Pewna hurtownia sprzedaje jabłka. W pliku jablka.txt znajduje się 2500 wierszy z danymi dotyczącymi sprzedaży jabłek od 3 stycznia 2022 roku do 31 grudnia 2022 roku. W każdym wierszu podane są dane opisujące jedną transakcję sprzedaży, oddzielone pojedynczymi znakami tabulacji:

  • data sprzedaży zapisana w formacie rrrr-mm-dd
  • nazwa odmiany jabłka
  • kod, który określa, czy odmiana jest: L — letnia, J — jesienna czy Z — zimowa
  • numer NIP klienta (13-znakowy tekst)
  • liczba kilogramów sprzedanego towaru.

Fragment pliku jablka.txt:

2022-01-03    Jonagold     Z    128-29-15-591   470
2022-01-03    Jonagold     Z    192-09-72-275   410
2022-01-03    Jonagored    Z    140-36-11-559   242

Cena sprzedaży jednego kilograma jabłek zależy od odmiany jabłek. W pliku cennik.txt jest podana cena w złotych 1 kg jabłek każdej odmiany.

Fragment pliku cennik.txt:

Alwa         2,9
Antonowka    3,2
Cortland     3,2

Zadanie 7.1. (0–2) Dla każdego klienta policz, ile kupił on łącznie (we wszystkich swoich transakcjach) kilogramów jabłek odmian zimowych. Podaj numery NIP trzech klientów, którzy kupili najwięcej jabłek odmian zimowych (Z), oraz podaj dla każdego z nich liczbę kilogramów jabłek odmian zimowych przez nich kupionych.

Zadanie 7.2. (0–2) Przychód z pojedynczej sprzedaży to cena sprzedaży jednego kilograma jabłek pomnożona przez liczbę kilogramów. Podaj całkowity przychód hurtowni uzyskany w całym okresie. Podaj nazwę odmiany jabłek, która dała największy przychód.

Zadanie 7.3. (0–3) Wykonaj zestawienie, w którym dla każdego miesiąca roku 2022 podasz nazwę najbardziej popularnej odmiany w tym miesiącu, czyli takiej, której w danym miesiącu sprzedano najwięcej. Na podstawie wykonanego zestawienia utwórz wykres kolumnowy ilustrujący wielkości sprzedaży najpopularniejszych odmian jabłek w poszczególnych miesiącach. Pamiętaj o czytelnym opisie wykresu — na osi X umieść dla każdego miesiąca jego nazwę połączoną z nazwą najbardziej popularnej odmiany w tym miesiącu, dodaj opis osi Y i tytuł wykresu.

Zadanie 7.4. (0–3) Hurtownia ma system premiowania klientów hurtowych. Klient otrzymuje przy zakupie rabat, którego wysokość zależy od łącznej ilości jabłek zakupionych do tej pory przez tego klienta, wliczając w to jabłka zakupione w bieżącej transakcji. Wysokość rabatu za każdy kilogram w bieżącej transakcji wynosi:

  • 5 gr, jeśli klient dotychczas zakupił co najmniej 15 000 kg, ale mniej niż 20 000 kg,
  • 10 gr, jeśli klient dotychczas zakupił co najmniej 20 000 kg.

Podaj, w ilu transakcjach hurtownia udzieliła rabatu, oraz podaj łączną wartość tych rabatów w złotych.

Przykład z arkusza: jeśli przed 1.04.2022 klient 192-09-72-275 kupił łącznie 14 900 kg, a 1.04.2022 kupuje 410 kg, to po tej transakcji ma 15 310 kg i dostaje 5 gr rabatu na każdy kilogram tej transakcji (5 gr · 410 = 20,50 zł). Klient, który miał 19 900 kg i kupuje 242 kg, ma potem 20 142 kg i dostaje 10 gr za kilogram (24,20 zł).

Źródło: arkusz CKE MINP-R0-100-2405. Otwórz oryginalny PDF

Rozwiązanie

Odpowiedzi z zasad oceniania CKE:

  • 7.1. 164-61-25-530 — 12185 kg; 159-34-45-151 — 12047 kg; 091-99-74-175 — 11769 kg
  • 7.2. przychód 2 422 669,40 zł, odmiana Reneta
  • 7.3. styczeń – Gala 14017, luty – Gala 14969, marzec – Jonagored 15079, kwiecień – Gala 19404, maj – Gala 17382, czerwiec – Reneta 18661, lipiec – Melba 21216, sierpień – Reneta 19054, wrzesień – Reneta 20881, październik – Reneta 17065, listopad – Reneta 19755, grudzień – Jonagored 13425 (kg) oraz wykres kolumnowy
  • 7.4. 180 transakcji z rabatem, łącznie 3 089,10 zł

Najwygodniej rozwiązać arkuszem kalkulacyjnym lub Pythonem z pandas.

Załadowanie danych (Python):

import pandas as pd
jablka = pd.read_csv("jablka.txt", sep="\t", header=None,
                    names=["data","odmiana","kod","nip","kg"])
jablka["data"] = pd.to_datetime(jablka["data"])
cennik = pd.read_csv("cennik.txt", sep="\t", header=None,
                     names=["odmiana","cena"])
cennik["cena"] = cennik["cena"].str.replace(",", ".").astype(float)

7.1. Top-3 klientów wg sumy kg odmian zimowych:

zimowe = jablka[jablka["kod"] == "Z"]
top3 = zimowe.groupby("nip")["kg"].sum().sort_values(ascending=False).head(3)
print(top3)

7.2. Przychód całkowity i odmiana z najwyższym przychodem:

d = jablka.merge(cennik, on="odmiana")
d["przychod"] = d["kg"] * d["cena"]
print(f"Całkowity przychód: {d['przychod'].sum():.2f} zł")
print(d.groupby("odmiana")["przychod"].sum().idxmax(),
      d.groupby("odmiana")["przychod"].sum().max())

7.3. Najpopularniejsza odmiana w każdym miesiącu + wykres:

jablka["miesiac"] = jablka["data"].dt.to_period("M")
pop = (jablka.groupby(["miesiac","odmiana"])["kg"].sum()
              .reset_index()
              .sort_values(["miesiac","kg"], ascending=[True,False])
              .drop_duplicates("miesiac"))
print(pop[["miesiac","odmiana","kg"]])

import matplotlib.pyplot as plt
plt.bar(pop["miesiac"].astype(str), pop["kg"])
plt.xlabel("Miesiąc 2022")
plt.ylabel("Sprzedaż najpopularniejszej odmiany [kg]")
plt.title("Najpopularniejsze odmiany jabłek 2022")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("wykres_7_3.png", dpi=150)

7.4. Transakcje przetwarzamy w kolejności z pliku (chronologicznej). Dla każdej sprawdzamy stan zakupów klienta łącznie z bieżącą transakcją:

laczne = {}          # nip -> kg kupione do tej pory
ile_rabatow = 0
suma_rabatow = 0     # w groszach, żeby uniknąć błędów zaokrągleń
for _, r in jablka.iterrows():
    nip, kg = r["nip"], int(r["kg"])
    laczne[nip] = laczne.get(nip, 0) + kg
    if laczne[nip] >= 20000:
        stawka = 10
    elif laczne[nip] >= 15000:
        stawka = 5
    else:
        stawka = 0
    if stawka > 0:
        ile_rabatow += 1
        suma_rabatow += stawka * kg
print(ile_rabatow, suma_rabatow / 100)

Wyniki zapisujemy do wyniki7.txt, poprzedzając każdy numerem zadania (7.1–7.4).

Typowy błąd / pułapka

Uwaga: (1) w 7.2 ceny w pliku mają przecinek dziesiętny — przy wczytywaniu trzeba go zamienić na kropkę albo ustawić separator dziesiętny, inaczej cena zostanie tekstem; (2) w 7.1 sumujemy kilogramy tylko odmian zimowych (Z) — zasady oceniania dają 1 pkt za odpowiedź, w której tego nie uwzględniono; (3) w 7.3 „najpopularniejsza” to odmiana, której sprzedano najwięcej kilogramów; (4) w 7.4 o stawce decyduje stan zakupów po dodaniu bieżącej transakcji („wliczając w to jabłka zakupione w bieżącej transakcji”), a transakcje trzeba przetwarzać chronologicznie.

Strona arkusza CKE z treścią zadania

Zadanie 7 - informatyka 2024 PR
Strona arkusza CKE 2024 PR informatyka - zadanie 7 (Hurtownia jabłek). Na podstawie: CKE 2024 Oryginalny PDF CKE, str. 13

Rozwiązanie

Zadanie “hurtownia jabłek” to klasyczna analiza danych — w arkuszu (Excel/LibreOffice/Google Sheets) lub w Pythonie z pandas. SQL też się sprawdzi.

Wersja SQL (gdy zaimportujemy oba pliki jako tabele jablka i cennik):

-- 7.1. Top-3 klientów wg kg odmian zimowych
SELECT nip, SUM(kg) AS suma
FROM jablka
WHERE kod = 'Z'
GROUP BY nip
ORDER BY suma DESC
LIMIT 3;

-- 7.2. Całkowity przychód + odmiana z najwyższym przychodem
SELECT SUM(j.kg * c.cena) AS przychod_calkowity
FROM jablka j JOIN cennik c USING (odmiana);

SELECT j.odmiana, SUM(j.kg * c.cena) AS przychod
FROM jablka j JOIN cennik c USING (odmiana)
GROUP BY j.odmiana
ORDER BY przychod DESC
LIMIT 1;

-- 7.3. Najpopularniejsza odmiana w każdym miesiącu
SELECT miesiac, odmiana, suma_kg
FROM (
  SELECT strftime('%Y-%m', data) AS miesiac, odmiana, SUM(kg) AS suma_kg,
         RANK() OVER (PARTITION BY strftime('%Y-%m', data) ORDER BY SUM(kg) DESC) AS r
  FROM jablka GROUP BY miesiac, odmiana
) WHERE r = 1
ORDER BY miesiac;

Zadanie 7.4 wymaga stanu kumulowanego klienta — w czystym SQL przez window functions z SUM(kg) OVER (PARTITION BY nip ORDER BY data, rowid). W praktyce na maturze najwygodniej rozwiązać 7.4 w Pythonie lub VBA.

Rozumiesz, jak to rozwiązać?

Przećwicz podobne typy zadań w aplikacji

matury-online.pl ma tysiące zadań pogrupowanych po dziedzinach. Sprawdź, czy temat „arkusz kalkulacyjny, analiza danych, zestawienia, wykres, rabat” zrobisz samodzielnie.

Otwórz matury-online.pl