Bouwsteen 4 — vul de hele tabel
Leerdoel: je voegt een buitenste lus toe die alle rijen invult. Met bouwsteen 2 en bouwsteen 3 wordt dit één regel werk extra.
Wat we willen
De tabel volledig invullen. Rij 0 staat al vol nullen (bouwsteen 2),
rij 1 t/m n vullen we via vul_rij uit bouwsteen 3.
for i in range(1, n + 1):
vul_rij(tabel, items, i, capaciteit)
Eén lus meer dan de vorige stap.
Waarom range(1, n + 1)?
- Start bij 1: rij 0 is al klaar (basisgeval).
- Eind bij
n + 1: we willen ook rijn(de laatste rij) invullen, enrangeis exclusief aan de bovenkant.
Specificatie
- Input:
tabel,items,capaciteit. - Output: niets. De functie verandert
tabelzelf.
Voorspel
We runnen vul_volledige_tabel op het voorbeeld van de les. Wat staat er
straks in tabel[5][11]?
Antwoord
40 — de beste totaalwaarde voor 5 items binnen W=11.
Dat is de eindcel die je bij vul de tabel in met de hand uitrekende.
Bouw zelf en test
Tip
Bepaal n met len(items) en roep vul_rij aan in een lus over
range(1, n + 1), in stijgende volgorde: elke rij leunt op de rij
erboven.
Antwoord
def vul_volledige_tabel(tabel, items, capaciteit):
n = len(items)
for i in range(1, n + 1):
vul_rij(tabel, items, i, capaciteit)
Onderzoek
Print de tabel rij voor rij om hem naast de tabel van
vul de tabel in te leggen. Twee nieuwe dingen
in de print: f"{c:2}" maakt elk getal twee tekens breed, en
" ".join(lijst) plakt de teksten in een lijst aan elkaar met twee
spaties ertussen:
Verwachte uitvoer
0 1 2 3 4 5 6 7 8 9 10 11
i=0: 0 0 0 0 0 0 0 0 0 0 0 0
i=1: 0 1 1 1 1 1 1 1 1 1 1 1
i=2: 0 1 6 7 7 7 7 7 7 7 7 7
i=3: 0 1 6 7 7 18 19 24 25 25 25 25
i=4: 0 1 6 7 7 18 22 24 28 29 29 40
i=5: 0 1 6 7 7 18 22 28 29 34 35 40
Identiek aan de tabel die je met de hand invulde. ✓
Door naar het complete algoritme →.