Tallmønstre (S2/R2)#
Relevante kompetansemål
utforske rekursive sammenhenger ved å bruke programmering og presentere egne framgangsmåter (S2/R2)
Løkker er spesielt egnet til å utforske mønstre i og egenskaper ved tallfølger. Dette er fordi løkker kan brukes til å gjenta operasjoner svært mange ganger etter hverandre med høy hastighet.
Oppgave 1:
a. Forklar hva programmet nedenfor gjør uten å kjøre programmet. Hvilken tallfølge får vi? Skriv ned de 7 første leddene.
b. Kjør programmet. Fikk du de resultatene du forventet?
c. Juster programmet slik at det skriver ut et gitt antall ledd i tallfølgen, ikke bare det siste.
c. Modifiser programmet slik at det finner summen av de 100, 1000, 10 000 og 100 000 første tallene i følgen. Hint: Du bør opprette en variabel s som sparer på summen av tallene i løkka.
Løsningsforslag a
Tallfølgen ovenf kan beskrives med den rekursive formelen \(a_{n+1} = a_{n} + 2n + 2\). De sju første leddene er 1 3 7 13 21 31 43.
Løsningsforslag c
a = 1 # første verdi i tallfølgen
ledd = 4 # antall ledd i tallfølgen
s = 0
for n in range(ledd):
s = s + a
a = a + 2*n + 2
print("Summen av", ledd, "ledd er:", s)
Oppgave 2:
Se på denne tallfølgen og beskriv mønsteret:
1 4 7 10 13 …
a. Lag et program som skriver ut et visst antall tall fra tallrekka.
b. Lag et program som summerer de 100, 1000 og 10 000 første tallene i tallfølgen. Ser du noe mønster?
Løsningsforslag a
tall = 1
ledd = 10
for n in range(ledd):
print(tall)
tall = tall + 3
Løsningsforslag b
tall = 1
ledd = 4
s = 0
for n in range(ledd):
s = s + tall
tall = tall + 3
print(s)
Oppgave 3:
Lag et program som regner ut denne summen:
\(\sum_{n = 2}^{16} n^2 + n + 1\)
Løsningsforslag
s = 0
n = 2
while n <= 16:
s = s + (n**2 + 1 + n)
n = n + 1
print("Summen er lik:", s)
Oppgave 4:
Fibonnacifølgen er en kjent tallfølge med heltall der hvert tall etter det første er summen av de to foregående. Følgen starter slik: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …
Lag et program som finner tall nr. n i rekka.
Løsningsforslag
x0 = 0
x1 = 1
n = 100
for i in range(n):
print(f'Fibonaccitall nr. {i+1} er: {x1}')
x0_ny = x1
x1 = x1 + x0
x0 = x0_ny
Oppgave 5:
Lag et program som viser at summen av denne rekka er 4.5:
\(\displaystyle 3 + 1 + \frac{1}{3} + \frac{1}{9} + \frac{1}{27} + ...\)
Løsningsforslag
Rekka kan skrives slik: \(3 + \sum^{\infty}{i=0} \frac{1}{3**i}\). Vi kan ikke summere et uendelig antall ledd på en datamaskin. Derfor tilnærmer vi svaret ved å bruke svært mange ledd, for eksempel 10 000.
N = 10000
s = 3
for i in range(N+1): # for at rekka summes fra og med 0 til og med N
s = s + 1/3**i
print(s)