9.2

9.2 Løkker og vilkår

For- og while-løkker og if-setningar: følgje variablar gjennom eit program, forklare utskrifta og lage program for mønster og summar.

60 min
15 oppgaver
for-løkkerSummeringFigurmønster og algoritmarVilkårwhile-løkker
Din fremgang i kapitlet
0 / 15 oppgaver
Kapitlets plass i kurset

Gjenta og velje

Dei fleste programma på eksamen byggjer på to idear:

- ei løkke gjentek dei same linjene mange gonger
- eit vilkår (if) vel kva for linjer som skal køyrast

Med løkker kan vi rekne ut alle ledda i ei talfølgje, summere mange ledd og prøve oss fram til ein verdi passar.

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

køyrer linjene med innrykk éin gong for kvar verdi i = a, a + 1, …, b - 1. Sluttverdien b er ikkje 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øyrer til løkka, har innrykk (fire mellomrom).

✏️Døme 1: Kvadrattal

Kva skriv 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 kvar verdi blir i og i2i^2 skrivne ut.

1 1
2 4
3 9
4 16
5 25

Svar: Dei fem første kvadrattala, kvart ved sida av nummeret sitt.

Summere med ei løkke

For å summere mange ledd startar vi med s = 0 og legg til eitt ledd per runde i løkka. Variabelen s blir ofte kalla ein akkumulator.

✏️Døme 2: Summen av dei 100 første naturlege tala

Kva skriv 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 skriv ut 5050, summen 1+2+3+⋯+1001 + 2 + 3 + \dots + 100.
📝Oppgave 1

Kva skriv programmet ut?

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

📝Oppgave 2

Kva for verdiar 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

Kva skriv programmet ut? Skriv summen som programmet reknar ut.

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

📝Oppgave 4

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

📝Oppgave 5

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

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

Algoritmar for figurmønster

Ei vanleg eksamensoppgåve gir nokre figurar i eit mønster og ber om ein algoritme og eit program. Ein algoritme er ei presis skildring i ord av kva som skal gjerast, i rett rekkjefølgje.

Først finn vi ein formel for talet i figur nn. Deretter lèt vi ei løkke gå gjennom n=1,2,3,…n = 1, 2, 3, \dots, rekne ut talet og eventuelt leggje det til ein sum.

✏️Døme 3: Prikkar i eit mønster

Figur 1 har 2 prikkar, figur 2 har 6 prikkar og figur 3 har 12 prikkar. Figur nn er eit rektangel med nn rader og n+1n + 1 prikkar i kvar rad.

a) Set opp ein algoritme for å finne talet på prikkar i kvar av dei 15 første figurane og til saman.

b) Lag programmet.

a) Talet på prikkar 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:

- Set totalen lik 0.
- For kvar nn frå 1 til 15: rekn ut n(n+1)n(n+1), skriv ut figurnummer og tal, og legg talet til totalen.
- Skriv ut totalen.

b)

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

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

Svar: Programmet skriv ut talet på prikkar i kvar figur. Dei 15 første figurane har til saman 1360 prikkar.

📝Oppgave 6

Skriv eit program som reknar ut summen av dei 50 første oddetala 1+3+5+…1 + 3 + 5 + \dots. Samanlikn svaret med 50250^2.

Vilkår

if vilkår:
    # blir køyrt når vilkåret
    # er sant
    ...
elif anna_vilkår:
    # blir køyrt når den første
    # er usann og denne er sann
    ...
else:
    # blir køyrt elles
    ...

PythonTyding
==er lik
!=er ikkje 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 eit partal. Legg merke til skilnaden på = (tilordning) og == (samanlikning).
✏️Døme 4: Partal og oddetal

Kva skriv programmet ut?

for n in range(1, 7):
    if n % 2 == 0:
        print(n, "er eit partal")
    else:
        print(n, "er eit oddetal")

Resten ved divisjon med 2 er 0 for partal og 1 for oddetal.

1 er eit oddetal
2 er eit partal
3 er eit oddetal
4 er eit partal
5 er eit oddetal
6 er eit partal

Svar: For kvart tal frå 1 til 6 skriv programmet om talet er eit partal eller eit oddetal.

✏️Døme 5: Er trekanten rettvinkla?

Kva kan programmet brukast til, og kva skriv 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",
          "rettvinkla")
else:
    print("Trekanten er",
          "ikkje rettvinkla")

Vilkåret sjekkar setninga til Pytagoras med kvar av dei tre sidene som hypotenus.

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

Trekanten er rettvinkla

Svar: Programmet avgjer om tre sidelengder gir ein rettvinkla trekant. For sidene 5, 13 og 12 skriv det ut at trekanten er rettvinkla.

📝Oppgave 7

Programmet nedanfor er gitt.

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

a

Kva skriv programmet ut?

b

Kva blir skrive ut dersom vi byter ut 7 med 12 og med 8?

while-løkke
while vilkår:
    ...

gjentek linjene med innrykk så lenge vilkåret er sant. Vilkåret blir sjekka før kvar runde. Vi bruker while når vi ikkje veit på førehand kor mange rundar som trengst, til dømes når vi skal finne når ein sum passerer ei grense.

Noko inne i løkka må endre vilkåret, elles stoppar programmet aldri.

✏️Døme 6: Når passerer summen 4 meter?

Det første linjestykket i ein figur er 80 cm. Kvart nytt linjestykke er 85 % av det førre. Kor mange linjestykke må vi ha for at summen av lengdene skal bli minst 4 meter?

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

# lengda av det første
# linjestykket (cm)
lengde = 80
summen = 0
# talet på linjestykke
n = 0
while summen < 400:
    n = n + 1
    summen = summen + lengde
    lengde = lengde * 0.85
print(n, summen)

9 409.804295315625

Kontroll med 8 linjestykke:

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 linjestykke. Då er summen om lag 409,8 cm.

✏️Døme 7: Kor mange figurar rekk vi?

Figur nn i eit mønster blir laga av 4n+14n + 1 fyrstikker. Vi har 1000 fyrstikker. Kor mange heile figurar kan vi lage, og kor mange fyrstikker får vi igjen?

Løkka lagar neste figur berre dersom det er nok fyrstikker til han.

total = 1000    # fyrstikker vi har
brukt = 0
# talet på ferdige figurar
n = 0
while (brukt + 4 * (n + 1) + 1
       <= total):
    n = n + 1
    brukt = brukt + 4 * n + 1
print("Talet på figurar:", n)
print("Fyrstikker igjen:",
      total - brukt)

Talet på figurar: 21
Fyrstikker igjen: 55

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

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

📝Oppgave 8

Kva skriv programmet ut? Forklar kvifor svaret ikkje er 64.

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

📝Oppgave 9

Kva ønskjer programmereren å finne ut? Kva fortel dei to verdiane som blir skrivne 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 sekskanttal og har laga programmet nedanfor. Kva for tal skriv programmet ut, og kva for ein samanheng har Siri brukt?

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

Oppgåver i eksamensform

📝Oppgave 11

Figur 1 i eit mønster har 4 fliser, figur 2 har 7 fliser og figur 3 har 10 fliser. Mønsteret held fram på same måten.

a

Set opp ein algoritme for å skrive ut talet på fliser i kvar av dei 25 første figurane.

b

Lag programmet.

c

Endre programmet slik at det finn kor mange fliser som trengst til dei 25 første figurane til saman.

Løs oppgaven
📝Oppgave 12

Figur nn i eit mønster er eit kvadrat som blir laga av n2n^2 klossar. Du har 5000 klossar og lagar figur 1, figur 2, figur 3 og så vidare så lenge du har nok klossar.

Lag eit program som finn kor mange figurar du kan lage, og kor mange klossar du har igjen.

📝Oppgave 13

Det største kvadratet i ein serie har side 12 cm. Kvart nytt kvadrat har ei side som er 80 % av sida i det førre.

a

Lag eit program som reknar ut det samla arealet av dei 10 første kvadrata.

b

Kor mange kvadrat må vi ha for at det samla arealet skal bli minst 390 cm2390\ \text{cm}^2?

c

Arealet av kvart kvadrat er ein fast prosent av arealet av det førre. Kor mange prosent?

Løs oppgaven
📝Oppgave 14

Vi ser på summane av partal: P1=2P_1 = 2, P2=2+4P_2 = 2 + 4, P3=2+4+6P_3 = 2 + 4 + 6, og så vidare.

a

Lag eit program som reknar ut og skriv ut P1,P2,…,P10P_1, P_2, \dots, P_{10}.

b

Skildre samanhengen du ser, og vis at han gjeld for alle nn.

📝Oppgave 15

Programmet nedanfor går gjennom alle heiltal 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) Kva skriv programmet ut?

b) Kva kan programmet brukast til?

Oppsummering

- for i in range(a, b) går gjennom a,a+1,…,b−1a, a+1, \dots, b-1.
- Ein sum blir bygd opp med s = 0 før løkka og s = s + ledd inne i løkka.
- if, elif og else vel mellom alternativ; == samanliknar.
- while gjentek så lenge vilkåret er sant. Kontroller svaret for nn og n−1n - 1.
- Ein algoritme skildrar i ord kva programmet skal gjere, i rett rekkjefølgje.

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.