from literal import Literal from memory_cell import MemoryCell from memory_manager import MemoryManager class MemoryArray: def __init__(self, size): """Initialisiert ein Speicherarray mit einer bestimmten Größe.""" assert isinstance(size, Literal), "Size must be a Literal or MemoryCell" assert isinstance(size.value, int), "Size must be an int" assert size.value > 0, "Size must be positive" self.size = size.value self.cells = [MemoryCell() for _ in range(self.size)] def __getitem__(self, index): """Gibt den Wert einer Speicherzelle zurück.""" assert isinstance(index, Literal), "Index must be a Literal or MemoryCell" assert isinstance(index.value, int), "Index value must be an int" assert 0 <= index.value < self.size, "Index out of bounds" return self.cells[index.value] def __setitem__(self, index, value): """Setzt den Wert einer Speicherzelle.""" assert isinstance(index, Literal), "Index must be a Literal or MemoryCell" assert isinstance(index.value, int), "Index value must be an int" assert 0 <= index.value < self.size, "Index out of bounds" assert isinstance(value, Literal), "Value must be a Literal or MemoryCell" self.cells[index.value].set(value.value) def __len__(self): """Gibt die Größe des Speicherarrays zurück.""" return self.size def __str__(self): """Gibt eine Liste der Speicherzellen zurück.""" return str([cell.value for cell in self.cells]) def __iter__(self): """Gibt einen Iterator über die Speicherzellen zurück.""" return iter(self.cells) def indices(self): """Gibt eine Liste der Indizes der Speicherzellen zurück.""" return [Literal(i) for i in range(self.size)] def reset_counters(self): """Setzt alle Zähler auf 0 zurück.""" for cell in self.cells: cell.reset_counters() if __name__ == "__main__": import random size = Literal(5) a = MemoryArray(size) for i in a.indices(): a[i] = Literal(random.randint(1,100)) print(a) sum = MemoryCell(0) for cell in a.cells: sum += cell print(sum) MemoryManager.print_statistics()