Løsningsforslag til utvalgte oppgaver i kapittel 2#
Oppgave 2.1#
S = 0 # Skal bli summen av kvadrattallene
for i in range(1, 21):
S = S + i**2
print(S)
2870
Oppgave 2.2#
Jeg legger merke til at differansen mellom hvert tall i rekken er 3. Så jeg kan bruke en for-løkke som starter på 1 og teller opp med 3 til 27 688. I løkka legger jeg til det nåværende tallet i summen:
sum = 0
for i in range(1, 27689, 3):
sum = sum + i
print(sum)
127784735
Oppgave 2.3#
S = 0
n = 100000
for i in range(1, n+1):
S = S + 1/i**2
print(S)
1.6449240668982423
print((6*S)**0.5)
3.141583104326456
Vi ser at vi har fått en god tilnærming til \(\pi\).
Oppgave 2.4#
antall = 0 # Skal bli antall tall som er delelige med 7 og ikke et multiplum av 5
n = 1000 # starter med n = 1000
while n <= 25000:
if n % 7 == 0 and n % 5 != 0: # sjekker om n er delelig med 7 og ikke et multiplum av 5
antall = antall + 1 # hvis ja, øker antall med 1
n = n + 1 # øker n med 1
print(antall)
2743
Oppgave 2.5#
a = 1
while a**2 < 1000:
if a**2 % 10 == 1 or a**2 % 10 == 6:
print(a**2, end=", ")
a = a + 1
1, 16, 36, 81, 121, 196, 256, 361, 441, 576, 676, 841, 961,
Oppgave 2.9#
# Definerer funksjonen:
def f(x):
return x**2 - 2*x + 1
# Skriver overskrifter:
print("x", "f(x)", sep="\t") # \t er tabulator. Skriver vi sep="\t" skrives det en tabulator mellom x og f(x)
# Skriver ut verdiene:
x = -1 # første verdi av x
while x <=3:
print(x, f(x), sep="\t") # Skriver ut x og f(x) med en tabulator mellom
x = x + 0.5
x f(x)
-1 4
-0.5 2.25
0.0 1.0
0.5 0.25
1.0 0.0
1.5 0.25
2.0 1.0
2.5 2.25
3.0 4.0
Oppgave 2.10#
# Oppgave a):
vekstfaktor = 1.021
Beløp = 1200 # starter med 1200 kr
år = 0
while Beløp < 2000:
Beløp = Beløp * vekstfaktor
år = år + 1
print(f"Det tar {år} år før Beløpet er {Beløp:.2f} kr")
Det tar 25 år før Beløpet er 2017.55 kr
# Oppgave b):
vekstfaktor = 1.021
# Lager en funksjon som regner ut hvor mye som er på kontoen etter 10 år om hun setter inn x kroner.
def konto(x):
Beløp = x # starter med x kroner
for år in range(10):
Beløp = Beløp * vekstfaktor
return Beløp
# Sjekker ulike verdier av x og finner x som gir 2000 kr etter 10 år:
x = 1000 # starter med 1000 kr
while konto(x) < 2000:
x = x + 1
print(f"Hun må sette inn {x} kr for å ha 2000 kr på konto etter 10 år.")
Hun må sette inn 1625 kr for å ha 2000 kr på konto etter 10 år.
Tips
Det er et godt tips å lage funksjoner når vi har sammensatte oppgaver som dette. Da kan vi bruke funksjonen flere ganger, og vi kan også bruke funksjonen til å teste om vi har løst oppgaven riktig.
Oppgave 2.11#
S = 0 # Skal bli summen
n = 0 # starter med 0, som er den første nevneren (0! = 1)
nevner = 1 # starter med 1, som er den første nevneren
while n <= 100:
S = S + 1/nevner
n = n + 1
nevner = nevner * n
print(S)
2.7182818284590455
Vi ser at dette er en god tilnærming til \(e\).
Oppgave 2.13#
Det fins veldig mange måter å teste om et naturlig tall er et primtall. Den enkleste er å sjekke om tallet er delelig med noen tall fra 2 til tallet selv. Hvis det er delelig med et tall, er det ikke et primtall. Hvis det ikke er delelig med noen tall, er det et primtall.
def ErPrimtall(n):
for i in range(2, n):
if n % i == 0:
return False
return True
# Tester programmet:
for i in range(2, 100):
if ErPrimtall(i):
print(i, end=", ")
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
Det er faktisk nok å sjekke om tallet er delelig med naturlige tall fra 2 til \(\sqrt{n}\). Hvis det ikke er delelig med noen av disse, er det heller ikke delelig med noen større tall. (Bevis dette!)
def ErPrimtall(n):
d = 2
while d*d <= n:
if n % d == 0:
return False
d = d + 1
return True
# Tester programmet:
for i in range(2, 100):
if ErPrimtall(i):
print(i, end=", ")
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,