Uitwerking opgaven Programmeermethoden NA werkcollege 9 Dinsdag 14 november 2017 NB: - Er zijn uiteraard meerdere oplossingen mogelijk. - De opgaven onder vraag 2 kunnen soms met NumPy operatoren korter worden opgeschreven. Dit mag, maar is niet verplicht, op het tentamen is de uitgebreide notatie ook correct. 1. a. def gk(B): gr = 0 kl = 0 for i in range(1, len(B)): if B[i] > B[gr]: gr = i if B[i] < B[kl]: kl = i return gr, kl 1. b. def stijgdaal(B): aantal = 2 # eerste, laatste per definitie lokaal extreem for i in range(1, len(B) - 1): if B[i-1] < B[i] and B[i+1] < B[i]: aantal += 1 elif B[i-1] > B[i] and B[i+1] > B[i]: aantal += 1 return aantal 1. c. Een rij is oplopend gesorteerd wanneer er geen lokale extremen voorkomen buiten het eerste en laatste element en 0 de index van het kleinste getal is. def opso(B): gr, kl = gk(B) if stijgdaal(B) == 2 and kl == 0: return True return False 1. d. def lang(B): langste = 0 lengte = 1 for i in range(1, len(B)): if B[i] > B[i-1]: lengte += 1 else: # Stijging gestopt. Reset. lengte = 1 if lengte > langste: langste = lengte return langste 1. e. Wanneer de lengte van de langste serie aaneengesloten lijst-elementen gelijk is aan de lengte van de lijst, dan is de lijst oplopend gesorteerd. def opso2(B): return lang(B) == len(B) 2. a. def duos(T): aantal = 0 for i in range(0, m - 1): for j in range(i + 1, m): if T[i,j] and T[j,i]: aantal += 1 return aantal 2. b. def druk(T): drukst = 0 drukst_verbindingen = 0 for station in range(0, m): verbindingen = 0 for ander in range(0, m): if station != ander: verbindingen += T[station,ander] verbindingen += T[ander,station] if verbindingen >= drukst_verbindingen: drukst = station drukst_verbindingen = verbindingen return drukst 2. c. def bereik(T, i, j): for overstap in range(0, m): if T[i,overstap] and T[overstap,j]: return True return False 2. d. def aantal(T, i): bezocht = 1 k = i + 1 while k < m: if bereik(T, i, k): i = k bezocht += 1 k += 1 return bezocht