Ga naar hoofdinhoud

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 rij n (de laatste rij) invullen, en range is exclusief aan de bovenkant.

Specificatie

  • Input: tabel, items, capaciteit.
  • Output: niets. De functie verandert tabel zelf.

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

Python
Code-omgeving wordt voorbereid…
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:

Python
Code-omgeving wordt voorbereid…
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 →.