Hopp til innholdet

Programmering på R1-eksamen – forklart steg for steg

Matematikk R1 · modul 10 · leksjon 10.5 · eksamen: del 2

Fra våren 2027 kan eksamen i R1 be deg skrive et program selv, og alt skrives for hånd. Her lærer du hva et program er, hvordan du leser det med en tabell, og de metodene som går igjen i R1.

Dette er leksjon 10.5 Programmering på R1-eksamen i Sophus. I kurset har den øving og støtteark (video kommer senere). Den er med når du har tilgang til faget, men leksjon 1.1 er gratis. Se leksjonen

Hva er et program?

Et program er en oppskrift som datamaskinen følger linje for linje, ovenfra og ned. En variabel er et navn på et tall. Linjen a = 2 betyr at a får verdien 2. Linjen a = 3*a − 1 betyr: regn ut høyre side med den gamle a, og la svaret bli den nye a.

På eksamen fra 2027 har du ingen datamaskin. Du kan ikke kjøre programmet, så du må lese det slik datamaskinen gjør det. Det er lettere enn det høres ut, for programmene er korte.

Byggesteinene

  1. print(a) skriver ut verdien av a.
  2. for n in range(4): gjentar linjene som er rykket inn, fire ganger. n blir 0, 1, 2 og 3.
  3. while betingelse: gjentar linjene som er rykket inn, så lenge betingelsen er sann.
  4. def f(x): lager en funksjon, og return gir svaret tilbake.
  5. Potens skrives med to gangetegn etter hverandre, ikke med ^, slik du ser i programmene under. Desimaltall skrives med punktum, som 1.15.

Les programmet med en tabell

Lag én kolonne for hver variabel og én rad for hver runde i løkka. Fyll ut tabellen for hånd. Programmet under starter med a = 2 og regner a = 3*a − 1 fire ganger. Det er den rekursive formelen aₙ₊₁ = 3aₙ − 1.

3 · 2 − 1 = 5
3 · 5 − 1 = 14

Etter to runder er a altså 14. To runder til gir 41 og 122.

Metodene som går igjen i R1

Numerisk derivasjon: et program kan ikke la h gå mot null, men det kan bruke en liten h, som 0,001, og regne ut f(x + h) − f(x) delt på h. Svaret er nesten den deriverte.

Halveringsmetoden: skifter f fortegn mellom a og b, ligger et nullpunkt der. Programmet ser på midtpunktet m og beholder den halvdelen der fortegnet skifter, til intervallet er lite nok.

Newtons metode: start med en gjetning x og gå langs tangenten ned til x-aksen. Den nye gjetningen er x − f(x) delt på f′(x). For f(x) = x² − 7 og x = 3 gir det første steget 8 delt på 3, og det neste 127 delt på 48, som er nær √7.

Vekst: en løkke kan gange med vekstfaktoren én gang per år, og en while-løkke kan telle årene til en grense passeres.

3 − 3² − 7 delt på 2 · 3 = 8 delt på 3
127 delt på 48 ≈ 2,6458
√7 ≈ 2,6458

Eksempler

Eksempel 1: en rekursiv formel

Hva skriver programmet ut?

a = 2
for n in range(4):
    a = 3*a - 1
print(a)

3 · 2 − 1 = 5
3 · 5 − 1 = 14
3 · 14 − 1 = 41
3 · 41 − 1 = 122

Svar: Programmet skriver ut 122.

range(4) gir fire runder. print står uten innrykk, etter løkka, så bare den siste verdien skrives ut.

Eksempel 2: numerisk derivasjon

Hva skriver programmet ut, og hva er den eksakte verdien av f′(2)?

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

h = 0.001
x = 2
print(round((f(x + h) - f(x)) / h, 3))

2³ − 2 · 2 = 4
2,001³ − 2 · 2,001 − 4 delt på 0,001 ≈ 10,006
3 · 2² − 2 = 10

Svar: Programmet skriver ut 10.006. Den eksakte verdien er f′(2) = 10.

f′(x) = 3x² − 2, så f′(2) = 10. Programmet gir en tilnærming. Med en mindre h kommer svaret enda nærmere 10.

Eksempel 3: halveringsmetoden

Programmet løser likningen 2ˣ = 5. Hva skriver det ut?

def f(x):
    return 2**x - 5

a = 2
b = 3
while b - a > 0.001:
    m = (a + b) / 2
    if f(a) * f(m) <= 0:
        b = m
    else:
        a = m
print(round(m, 2))

2² − 5 = −1
2³ − 5 = 3
2 opphøyd i 2,32 ≈ 4,99

Svar: Programmet skriver ut 2.32.

f(2) er negativ og f(3) er positiv, så nullpunktet ligger mellom 2 og 3. Løkka halverer intervallet til det er kortere enn 0,001. Sjekk svaret på kalkulatoren: 2 opphøyd i 2,32 er nesten 5.

Eksempel 4: skriv programmet selv

Følgen er gitt ved a₁ = 3 og aₙ₊₁ = 2aₙ + 1. Skriv et program som finner det første leddnummeret n der aₙ er større enn 1 000.

a = 3
n = 1
while a <= 1000:
    a = 2*a + 1
    n = n + 1
print(n)

2 · 3 + 1 = 7
2 · 255 + 1 = 511
2 · 511 + 1 = 1 023

Svar: Programmet skriver ut 9, fordi a₉ = 1 023 er det første leddet over 1 000.

a og n starter på det første leddet. Hver runde regner ut neste ledd og øker n med 1. Løkka går så lenge a ikke er over 1 000. Leddene er 3, 7, 15, 31, 63, 127, 255, 511 og 1 023.

Eksempel 5: simuler vekst

En bestand på 200 dyr vokser med 15 % per år. Programmet finner hvor mange år det tar før bestanden er minst 1 000. Hva skriver det ut?

N = 200
aar = 0
while N < 1000:
    N = N * 1.15
    aar = aar + 1
print(aar)

200 · 1,15¹¹ ≈ 930,5
200 · 1,15¹² ≈ 1 070,1

Svar: Programmet skriver ut 12.

Etter 11 år er bestanden fortsatt under 1 000, så løkka går én runde til. Du kan også løse 1,15ˣ = 5 med logaritmer og runde opp.

Øv selv: 15 oppgaver i programmering i Python med fasit og løsning steg for steg.

Vanlige feil

På eksamen

Programmering kommer på del 2. Skal du skrive et program, skriv det for hånd med tydelig innrykk og kolon, og forklar kort med ord hva det gjør. Skal du finne hva et program skriver ut, lag en tabell over variablene for de første rundene, og regn ut verdiene rundt grensen på kalkulatoren.

Leksjonen hører til modulen Eksamensforberedelse og øves til del 2. Les mer om eksamen i R1, og bruk formelarket for R1 når du øver.

Begreper: løkke rekursiv formel numerisk derivasjon halveringsmetoden Newtons metode

Les også

Mer om matte R1

Ser du en feil? Si fra på kontakt@sophus.no, så retter vi den.