6.6

6.6 Skrive og endre program

Setje opp og endre små Python-program som reknar ut sparing, nedbetaling, likningssystem og verdiar i ein modell.

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

Frå problem til program

Når du skal skrive eit program sjølv, går du gjennom dei same spørsmåla kvar gong:

- Kva for storleikar inngår, og kva er startverdiane? Gi kvar storleik eit variabelnamn.
- Kva skjer i kvart steg (kvart år, kvar månad, kvar figur)? Det blir linjene inne i løkka.
- Når skal programmet stoppe? Eit fast tal på steg gir for … in range(…). «Til eit mål er nådd» gir while.
- Kva skal skrivast ut? Ofte talet på steg og verdien til slutt.

Test programmet med tal du kan rekne ut for hand, til dømes berre dei to første åra.

✏️Døme 1: Sparemål

Mia set inn 24 000 kr på ein konto i starten av kvart år. Renta er 4 % per år. Lag eit program som finn kor mange år det tek før ho har minst 300 000 kr.

Storleikar: beløp (start 0), innskot 24 000, vekstfaktor 1,04, talet på år (start 0).

Kvart år: legg til innskotet, gong med 1,04.

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

# på kontoen ved start
beløp = 0
# blir sett inn kvart år
innskot = 24000
# 4 % rente
vf = 1.04
år = 0
while beløp < 300000:
    beløp = (beløp + innskot) * 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 tek 11 år. Då har Mia om lag 336 619 kr.

📝Oppgave 1

Programmet reknar ut ny pris etter rabatt. Endre programmet slik at det reknar ut prisen på ei 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 manglar, slik at programmet skriv ut gjennomsnittet av tala i lista.

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

📝Oppgave 3

Lag eit program som reknar ut kor mykje 20 000 kr har vakse til etter 8 år med 3,5 % rente per år. Kontroller svaret med ein formel.

📝Oppgave 4

Ein bil kostar 300 000 kr og tapar 12 % av verdien kvart år. Lag eit program som skriv ut ein tabell med verdien etter kvart av dei 6 første åra.

Endre eit program

Ofte får du eit ferdig program og skal endre det til ein ny situasjon. Finn ut kva for linjer som skildrar situasjonen (tal og formlar), og kva for linjer som skildrar metoden (løkka og testen). Vanlegvis endrar du berre situasjonen — men sjekk at metoden framleis dekkjer alle svara, til dømes at range er stor nok.

✏️Døme 2: Likningssystem ved prøving
Likningssystemet

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

skal løysast med programmet nedanfor.

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øysingane.

Begge likningane er skrivne som y=…y = \dots, og høgresidene er lagde inn som funksjonane f og g. Programmet prøver alle heiltal frå −10-10 til 1010 og skriv 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øysingane er x=−1, y=1x = -1,\ y = 1 og x=3, y=9x = 3,\ y = 9. Metoden finn berre løysingar som er heiltal og ligg i det området range dekkjer.

📝Oppgave 5
Ole skal løyse likningssystemet

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

Kva for endringar må Ole gjere i programmet i døme 2?

📝Oppgave 6

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

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

Kva skriv programmet ut?

b

Vis ved rekning at likningssystemet har to løysingar. Kvifor finn ikkje programmet begge?

c

Endre programmet slik at det finn begge løysingane.

📝Oppgave 7

50 000 kr blir sette på ein konto med 6 % rente per år. Lag eit program som finn kor mange år det tek før beløpet er dobla.

Nedbetalingsplan

For eit annuitetslån er terminbeløpet det same kvar termin. For kvar termin gjeld

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

Ei while-løkke som går så lenge restlånet er større enn 0, lagar heile planen. Den siste terminen blir som regel mindre enn dei andre.

✏️Døme 3: Program for nedbetalingsplan

Eit lån på 80 000 kr har 4 % rente per termin og eit terminbeløp på 18 000 kr. Lag eit program som skriv ut nedbetalingsplanen, og finn kor mange terminar det tek å 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 difor 17 152,33+686,09=17 838,4217\,152{,}33 + 686{,}09 = 17\,838{,}42 kr.

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

📝Oppgave 8

Programmet nedanfor skal skrive ut nedbetalingsplanen for eit annuitetslån på 40 000 kr med 3 % rente per termin og terminbeløp 9000 kr. Førebels skriv det berre ut nullar.

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

Set inn formlar i staden for 0, og gjer endringar slik at heile nedbetalingsplanen blir skriven ut.

b

Kor mange terminar tek det å betale ned lånet, og kor stor blir den siste terminen?

Løs oppgaven

Svært mange ledd

Når kvart ledd er ein fast prosent mindre enn det førre, blir ledda til slutt så små at dei ikkje endrar summen. Eit program kan leggje saman ledd så lenge dei er større enn ei lita grense, til dømes 0,0001. Summen programmet skriv ut, er då summen av «alle» ledda med god nøyaktigheit.

✏️Døme 4: Samla omkrins av mange kvadrat

Det største kvadratet i ein serie har sidekant 15 cm. Kvart nytt kvadrat har 25 % kortare sidekant enn det førre. Lag eit program som finn den samla omkrinsen av alle kvadrata.

Omkrinsen av eit 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
# samla omkrins
total = 0
while s > 0.0001:
    total = total + 4 * s
    s = s * 0.75
print("Samla omkrins:",
      round(total, 1), "cm")

Samla omkrins: 240.0 cm

Svar: Den samla omkrinsen er 240 cm.

📝Oppgave 9

Vi endrar programmet i døme 4 slik at både sidekanten ss i det største kvadratet og prosenten pp kan veljast:

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 samla omkrinsen er T=4sp⋅100T = \dfrac{4s}{p} \cdot 100.

a

Kva skriv programmet ut? Stemmer det med formelen til Ole for s=10s = 10 og p=20p = 20?

b

Undersøk formelen for fleire verdiar av ss og pp med eit program. Kan formelen gjelde?

Løs oppgaven

Oppgåver i eksamensform

📝Oppgave 10

Ein pasient får 400 mg av eit legemiddel. Kvar time blir 18 % av legemiddelet i kroppen skilt ut. Lag eit program som finn kor mange heile timar det tek før det er mindre enn 50 mg igjen i kroppen.

📝Oppgave 11

Jonas sparer 1500 kr ved slutten av kvar månad på ein konto med 0,4 % rente per månad. Lag eit program som finn kor mange månader det tek før han har minst 50 000 kr.

📝Oppgave 12

Eit teater reknar med at det sel 800−20p800 - 20p billettar når billettprisen er pp kroner, for 0≤p≤400 \le p \le 40. Inntekta er pris gonger talet på selde billettar.

a

Lag eit program som prøver alle heile kronebeløp frå 0 til 40 og finn prisen som gir størst inntekt.

b

Kor mange billettar blir selde då?

Løs oppgaven

Oppsummering

- Bestem storleikar og startverdiar, kva som skjer i kvart steg, når programmet skal stoppe og kva som skal skrivast ut.
- Fast tal på steg: for … in range(…). Til eit mål er nådd: while.
- Når du endrar eit program: endre tal og formlar, og sjekk at range og stoppvilkåret framleis passar.
- Test alltid med tal du kan rekne ut for hand.

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.