9.2

9.2 Løkker og betingelser

For- og while-løkker og if-setninger: følge variabler gjennom et program, forklare utskriften og lage program for mønstre og summer.

60 min
15 oppgaver
for-løkkerSummeringFigurmønstre og algoritmerBetingelserwhile-løkker
Din fremgang i kapitlet
0 / 15 oppgaver
Kapitlets plass i kurset

Gjenta og velge

De fleste programmene på eksamen bygger på to ideer:

- en løkke gjentar de samme linjene mange ganger
- en betingelse (if) velger hvilke linjer som skal kjøres

Med løkker kan vi regne ut alle leddene i en tallfølge, summere mange ledd og prøve oss fram til en verdi passer.

for-løkke og range
for i in range(a, b):
    ...

kjører linjene med innrykk én gang for hver verdi i = a, a + 1, …, b - 1. Sluttverdien b er ikke med.

- range(5) gir 0,1,2,3,40, 1, 2, 3, 4
- range(1, 6) gir 1,2,3,4,51, 2, 3, 4, 5
- range(0, 20, 5) gir 0,5,10,150, 5, 10, 15 (steg 5)

Linjene som hører til løkka, har innrykk (fire mellomrom).

✏️Eksempel 1: Kvadrattall

Hva skriver programmet ut?

for i in range(1, 6):
    print(i, i ** 2)

i går gjennom 1,2,3,4,51, 2, 3, 4, 5. For hver verdi skrives i og i2i^2 ut.

1 1
2 4
3 9
4 16
5 25

Svar: De fem første kvadrattallene, hvert ved siden av nummeret sitt.

Summere med en løkke

For å summere mange ledd starter vi med s = 0 og legger til ett ledd per runde i løkka. Variabelen s kalles ofte en akkumulator.

✏️Eksempel 2: Summen av de 100 første naturlige tallene

Hva skriver programmet ut?

s = 0
for k in range(1, 101):
    s = s + k
print(s)

ks etter runden
11
23
36
……
1001+2+⋯+1001 + 2 + \dots + 100

5050
Kontroll: 100⋅1012=5050\dfrac{100 \cdot 101}{2} = 5050
Svar: Programmet skriver ut 5050, summen 1+2+3+⋯+1001 + 2 + 3 + \dots + 100.
📝Oppgave 1

Hva skriver programmet ut?

for i in range(1, 6):
    print(3 * i)

📝Oppgave 2

Hvilke verdier går i gjennom i for i in …?

a
range(4)
b
range(2, 7)
c
range(0, 20, 5)
d
range(10, 0, -3)
📝Oppgave 3

Hva skriver programmet ut? Skriv summen som programmet regner ut.

s = 0
for k in range(1, 5):
    s = s + k ** 2
print(s)

📝Oppgave 4

Skriv et program som skriver ut nn og 2n2^n for n=0,1,2,…,10n = 0, 1, 2, \dots, 10.

📝Oppgave 5

Programmet skal regne ut summen 1+2+4+8+⋯+291 + 2 + 4 + 8 + \dots + 2^9. Fyll inn det som mangler.

s = 0
for k in range(0, ___):
    s = s + ___
print(s)

Algoritmer for figurmønstre

En vanlig eksamensoppgave gir noen figurer i et mønster og ber om en algoritme og et program. En algoritme er en presis beskrivelse i ord av hva som skal gjøres, i riktig rekkefølge.

Først finner vi en formel for antallet i figur nn. Deretter lar vi en løkke gå gjennom n=1,2,3,…n = 1, 2, 3, \dots, regne ut antallet og eventuelt legge det til en sum.

✏️Eksempel 3: Prikker i et mønster

Figur 1 har 2 prikker, figur 2 har 6 prikker og figur 3 har 12 prikker. Figur nn er et rektangel med nn rader og n+1n + 1 prikker i hver rad.

a) Sett opp en algoritme for å finne antall prikker i hver av de 15 første figurene og til sammen.

b) Lag programmet.

a) Antall prikker i figur nn: n(n+1)n(n+1)

Kontroll: 1⋅2=21 \cdot 2 = 2, 2⋅3=62 \cdot 3 = 6, 3⋅4=123 \cdot 4 = 12

Algoritme:

- Sett totalen lik 0.
- For hver nn fra 1 til 15: regn ut n(n+1)n(n+1), skriv ut figurnummer og antall, og legg antallet til totalen.
- Skriv ut totalen.

b)

# Figur n har n * (n + 1) prikker
totalt = 0
for n in range(1, 16):
    prikker = n * (n + 1)
    totalt = totalt + prikker
    print("Figur", n, ":",
          prikker, "prikker")
print("Til sammen:", totalt,
      "prikker")

Figur 1 : 2 prikker
Figur 2 : 6 prikker
Figur 3 : 12 prikker
Figur 4 : 20 prikker
Figur 5 : 30 prikker
Figur 6 : 42 prikker
Figur 7 : 56 prikker
Figur 8 : 72 prikker
Figur 9 : 90 prikker
Figur 10 : 110 prikker
Figur 11 : 132 prikker
Figur 12 : 156 prikker
Figur 13 : 182 prikker
Figur 14 : 210 prikker
Figur 15 : 240 prikker
Til sammen: 1360 prikker

Svar: Programmet skriver ut antall prikker i hver figur. De 15 første figurene har til sammen 1360 prikker.

📝Oppgave 6

Skriv et program som regner ut summen av de 50 første oddetallene 1+3+5+…1 + 3 + 5 + \dots. Sammenlikn svaret med 50250^2.

Betingelser

if betingelse:
    # kjøres når betingelsen
    # er sann
    ...
elif annen_betingelse:
    # kjøres når den første
    # er usann og denne er sann
    ...
else:
    # kjøres ellers
    ...

PythonBetydning
==er lik
!=er ikke lik
<, <=mindre enn, mindre enn eller lik
>, >=større enn, større enn eller lik
and, orog, eller

n % 2 == 0 er sann nøyaktig når nn er et partall. Legg merke til forskjellen på = (tilordning) og == (sammenlikning).
✏️Eksempel 4: Partall og oddetall

Hva skriver programmet ut?

for n in range(1, 7):
    if n % 2 == 0:
        print(n, "er et partall")
    else:
        print(n, "er et oddetall")

Resten ved divisjon med 2 er 0 for partall og 1 for oddetall.

1 er et oddetall
2 er et partall
3 er et oddetall
4 er et partall
5 er et oddetall
6 er et partall

Svar: For hvert tall fra 1 til 6 skriver programmet om tallet er et partall eller et oddetall.

✏️Eksempel 5: Er trekanten rettvinklet?

Hva kan programmet brukes til, og hva skriver det ut?

a = 5
b = 13
c = 12
if (a**2 + b**2 == c**2
        or a**2 + c**2 == b**2
        or b**2 + c**2 == a**2):
    print("Trekanten er",
          "rettvinklet")
else:
    print("Trekanten er",
          "ikke rettvinklet")

Betingelsen sjekker Pytagoras' setning med hver av de tre sidene som hypotenus.

52+122=25+144=169=1325^2 + 12^2 = 25 + 144 = 169 = 13^2, så den andre delen av betingelsen er sann.

Trekanten er rettvinklet

Svar: Programmet avgjør om tre sidelengder gir en rettvinklet trekant. For sidene 5, 13 og 12 skriver det ut at trekanten er rettvinklet.

📝Oppgave 7

Programmet nedenfor er gitt.

x = 7
if x % 3 == 0:
    print("delelig med 3")
elif x % 2 == 0:
    print("partall")
else:
    print("verken eller")

a

Hva skriver programmet ut?

b

Hva skrives ut dersom vi bytter ut 7 med 12 og med 8?

while-løkke
while betingelse:
    ...

gjentar linjene med innrykk så lenge betingelsen er sann. Betingelsen sjekkes før hver runde. Vi bruker while når vi ikke vet på forhånd hvor mange runder som trengs, for eksempel når vi skal finne når en sum passerer en grense.

Noe inne i løkka må endre betingelsen, ellers stopper programmet aldri.

✏️Eksempel 6: Når passerer summen 4 meter?

Det første linjestykket i en figur er 80 cm. Hvert nytt linjestykke er 85 % av det forrige. Hvor mange linjestykker må vi ha for at summen av lengdene skal bli minst 4 meter?

4 m = 400 cm. Vekstfaktoren er 0,85.

# lengden av det første
# linjestykket (cm)
lengde = 80
summen = 0
# antall linjestykker
n = 0
while summen < 400:
    n = n + 1
    summen = summen + lengde
    lengde = lengde * 0.85
print(n, summen)

9 409.804295315625

Kontroll med 8 linjestykker:

print(sum(80 * 0.85 ** k
          for k in range(8)))

388.00505331249997

388,0<400≤409,8388{,}0 < 400 \le 409{,}8

Svar: Vi må ha 9 linjestykker. Da er summen omtrent 409,8 cm.

✏️Eksempel 7: Hvor mange figurer rekker vi?

Figur nn i et mønster lages av 4n+14n + 1 fyrstikker. Vi har 1000 fyrstikker. Hvor mange hele figurer kan vi lage, og hvor mange fyrstikker får vi igjen?

Løkka lager neste figur bare hvis det er nok fyrstikker til den.

total = 1000    # fyrstikker vi har
brukt = 0
# antall ferdige figurer
n = 0
while (brukt + 4 * (n + 1) + 1
       <= total):
    n = n + 1
    brukt = brukt + 4 * n + 1
print("Antall figurer:", n)
print("Fyrstikker igjen:",
      total - brukt)

Antall figurer: 21
Fyrstikker igjen: 55

Kontroll: 5+9+⋯+85=9455 + 9 + \dots + 85 = 945 for 21 figurer. Figur 22 trenger 89 fyrstikker, og 945+89=1034>1000945 + 89 = 1034 > 1000.

Svar: Vi kan lage 21 figurer og får 55 fyrstikker igjen.

📝Oppgave 8

Hva skriver programmet ut? Forklar hvorfor svaret ikke er 64.

x = 1
while x < 100:
    x = 2 * x
print(x)

📝Oppgave 9

Hva ønsker programmereren å finne ut? Hva forteller de to verdiene som skrives ut?

beløp = 10000
år = 0
while beløp < 20000:
    beløp = beløp * 1.04
    år = år + 1
print(år)
print(beløp)

📝Oppgave 10

Siri arbeider med sekskanttall og har laget programmet nedenfor. Hvilke tall skriver programmet ut, og hvilken sammenheng har Siri brukt?

tall = 1
differanse = 5
while tall < 100:
    print(tall)
    tall = tall + differanse
    differanse = differanse + 4

Oppgaver i eksamensform

📝Oppgave 11

Figur 1 i et mønster har 4 fliser, figur 2 har 7 fliser og figur 3 har 10 fliser. Mønsteret fortsetter på samme måte.

a

Sett opp en algoritme for å skrive ut antall fliser i hver av de 25 første figurene.

b

Lag programmet.

c

Endre programmet slik at det finner hvor mange fliser som trengs til de 25 første figurene til sammen.

Løs oppgaven
📝Oppgave 12

Figur nn i et mønster er et kvadrat som lages av n2n^2 klosser. Du har 5000 klosser og lager figur 1, figur 2, figur 3 og så videre så lenge du har nok klosser.

Lag et program som finner hvor mange figurer du kan lage, og hvor mange klosser du har igjen.

📝Oppgave 13

Det største kvadratet i en serie har side 12 cm. Hvert nytt kvadrat har en side som er 80 % av sida i det forrige.

a

Lag et program som regner ut det samlede arealet av de 10 første kvadratene.

b

Hvor mange kvadrater må vi ha for at det samlede arealet skal bli minst 390 cm2390\ \text{cm}^2?

c

Arealet av hvert kvadrat er en fast prosent av arealet av det forrige. Hvor mange prosent?

Løs oppgaven
📝Oppgave 14

Vi ser på summene av partall: P1=2P_1 = 2, P2=2+4P_2 = 2 + 4, P3=2+4+6P_3 = 2 + 4 + 6, og så videre.

a

Lag et program som regner ut og skriver ut P1,P2,…,P10P_1, P_2, \dots, P_{10}.

b

Beskriv sammenhengen du ser, og vis at den gjelder for alle nn.

📝Oppgave 15

Programmet nedenfor går gjennom alle heltall a≤b≤ca \le b \le c opp til 20.

for a in range(1, 21):
    for b in range(a, 21):
        for c in range(b, 21):
            if a**2 + b**2 == c**2:
                print(a, b, c)

a) Hva skriver programmet ut?

b) Hva kan programmet brukes til?

Oppsummering

- for i in range(a, b) går gjennom a,a+1,…,b−1a, a+1, \dots, b-1.
- En sum bygges opp med s = 0 før løkka og s = s + ledd inne i løkka.
- if, elif og else velger mellom alternativer; == sammenlikner.
- while gjentar så lenge betingelsen er sann. Kontroller svaret for nn og n−1n - 1.
- En algoritme beskriver i ord hva programmet skal gjøre, i riktig rekkefølge.

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.