Metainformationen zur Seite
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

informatik:algorithmisch:aufgabe:pythonobjects [2024/07/16 13:21] – angelegt technikinformatik:algorithmisch:aufgabe:pythonobjects [2024/07/17 07:33] (aktuell) – [Aufgabe 7] technik
Zeile 331: Zeile 331:
 </file> </file>
 ++++   ++++  
 +
 +==== Aufgabe 8 ====
 +Solarmodule sind in aller Munde. Diese bestehen aus einzelnen Solarzellen. Diese haben einen Spannung von ca. 0,6 Volt. Damit eine Solarzelle also 6V liefert, müssen 10 Solarzellen zu einem Modul zusammengeschaltet werden. Wir nehmen vereinfachend an, dass eine einzelne Solarzelle immer 1A an Strom liefert. Damit liefert eine einzelne Zelle P = U * I = 0,6V * 1A = 0,6 Watt. Ein Solarmodul hat immer eine Seriennummer. 
 +
 +  - Schreibe eine Klasse "solarmodule" und eine Klasse "solarcell". Überlege dir, welche Attribute und Methoden beide Klassen mindestens brauchen. 
 +  - Man soll nur Solarmodule mit 120, 210 und 390 Watt erzeugen und an ihrer Seriennummer unterscheiden können. Es sind also nur bestimmte Anzahlen an Solarzellen pro Solarmodul zulässig. Seriennummer, die Anzahl der Solarzellen und die Leistung des gesamten Solarmodul sollen sich abfragen lassen.
 +  - einzelne Solarzellen in einem Modul können verschattet sein. Früher brach dann die Leistung des gesamten Moduls komplett ein. Ein findiger Ingenieur hat eine technische Lösung dafür entwickelt. Damit er die auch umsetzen kann, muss man herausfinden können, wie viele Solarzellen in einem Modul gerade verschattet sind. Bei Verschattung bricht die Spannung einer Solarzelle auf unter 0,3V ein. Erweitere die Klasse "solarmodule" um eine entsprechende Methode, die die Anzahl der verschatteten Solarzellen zurückgibt.
 +
 +<WRAP center round tip 80%>
 +=== Tipps ===
 +Du musst dir für ein Solarmodul immer sehr viele Solarzellen erzeugen. Am besten geht das mit einem Array von Solarzellen, dass du mit einer Methode erzeugen kannst. Ob du das im Hauptprogramm oder innerhalb der Klasse "solarmodule" machst, ist im Prinzip gleichwertig.   
 +</WRAP>
 +
 +++++ Klicke hier für einen Lösungsansatz |
 +<file python solars.py>
 +import random
 +     
 +class solarmodule:   
 +    def __init__(self, serial, watts):
 +        # Wenn die Wattwerte stimmen - Objekt bauen
 +        if (watts == 120) or (watts == 210) or (watts == 390):
 +            self.watts = float(watts)
 +            self.cells = self.buildCellArray()
 +        # Sonst mit Fehlermeldung abbrechen
 +        else:
 +           print("Modulecreation not successful!")
 +           quit()
 +        self.serial = serial
 +           
 +    # Modul mit Zellen füllen
 +    def buildCellArray(self):
 +        # Anzahl der Zellen aus der Wattzahl errechnen
 +        cellCount = self.watts/0.6
 +        # Array für Zellen erzeugen
 +        cells = []
 +        # Array mit Zellobjekten füllen
 +        for i in range(int(cellCount)):
 +            cells.append(solarcell(i,0.6))
 +        return cells
 +
 +    # Zufällige Zelle unter 0.6 Volt setzen
 +    # Count gibt die Anzahl der zu veränderenden Zellen an
 +    def shadowCells(self, count):
 +        for j in range(count):
 +            # Wende auf eine zufällige Zelle die Methode "setCurrent" an, die Zelle wird von der Hilfsmethode returnRandomElement() zurückgegeben
 +            # Das ist eine üble Zeile, daher nochmal langsam:
 +            # self                            : Schlüsselwort, dass die Methode returnRandomElement() des aktuellen Objekts aufgerufen werden soll
 +            # returnRandomElement(self.cells) : Aufruf der Methode, Übergabe des Zellarrays. Die Methode returnRandomElement() nimmt gibt eine zufällige Zelle zurück
 +            # setCurrent(0.2)                 : Auf diese Zelle wird die Methode setCurrent() der Klasse solarcell angewendet
 +            # Also kurz                       : "Setze die aktuelle Spannung einer beliebigen Zelle auf 0.2V."
 +            self.returnRandomElement(self.cells).setCurrent(0.2)
 +
 +    # Anzahl der momentan verschatteten Zellen zurückgeben
 +    def returnShadowedCells(self):
 +        count = 0
 +        for h in range(len(self.cells)-1):
 +            if self.cells[h].actualCurrent < 0.6:
 +                count += 1
 +        return count
 +
 +    # Hilfsmethode: Eine zufällige Zelle zurückgeben            
 +    def returnRandomElement(self, array):
 +        zufallszahl = random.randint(0,len(array)-1)
 +        return array[zufallszahl] 
 +        
 +class solarcell:
 +    def __init__(self, id, actualCurrent):
 +       self.id = id
 +       self.actualCurrent = actualCurrent
 +    
 +    # Methode zum Setzen der Zellspannung (current)
 +    def setCurrent(self, current):
 +        self.actualCurrent = current
 +
 +# Some Testing
 +
 +# Modul erzeugen     
 +module01 = solarmodule(1, 390)
 +
 +# Modul mit zufälliger Anzahl verschatteter Zellen ausstatten
 +module01.shadowCells(random.randint(0,100))
 +
 +# Anzahl der verschatteten Zellen ausgeben
 +print(f'Es gibt gerade {module01.returnShadowedCells()} verschattete Zellen.' )
 +</file>
 +++++