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,