7. Całe zadanie: plik wyniki7.txt

Matura próbna grudzień 2024 - Matura z informatyki: arkusze krok po kroku (Python)

Pełne rozwiązanie zadań 7.1-7.4 jednym programem na pełnych plikach: plik wyników `wyniki7.txt` i wykres do zadania 7.2.

hours = []  # (data, godzina, wiatr, fotowoltaika)
with open("energia.txt") as f:
    f.readline()  # wiersz nagłówkowy
    for line in f:
        day, hour, wind, solar = line.split("\t")
        # liczby w pliku mają przecinek dziesiętny
        hours.append((day, int(hour), float(wind.replace(",", ".")), float(solar.replace(",", "."))))
demand = []
with open("zapotrzebowanie.txt") as f:
    f.readline()
    for line in f:
        demand.append(float(line.split("\t")[2].replace(",", ".")))

# 7.1 sumy dzienne: słownik data -> suma
wind_day, solar_day = {}, {}
for day, hour, wind, solar in hours:
    wind_day[day] = wind_day.get(day, 0) + wind
    solar_day[day] = solar_day.get(day, 0) + solar
best_wind = max(wind_day, key=wind_day.get)
best_solar = max(solar_day, key=solar_day.get)

# 7.2 średnia fotowoltaiki dla każdej godziny doby
total = [0] * 25  # indeks = godzina 1..24
count = [0] * 25
for day, hour, wind, solar in hours:
    total[hour] += solar
    count[hour] += 1
average = [round(total[h] / count[h], 2) for h in range(1, 25)]

# 7.3 najdłuższy przedział ciągłego wzrostu: start = godzina, od której produkcja rośnie
start, best = 0, (0, 0)
for i in range(1, len(hours)):
    if hours[i][2] <= hours[i - 1][2]:  # brak wzrostu: nowy przedział zaczyna się tutaj
        start = i
    if i - start > best[1] - best[0]:
        best = (start, i)
first, last = hours[best[0]], hours[best[1]]

# 7.4 bilans magazynu godzina po godzinie, start od zera: najgłębszy spadek poniżej zera
# to energia, której zabrakłoby bez zapasu
from math import ceil

balance, lowest = 0, 0
for (day, hour, wind, solar), need in zip(hours, demand):
    balance = balance + wind + solar - need
    lowest = min(lowest, balance)
reserve = ceil(-lowest)  # z dokładnością do 1 MWh, w górę: mniej by nie wystarczyło

with open("wyniki7.txt", "w", encoding="utf-8") as out:
    print("7.1", best_wind, best_solar, file=out)
    print("7.2", file=out)
    for h in range(1, 25):
        print(h, f"{average[h - 1]:.2f}", file=out)
    print("7.3", f"{first[0]} {first[1]}:00", f"{last[0]} {last[1]}:00", file=out)
    print("7.4", reserve, file=out)

print(open("wyniki7.txt", encoding="utf-8").read())

import matplotlib.pyplot as plt

plt.bar(range(1, 25), average)
plt.xticks(range(1, 25))  # podpis każdej godziny pod kolumną
plt.xlabel("godzina")
plt.ylabel("średnia produkcja [MWh]")
plt.title("Średnia produkcja energii fotowoltaicznej w godzinach doby")
plt.show()

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Matura z informatyki: arkusze krok po kroku·Zaloguj się, aby zapisać postęp na koncie.