Waar houdt het op?

Introduction

Het 3x + 1 probleem is fascinerend. Dit is hoe het werkt. Neem een ​​willekeurig getal, zeg 5. Als het oneven is, doe dan het getal keer 3 en 1 er bij. Dat geeft 16. Als het even is, neem dan de helft. Dat geeft 8. Herhaal dit totdat je op 1 komt. Het vreemde is dat het altijd bij 1 eindigt. Maar dit is nog nooit bewezen. Een ex-collega van mij is al zijn hele leven bezig om nog grotere getallen te proberen om te kijken of ze misschien niet op 1 eindigen. Mensen hebben rare hobbies, maar toch, dit is meer zinvol dan Pokemon Go spelen, of niet?

Kijk maar eens naar een paar voorbeelden:

5, 16, 8, 4, 2, 1
6, 3, 10, 5, 16, 8, 4, 2, 1
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1

Zoals je kunt zien, leiden de nummers uiteindelijk tot 1, na een aantal stappen. Het probleem is officieel bekend als het Collatz-probleem, naar de Duitse wiskundige Lothar Collatz.

Mr. Collatz kijkt intens naar een lamp

Vaak gebruiken programmeurs wat we 'pseudocode' noemen. Dat is normaal Engels dat een beetje lijkt op een programma. Met behulp van pseudocode kun je een oplossing voor een programmeringsprobleem omschrijven, zonder te hoeven letten op de regels van de taal. Hier is de pseudo-code voor ons probleem:

VRAAG OM INPUT  N  (een geheel getal)
HERHAAL ZOLANG n > 1
  ALS N EVEN IS
    DEEL N DOOR 2
  ANDERS
    VERANDER N IN N MAAL 3 EN DAN PLUS 1
  PRINT N
EINDE HERHAAL

Zoals je kunt zien is het niet programmeren, en het is nu Nederlands (het mag net zo goed in Engels). Je kunt alle woorden gebruiken die je maar wilt in pseudocode. Het belangrijkste is dat je blokken ( indents ) gebruikt om herhaling en keuzes te tonen (lus en als).

Een flowchart voor deze pseudocode zou er als volgt uitzien:

kon ik maar zo netjes tekenen

We hebben al een programma geschreven dat kan controleren of een nummer oneven is, weet je nog? We hebben de modulo-operator (%) gebruikt.

In games

Veel spellen hebben zeer gedetailleerde en complexe logica. Misschien lijkt het er niet op als je een spel als Monopoly of Blackjack speelt, maar als je al de kleine regels en details begint op te schrijven, kom je er er achter dat de spellen veel ingewikkelder zijn dan je eerst dacht.

Om die regels te analyseren, zijn pseudocode en flowcharts belangrijke instrumenten. Enkele andere hulpmiddelen zijn Karnaugh kaarten, Venn diagrammen, statusdiagrammen, activiteitdiagrammen, beslissingstabellen en beslissingsbomen. Voordat je achter de computer duikt om een ​​complex spel te maken, probeer eerst eens de spelregels op papier te analyseren.

Patience spelen heeft niet eens een einde, dat gaat altijd door

Opdracht

In deze oefening zal je de 3x + 1 serie weergeven voor een getal dat de gebruiker invoert.

  1. Vraag de gebruiker om het nummer n met een vriendelijke vraag
  2. Gebruik while om te controleren of de serie is beëindigd (bij 1)
  3. Als n even is, deel het door 2
  4. Als n oneven is, vermenigvuldig met 3 en tel 1 op
  5. Druk n af
  6. Vergeet niet de accolades bij start en einde van de while

Als je wilt, kan je ook een variabele bijhouden voor het aantal keren dat je de lus hebt gedaan. Noem die variabele bijvoorbeeld 'teller'.

Pas op met:

  • Maak geen eindeloze lus. Zorg ervoor dat u je while controleert en opslaan voordat je op RUN drukt!

Verwacht resultaat

Beginnend met 13:

Met welk getal zal ik beginnen?
13
40
20
10
5
16
8
4
2
1

Veelgemaakte fouten

  • Verkeerd gebruik van modulo ( even betekent dat modulo met 2 gelijk is aan nul, oneven betekent dat het 1 is)
  • Een oneindige lus door n niet goed te verlagen of te controleren

Extra uitdaging

Maak hetzelfde programma, maar nu met 3x-1 in plaats van 3x+1

Bronnen

(Er zijn nog geen discussies in dit forum)