6.6

6.6 Skrive og endre program

Sette opp og endre små Python-program som regner ut sparing, nedbetaling, likningssystemer og verdier i en modell.

55 min
12 oppgaver
Fra problem til programEndre programLikningssystem ved prøvingNedbetalingsplanMange ledd
Din fremgang i kapitlet
0 / 12 oppgaver
Kapitlets plass i kurset

Fra problem til program

Når du skal skrive et program selv, går du gjennom de samme spørsmålene hver gang:

- Hvilke størrelser inngår, og hva er startverdiene? Gi hver størrelse et variabelnavn.
- Hva skjer i hvert steg (hvert år, hver måned, hver figur)? Det blir linjene inne i løkka.
- Når skal programmet stoppe? Et fast antall steg gir for … in range(…). «Til et mål er nådd» gir while.
- Hva skal skrives ut? Ofte antall steg og verdien til slutt.

Test programmet med tall du kan regne ut for hånd, for eksempel bare de to første årene.

✏️Eksempel 1: Sparemål

Mia setter inn 24 000 kr på en konto i starten av hvert år. Renten er 4 % per år. Lag et program som finner hvor mange år det tar før hun har minst 300 000 kr.

Størrelser: beløp (start 0), innskudd 24 000, vekstfaktor 1,04, antall år (start 0).

Hvert år: legg til innskuddet, gang med 1,04.

Stopp når beløpet er minst 300 000: while beløp < 300000.

# på kontoen ved start
beløp = 0
# settes inn hvert år
innskudd = 24000
# 4 % rente
vf = 1.04
år = 0
while beløp < 300000:
    beløp = (beløp + innskudd) * vf
    år = år + 1
print(år, round(beløp))

11 336619

Test for to år: (24 000⋅1,04+24 000)⋅1,04=50 918,40(24\,000 \cdot 1{,}04 + 24\,000) \cdot 1{,}04 = 50\,918{,}40

beløp = 0
for år in range(2):
    beløp = (beløp + 24000) * 1.04
print(beløp)

50918.4

Svar: Det tar 11 år. Da har Mia omtrent 336 619 kr.

📝Oppgave 1

Programmet regner ut ny pris etter rabatt. Endre programmet slik at det regner ut prisen på en vare til 1299 kr med 30 % rabatt.

pris = 800
rabatt = 25
ny_pris = pris * (1 - rabatt / 100)
print(round(ny_pris, 2))

📝Oppgave 2

Fyll inn det som mangler, slik at programmet skriver ut gjennomsnittet av tallene i lista.

L = [4, 6, 3, 5, 2]
gjennomsnitt = ___ / ___
print(gjennomsnitt)

📝Oppgave 3

Lag et program som regner ut hvor mye 20 000 kr har vokst til etter 8 år med 3,5 % rente per år. Kontroller svaret med en formel.

📝Oppgave 4

En bil koster 300 000 kr og taper 12 % av verdien hvert år. Lag et program som skriver ut en tabell med verdien etter hvert av de 6 første årene.

Endre et program

Ofte får du et ferdig program og skal endre det til en ny situasjon. Finn ut hvilke linjer som beskriver situasjonen (tall og formler), og hvilke som beskriver metoden (løkka og testen). Vanligvis endrer du bare situasjonen — men sjekk at metoden fortsatt dekker alle svarene, for eksempel at range er stor nok.

✏️Eksempel 2: Likningssystem ved prøving
Likningssystemet

y=2x+3y=x2y = 2x + 3 \qquad y = x^2

skal løses med programmet nedenfor.

def f(x):
    return 2 * x + 3

def g(x):
    return x ** 2

for x in range(-10, 11):
    if f(x) == g(x):
        print("x =", x,
              "og y =", f(x))

Forklar strategien, og finn løsningene.

Begge likningene er skrevet som y=…y = \dots, og høyresidene er lagt inn som funksjonene f og g. Programmet prøver alle heltall fra −10-10 til 1010 og skriver ut xx og yy når f(x)=g(x)f(x) = g(x).

x = -1 og y = 1
x = 3 og y = 9

Kontroll: 2⋅3+3=9=322 \cdot 3 + 3 = 9 = 3^2 og 2⋅(−1)+3=1=(−1)22 \cdot (-1) + 3 = 1 = (-1)^2

Svar: Løsningene er x=−1, y=1x = -1,\ y = 1 og x=3, y=9x = 3,\ y = 9. Metoden finner bare løsninger som er heltall og ligger i det området range dekker.

📝Oppgave 5
Ole skal løse likningssystemet

x+y=6y=x2−4x+2x + y = 6 \qquad y = x^2 - 4x + 2

Hvilke endringer må Ole gjøre i programmet i eksempel 2?

📝Oppgave 6

Sara skal løse likningssystemet y=2x+20y = 2x + 20 og y=x2−x−8y = x^2 - x - 8 og bruker programmet nedenfor.

def f(x):
    return 2 * x + 20

def g(x):
    return x ** 2 - x - 8

for x in range(-5, 5):
    if f(x) == g(x):
        print("x =", x,
              "og y =", f(x))

a

Hva skriver programmet ut?

b

Vis ved regning at likningssystemet har to løsninger. Hvorfor finner ikke programmet begge?

c

Endre programmet slik at det finner begge løsningene.

📝Oppgave 7

50 000 kr settes på en konto med 6 % rente per år. Lag et program som finner hvor mange år det tar før beløpet er doblet.

Nedbetalingsplan

For et annuitetslån er terminbeløpet det samme hver termin. For hver termin gjelder

- renter = restlån · rentefot : 100
- avdrag = terminbeløp − renter
- nytt restlån = restlån − avdrag

En while-løkke som går så lenge restlånet er større enn 0, lager hele planen. Den siste terminen blir som regel mindre enn de andre.

✏️Eksempel 3: Program for nedbetalingsplan

Et lån på 80 000 kr har 4 % rente per termin og et terminbeløp på 18 000 kr. Lag et program som skriver ut nedbetalingsplanen, og finn hvor mange terminer det tar å betale ned lånet.

restlån = 80000
terminbeløp = 18000
rentefot = 4
termin = 0
print("Termin", " Renter",
      " Avdrag", " Restlån")
while restlån > 0:
    termin = termin + 1
    renter = (restlån * rentefot
              / 100)
    avdrag = terminbeløp - renter
    restlån = restlån - avdrag
    print(termin, round(renter, 2),
          round(avdrag, 2),
          round(restlån, 2))

Termin  Renter  Avdrag  Restlån
1 3200.0 14800.0 65200.0
2 2608.0 15392.0 49808.0
3 1992.32 16007.68 33800.32
4 1352.01 16647.99 17152.33
5 686.09 17313.91 -161.57

Restlånet blir negativt i termin 5. Det siste terminbeløpet er derfor 17 152,33+686,09=17 838,4217\,152{,}33 + 686{,}09 = 17\,838{,}42 kr.

Svar: Lånet er nedbetalt etter 5 terminer. Den siste terminen er på 17 838,42 kr.

📝Oppgave 8

Programmet nedenfor skal skrive ut nedbetalingsplanen for et annuitetslån på 40 000 kr med 3 % rente per termin og terminbeløp 9000 kr. Foreløpig skriver det bare ut nuller.

restlån = 40000
terminbeløp = 9000
rentefot = 3
for termin in range(1, 4):
    renter = 0
    avdrag = 0
    restlån = 0
    print(termin, renter,
          avdrag, restlån)

a

Sett inn formler i stedet for 0, og gjør endringer slik at hele nedbetalingsplanen skrives ut.

b

Hvor mange terminer tar det å betale ned lånet, og hvor stor blir den siste terminen?

Løs oppgaven

Svært mange ledd

Når hvert ledd er en fast prosent mindre enn det forrige, blir leddene til slutt så små at de ikke endrer summen. Et program kan legge sammen ledd så lenge de er større enn en liten grense, for eksempel 0,0001. Summen programmet skriver ut, er da summen av «alle» leddene med god nøyaktighet.

✏️Eksempel 4: Samlet omkrets av mange kvadrater

Det største kvadratet i en serie har sidekant 15 cm. Hvert nytt kvadrat har 25 % kortere sidekant enn det forrige. Lag et program som finner den samlede omkretsen av alle kvadratene.

Omkretsen av et kvadrat er 4s4s. Vekstfaktoren for sidekanten er 1−0,25=0,751 - 0{,}25 = 0{,}75.

# sidekant i det største
# kvadratet (cm)
s = 15
# samlet omkrets
total = 0
while s > 0.0001:
    total = total + 4 * s
    s = s * 0.75
print("Samlet omkrets:",
      round(total, 1), "cm")

Samlet omkrets: 240.0 cm

Svar: Den samlede omkretsen er 240 cm.

📝Oppgave 9

Vi endrer programmet i eksempel 4 slik at både sidekanten ss i det største kvadratet og prosenten pp kan velges:

s = 10
p = 20
total = 0
while s > 0.0001:
    total = total + 4 * s
    s = s * (1 - p / 100)
print(round(total, 1))

Ole påstår at den samlede omkretsen er T=4sp⋅100T = \dfrac{4s}{p} \cdot 100.

a

Hva skriver programmet ut? Stemmer det med Oles formel for s=10s = 10 og p=20p = 20?

b

Undersøk formelen for flere verdier av ss og pp med et program. Kan formelen gjelde?

Løs oppgaven

Oppgaver i eksamensform

📝Oppgave 10

En pasient får 400 mg av et legemiddel. Hver time skilles 18 % av legemiddelet i kroppen ut. Lag et program som finner hvor mange hele timer det tar før det er mindre enn 50 mg igjen i kroppen.

📝Oppgave 11

Jonas sparer 1500 kr ved slutten av hver måned på en konto med 0,4 % rente per måned. Lag et program som finner hvor mange måneder det tar før han har minst 50 000 kr.

📝Oppgave 12

Et teater regner med at det selger 800−20p800 - 20p billetter når billettprisen er pp kroner, for 0≤p≤400 \le p \le 40. Inntekten er pris ganger antall solgte billetter.

a

Lag et program som prøver alle hele kronebeløp fra 0 til 40 og finner prisen som gir størst inntekt.

b

Hvor mange billetter selges da?

Løs oppgaven

Oppsummering

- Bestem størrelser og startverdier, hva som skjer i hvert steg, når programmet skal stoppe og hva som skal skrives ut.
- Fast antall steg: for … in range(…). Til et mål er nådd: while.
- Når du endrer et program: endre tall og formler, og sjekk at range og stoppbetingelsen fortsatt passer.
- Test alltid med tall du kan regne ut for hånd.

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.