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.