Volle kratten
Gebruik items en capacity om op de eerste regel het aantal volledig gevulde kratten te tonen.
Een buurthuis verdeelt materialen over kratten. Alleen het aantal volle kratten weten is niet genoeg: de overgebleven spullen moeten ook mee. Je programma moet daarom onderscheid maken tussen complete groepen, een rest en het totale aantal benodigde kratten.
Een operator is een teken dat een bewerking aangeeft. Je kent optellen met + en aftrekken met -. In Go gebruik je * voor vermenigvuldigen, / voor delen en % voor de rest van een gehele deling.
De variabelen in deze les bevatten gehele getallen, van het type int. Als beide waarden bij / gehele getallen zijn, blijft ook de uitkomst geheel. Bij onze niet-negatieve aantallen vertelt die uitkomst hoeveel complete groepen je kunt maken.
Met % stel je een andere vraag: hoeveel voorwerpen blijven buiten die complete groepen? Het is geen percentageberekening. De combinatie van deling en rest maakt duidelijk of alles precies past.
| Berekening | Betekenis bij 23 spullen en ruimte voor 5 |
|---|---|
| 23 / 5 | Vier volle kratten. |
| 23 % 5 | Drie spullen blijven over. |
| 4 * 5 + 3 | Samen weer de oorspronkelijke 23 spullen. |
package main
import "fmt"
func main() {
items := 23
capacity := 5
fmt.Println(items / capacity)
fmt.Println(items % capacity)
fmt.Println((items + capacity - 1) / capacity)
}4 3 5
Het voorbeeld bewaart aantal en capaciteit apart. De twee berekeningen gebruiken dezelfde waarden, maar beantwoorden verschillende vragen. Bekijk de uitvoer en controleer op papier dat vier groepen van vijf plus drie losse spullen samen drieëntwintig vormen.
Een berekening lezen verandert de oorspronkelijke variabele niet. items / capacity levert een nieuwe waarde op; items blijft drieëntwintig. Je kunt het oorspronkelijke aantal daarom later opnieuw gebruiken.
Vier volle kratten vervoeren maar twintig spullen. Voor de drie overgebleven spullen is nog een krat nodig, zodat je vijf kratten moet meenemen. Je wilt datzelfde rekenidee ook gebruiken als er niets overblijft.
Voor niet-negatieve aantallen en een positieve capaciteit kun je rekenen met (items + capacity - 1) / capacity. Je telt eerst net genoeg bij om een onvolledige laatste groep in de gehele deling mee te laten tellen. De oefening gebruikt kleine aantallen; uitzonderlijke grote getallen en hun grenzen komen later terug.
Go rekent vermenigvuldigen, delen en rest vóór optellen en aftrekken uit. Daarom geeft 2 + 5 * 3 zeventien, terwijl (2 + 5) * 3 eenentwintig oplevert. Met haakjes laat je een deelberekening eerst uitvoeren.
Bij de kratberekening zijn de haakjes rond items + capacity - 1 dus nodig. Zonder die groepering zou de deling maar een deel van de bedoelde optelling gebruiken. Schrijf de berekening uit en controleer welke waarden als eerste samen horen.
package main
import "fmt"
func main() {
items := 28
capacity := 7
fmt.Println(items / capacity)
fmt.Println(items / capacity + 1)
}4 5
De foutvariant neemt achtentwintig spullen en zeven plekken per krat. Vier kratten zijn precies genoeg, maar gehele deling plus één vraagt er vijf. Altijd één toevoegen lost een onvolledige groep op en gaat tegelijk fout bij een verdeling zonder rest.
Onze afspraak is dat de capaciteit positief is. Delen of een rest berekenen met een variabele die nul bevat, is geen geldige verdeling. In latere lessen leer je zulke invoer eerst controleren.
In de oefening staan 47 spullen en zes plekken per krat klaar. Bereken achtereenvolgens volle kratten, losse spullen, alle benodigde kratten en de kosten bij vier euro per krat. Druk iedere gevraagde waarde op een eigen regel af, zonder extra tekst.
Gebruik items en capacity om op de eerste regel het aantal volledig gevulde kratten te tonen.
Toon op de tweede regel hoeveel spullen na de volle kratten overblijven.
Toon op de derde regel hoeveel kratten nodig zijn om alle spullen mee te nemen, ook de laatste onvolledige groep.
Toon op de vierde regel de totale kosten als iedere benodigde krat vier euro kost.
De volgende les maakt het verschil tussen gehele en kommagetallen expliciet.
Voer je code uit en ontdek
wat je hebt gemaakt.
Je hoeft het niet in één keer goed te doen. Na het uitvoeren zie je hier welke stappen al kloppen.