Lösa matteuppgifter med kod

Adrian, en niondeklassare som går på Kunskapsskolan i Lund satt på Läscentrum uppe på Lunds Tekniska Högskola och brottades med ett matteproblem. Med hjälp av sina programmeringskunskaper och genom att fråga en student tog han fram två intressanta lösningar. Patwic fick tag i hans labbrapport:

#                 – 
#     _         _| |_
#    |_|       |_ | _| 
#  
#    Ruta 1    Ruta 2   osv...
#

Frågan är: Hur många pinnar behövs i ruta 120?
----------------------------------------------

Med hjälp av tabell ser man snabbt att ökningen följer mönstret

        Pinnar   Ökning
________________________        
Ruta 1:    4        4
Ruta 2:   10        6
Ruta 3:   18        8
Ruta 4:   28       10

osv. Detta kan uttryckas som 2 * n + 2, där n är numret på rutan.
Pythonprogrammet nedan räknar och skriver ut antalet pinnar för varje ruta i intervallet 1 – 120.

summa = 0
max = 120
n = 1
while n <= max:
    summa += 2*n +2
    print("Fig " + str(n) + " har " + str(summa) + " pinnar.")
    n += 1

 

Frågan är då om det finns en formel som skulle kunna hjälpa oss att utföra beräkningen givet att vi känner till ökningen, utan att beräkna varje enskild ruta från 1 till 120. I boken matematisk analys i en variabel finns följande formel för summering av serier. där a = tillväxten dvs, 2 * n + 2.

Jag använde Pythontolken som miniräknare:

>>> # p = (n - m + 1) * ((a * m + a * n) / 2)
>>> n = 120
>>> # p = (120 - 1 + 1) * ((242 + 4) / 2)
>>> p = (120 - 1 + 1) * ((242 + 4) / 2)
>>> p
14760.0

Om jag istället för ruta 120 vill veta hur många pinnar det blir i ruta 5001 så ser det ut såhär:

p = (5001 - 1 + 1) * (((5001 * 2 + 2) + 4) / 2)
>>> p
25025004.0

Men det funkar lika bra med ruta 4 som jag redan har ritat på papper:

p = (4 - 1 + 1) * (((4 * 2 + 2) + 4) / 2)
>>> p
28.0

Ta daaa!

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published.