Waar houdt het op?

Introductie

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.

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.


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:
Get N (an integer number)
REPEAT WHILE N > 1
IF N IS EVEN
DIVIDE N BY 2
ELSE
MAKE N TIMES 3 AND ADD 1
OUTPUT N
END REPEAT
Zoals je kunt zien is het niet BASIC, maar het lijkt er nog steeds een beetje op. 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:



We hebben al een programma geschreven dat kan controleren of een nummer oneven is, weet je nog? We hebben de MOD-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.


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. Gebruik WEND om de lus te beëindigen
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 uw WHILE controleert en opslaan voordat u loopt!

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 MOD (even betekent dat MOD van 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 progrmma, maar nu met 3x-1 in plaats van 3x+1

Bronnen

  • http://www.ericr.nl/wondrous/showsteps.html
  • https://en.wikibooks.org/wiki/QBasic/Flow_Control#FOR...NEXT
  • https://www.youtube.com/watch?v=5mFpVDpKX70

(Er zijn nog geen discussies in dit forum)