Vanlig feil: Å miste opprinnelige definisjonsbegrensninger etter forkorting.
Sensorpunkt: Faktorisering, fortegn og domene må være korrekte.
Del 1 - Oppgave 2bLogaritmeregler
Oppgave 2b
Oppgave: Skriv så enkelt som mulig: \[\ln(4x)+3\ln\!\left(\frac x2\right)+\ln(2x^2).\]
Vis løsning
Hva spør oppgaven om? Vi bruker produkt-, kvotient- og potensregelen for logaritmer. Uttrykket krever \(x>0\).
Steg 1 – Utvid første logaritme
\(\ln(4x)=\ln4+\ln x\).
Steg 2 – Utvid kvotienten
\(3\ln(x/2)=3\ln x-3\ln2\).
Steg 3 – Utvid siste ledd
\(\ln(2x^2)=\ln2+2\ln x\).
Steg 4 – Samle x-ledd
\(\ln x+3\ln x+2\ln x=6\ln x\).
Steg 5 – Samle konstanter
\(\ln4-3\ln2+\ln2=2\ln2-2\ln2=0\).
Steg 6 – Konklusjon
\[6\ln x=\ln(x^6).\]
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Expand[ln(4x)+3ln(x/2)+ln(2x^2)]
\(6\ln x\)
Tolkning: Alle konstante logaritmeledd kansellerer når x>0.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspx=sp.symbols("x",positive=True)expr=sp.log(4*x)+3*sp.log(x/2)+sp.log(2*x**2)expanded=sp.expand_log(expr,force=True)simplified=sp.simplify(expanded)print("Original expression =",expr)print("Expanded logarithms =",expanded)print("Simplified =",simplified)print("As one logarithm =",sp.log(x**6))print("Difference from 6*log(x) =",sp.simplify(simplified-6*sp.log(x)))print("Domain: x > 0")
Utskrift fra Python:
Original expression = 3*log(x/2) + log(4*x) + log(2*x**2)
Expanded logarithms = 6*log(x)
Simplified = 6*log(x)
As one logarithm = log(x**6)
Difference from 6*log(x) = 0
Domain: x > 0
Fasit: \(6\ln x=\ln(x^6)\), for \(x>0\).
Vanlig feil: Å bruke logaritmereglene uten å kontrollere at \(x>0\).
Sensorpunkt: Kanselleringen av konstantleddene skal vises.
Del 1 - Oppgave 3aParameterframstillinger
Oppgave 3a
Oppgave: Punktene \(A(2,2)\), \(B(6,1)\), \(C(6,5)\) og \(D(2,6)\) er gitt. Finn parameterframstillinger for linjen \(\ell\) gjennom A og C og linjen m gjennom B og D.
Vis løsning
Hva spør oppgaven om? Vi finner en retningsvektor for hver linje ved å trekke koordinatene fra hverandre.
Tolkning: Skjæringspunktet har eksakt y-koordinat 7/2.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspt,s=sp.symbols("t s",real=True)solutions=sp.solve([sp.Eq(2+4*t,6-4*s),sp.Eq(2+3*t,1+5*s)],[t,s],dict=True)sol=solutions[0]point_l=(sp.simplify(2+4*sol[t]),sp.simplify(2+3*sol[t]))point_m=(sp.simplify(6-4*sol[s]),sp.simplify(1+5*sol[s]))print("Solutions =",solutions)print("Point from l =",point_l)print("Point from m =",point_m)print("Points agree =",point_l==point_m)print("Decimal point =",tuple(sp.N(v)forvinpoint_l))
Utskrift fra Python:
Solutions = [{s: 1/2, t: 1/2}]
Point from l = (4, 7/2)
Point from m = (4, 7/2)
Points agree = True
Decimal point = (4.00000000000000, 3.50000000000000)
Fasit: Skjæringspunktet er \(\left(4,\dfrac72\right)\).
Vanlig feil: Å bruke samme parameter på begge linjene uten begrunnelse.
Sensorpunkt: Begge koordinatlikningene og innsettingen skal dokumenteres.
Del 1 - Oppgave 3cSkalarprodukt og normalitet
Oppgave 3c
Oppgave: Avgjør om \(\ell\) og m står normalt på hverandre.
Vis løsning
Hva spør oppgaven om? To linjer er normale dersom skalarproduktet av retningsvektorene er 0.
Steg 1 – Retningsvektorene
\(\vec u=(4,3)\) og \(\vec v=(-4,5)\).
Steg 2 – Skalarprodukt
\[\vec u\cdot\vec v=4(-4)+3\cdot5.\]
Steg 3 – Regn ut
\[-16+15=-1.\]
Steg 4 – Konklusjon
Siden skalarproduktet ikke er 0, står linjene ikke normalt på hverandre.
Steg 5 – Nær, men ikke rett vinkel
At produktet er nær 0 er ikke nok; det må være nøyaktig 0.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Dot[(4,3),(-4,5)]
\(-1\)
Tolkning: Skalarproduktet er ikke null, så vinkelen er ikke 90 grader.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspu=sp.Matrix([4,3]);v=sp.Matrix([-4,5])dot=u.dot(v)cos_angle=sp.N(dot/(sp.sqrt(u.dot(u))*sp.sqrt(v.dot(v))),12)angle=sp.N(sp.acos(dot/(sp.sqrt(u.dot(u))*sp.sqrt(v.dot(v))))*180/sp.pi,12)print("u =",tuple(u))print("v =",tuple(v))print("Dot product =",dot)print("Perpendicular =",dot==0)print("cos(angle) =",cos_angle)print("Angle in degrees =",angle)
Utskrift fra Python:
u = (4, 3)
v = (-4, 5)
Dot product = -1
Perpendicular = False
cos(angle) = -0.0312347523777
Angle in degrees = 91.7899106082
Fasit: Nei. \((4,3)\cdot(-4,5)=-1\neq0\).
Vanlig feil: Å konkludere med normalitet fordi linjene ser nesten vinkelrette ut.
Sensorpunkt: Skalarproduktet må beregnes nøyaktig.
Del 1 - Oppgave 4Optimering av rektangel
Oppgave 4
Oppgave: \(f(x)=\dfrac5{x^2+4}\). Rektangelet har hjørner \(A(-t,0)\), \(B(t,0)\), \(C(t,f(t))\), \(D(-t,f(-t))\), der \(t>0\). Finn størst mulig areal.
Vis løsning
Hva spør oppgaven om? Bredden er 2t, og siden f er en jevn funksjon, er høyden f(t). Vi maksimerer arealfunksjonen.
Fasit: Det største arealet er \(\dfrac52=2{,}5\) kvadratenheter, ved \(t=2\).
Vanlig feil: Å bruke høyden \(2f(t)\) eller glemme at bredden er \(2t\).
Sensorpunkt: Arealfunksjon, derivert, fortegn og maksimumsverdi må vises.
Del 1 - Oppgave 5aImplikasjon og ekvivalens
Oppgave 5a
Oppgave: Fyll inn riktig symbol i \[\lg x^2=2\quad\square\quad x=10.\]
Vis løsning
Hva spør oppgaven om? Vi løser venstre utsagn og undersøker begge implikasjonsretningene.
Steg 1 – Løs venstre utsagn
\(\lg x^2=2\Rightarrow x^2=10^2=100\).
Steg 2 – To løsninger
\(x=10\) eller \(x=-10\).
Steg 3 – Venstre til høyre?
Nei, fordi \(x=-10\) oppfyller venstre utsagn, men ikke \(x=10\).
Steg 4 – Høyre til venstre?
Ja. Dersom \(x=10\), er \(\lg(10^2)=\lg100=2\).
Steg 5 – Symbol
Venstre utsagn følger av høyre: \(\lg x^2=2\Leftarrow x=10\).
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Solve[lg(x^2)=2,x]
\(x=-10\) eller \(x=10\)
Tolkning: To løsninger på venstresiden utelukker ekvivalens.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspx=sp.symbols("x",real=True)solutions=sp.solve(sp.Eq(x**2,100),x)left_at_10=sp.log(10**2,10)left_at_minus10=sp.log((-10)**2,10)print("Solutions of x^2 = 100 =",solutions)print("Left statement at x=10 =",left_at_10)print("Left statement at x=-10 =",left_at_minus10)print("Left implies x=10 =",solutions==[10])print("x=10 implies left =",left_at_10==2)print("Correct symbol: <= (left follows from right)")
Utskrift fra Python:
Solutions of x^2 = 100 = [-10, 10]
Left statement at x=10 = 2
Left statement at x=-10 = 2
Left implies x=10 = False
x=10 implies left = True
Correct symbol: <= (left follows from right)
Fasit: \(\lg x^2=2\Leftarrow x=10\).
Vanlig feil: Å ta kvadratroten og bare beholde den positive løsningen.
Sensorpunkt: Begge implikasjonsretningene må vurderes.
Del 1 - Oppgave 5bUlikhet og intervall
Oppgave 5b
Oppgave: Fyll inn riktig symbol i \[x^2-2x<0\quad\square\quad x\in(0,1).\]
Vis løsning
Hva spør oppgaven om? Vi løser ulikheten og sammenligner løsningsmengden med intervallet på høyre side.
Steg 1 – Faktoriser
\[x^2-2x=x(x-2).\]
Steg 2 – Nullpunkter
Nullpunktene er 0 og 2.
Steg 3 – Fortegn
Produktet er negativt mellom nullpunktene.
Steg 4 – Løsningsmengde
\[x^2-2x<0\iff x\in(0,2).\]
Steg 5 – Sammenlign
Alle \(x\in(0,1)\) ligger i \((0,2)\), men ikke omvendt.
Steg 6 – Symbol
Venstre utsagn følger av høyre: \(x^2-2x<0\Leftarrow x\in(0,1)\).
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Solve[x^2-2x<0,x]
\(0<x<2\)
Tolkning: Høyre intervall er en ekte delmengde av løsningsintervallet.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspx=sp.symbols("x",real=True)solution=sp.solve_univariate_inequality(x**2-2*x<0,x)print("Factorization =",sp.factor(x**2-2*x))print("Solution of inequality =",solution)print("Test x=0.5 gives =",sp.N((x**2-2*x).subs(x,sp.Rational(1,2))))print("Test x=1.5 gives =",sp.N((x**2-2*x).subs(x,sp.Rational(3,2))))print("Left implies x in (0,1) = False")print("x in (0,1) implies left = True")print("Correct symbol: <= (left follows from right)")
Utskrift fra Python:
Factorization = x*(x - 2)
Solution of inequality = (0 < x) & (x < 2)
Test x=0.5 gives = -0.750000000000000
Test x=1.5 gives = -0.750000000000000
Left implies x in (0,1) = False
x in (0,1) implies left = True
Correct symbol: <= (left follows from right)
Fasit: \(x^2-2x<0\Leftarrow x\in(0,1)\).
Vanlig feil: Å tro at løsningen er \((0,1)\) i stedet for \((0,2)\).
Sensorpunkt: Fortegnslinje eller tilsvarende begrunnelse må være korrekt.
Del 1 - Oppgave 6aSirkulære permutasjoner
Oppgave 6a
Oppgave: Siv, Audun og fire venner skal plassere seg i ring. Begrunn at det finnes 120 ulike plasseringer.
Vis løsning
Hva spør oppgaven om? Rotasjoner av samme ring regnes som samme plassering, så vi fester én person og ordner de andre.
Steg 1 – Seks personer på linje
På linje ville det vært \(6!\) rekkefølger.
Steg 2 – Rotasjonsoverlapper
Hver ringplassering kan roteres på 6 måter uten å endres.
Steg 3 – Del på 6
\[\frac{6!}{6}=5!.\]
Steg 4 – Regn ut
\[5!=5\cdot4\cdot3\cdot2\cdot1=120.\]
Steg 5 – Alternativ forklaring
Fest Siv på én plass. De fem andre kan ordnes på \(5!\) måter.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
5!
\(120\)
Tolkning: Når én person festes, gjenstår fem frie plasser.
Utskrift fra Python:
Linear arrangements = 720
Rotations per circular arrangement = 6
Circular arrangements = 120
Fixed-person method = 120
Methods agree = True
Fasit: Det finnes \(5!=120\) ulike plasseringer i ringen.
Vanlig feil: Å bruke \(6!\) og telle rotasjoner som forskjellige.
Sensorpunkt: Det må forklares hvorfor én person kan festes eller hvorfor det deles på 6.
Del 1 - Oppgave 6bNabosannsynlighet i ring
Oppgave 6b
Oppgave: Bestem sannsynligheten for at Siv får holde Audun i hånden ved tilfeldig plassering i ringen.
Vis løsning
Hva spør oppgaven om? Når Siv er festet, har Audun fem mulige plasser, og to av dem er naboplasser.
Steg 1 – Fest Siv
Rotasjonen av ringen spiller ingen rolle, så Siv kan holdes fast.
Steg 2 – Mulige plasser for Audun
Blant de fem resterende plassene er alle like sannsynlige.
Steg 3 – Gunstige plasser
Siv har én nabo på hver side, altså 2 gunstige plasser.
Steg 4 – Sannsynlighet
\[P=\frac25=0{,}4.\]
Steg 5 – Kombinatorisk kontroll
Gunstige ringplasseringer: \(2\cdot4!=48\), totalt \(5!=120\), og \(48/120=2/5\).
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
2/5
\(0.4\)
Tolkning: To av fem mulige plasseringer for Audun gir naboskap.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importmathfavourable_positions=2total_positions=5probability=favourable_positions/total_positionsfavourable_arrangements=2*math.factorial(4)total_arrangements=math.factorial(5)print("Favourable neighbour positions =",favourable_positions)print("Possible positions for Audun =",total_positions)print("Probability =",probability)print("Favourable circular arrangements =",favourable_arrangements)print("Total circular arrangements =",total_arrangements)print("Arrangement ratio =",favourable_arrangements/total_arrangements)
Utskrift fra Python:
Favourable neighbour positions = 2
Possible positions for Audun = 5
Probability = 0.4
Favourable circular arrangements = 48
Total circular arrangements = 120
Arrangement ratio = 0.4
Fasit: Sannsynligheten er \(\dfrac25=40\%\).
Vanlig feil: Å bruke 2 av 6 plasser; Siv kan ikke stå på sin egen plass.
Sensorpunkt: Utvalgsrommet må være fem mulige plasser for Audun.
Del 1 - Oppgave 6cNabosannsynlighet på linje
Oppgave 6c
Oppgave: På et bilde står de seks på linje. Bestem sannsynligheten for at Audun og Siv står ved siden av hverandre.
Vis løsning
Hva spør oppgaven om? Vi behandler Audun og Siv som én blokk og tar hensyn til intern rekkefølge.
Steg 1 – Totalt antall
Seks personer kan ordnes på \(6!\) måter.
Steg 2 – Lag en blokk
AS-blokken og de fire andre gir 5 objekter.
Steg 3 – Ordne objektene
De 5 objektene kan ordnes på \(5!\) måter.
Steg 4 – Intern rekkefølge
I blokken kan rekkefølgen være AS eller SA, altså faktor 2.
Steg 5 – Gunstige
\(2\cdot5!\).
Steg 6 – Sannsynlighet
\[P=\frac{2\cdot5!}{6!}=\frac26=\frac13.\]
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
2*5!/6!
\(1/3\)
Tolkning: Blokkmetoden gir eksakt en tredel.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importmathfavourable=2*math.factorial(5)total=math.factorial(6)probability=favourable/totalprint("Favourable arrangements =",favourable)print("Total arrangements =",total)print("Probability =",probability)print("Exact numerator after reduction = 1")print("Exact denominator after reduction = 3")
Utskrift fra Python:
Favourable arrangements = 240
Total arrangements = 720
Probability = 0.3333333333333333
Exact numerator after reduction = 1
Exact denominator after reduction = 3
Fasit: Sannsynligheten er \(\dfrac13\).
Vanlig feil: Å glemme at blokken kan ha to interne rekkefølger.
Sensorpunkt: Både blokkmetoden og totalantallet \(6!\) må være riktig.
Del 1 - Oppgave 7aInnskrevne vinkler
Oppgave 7a
Oppgave: Forklar at \(\angle BAC=\angle BDC\) i den sykliske firkanten ABCD.
Vis løsning
Hva spør oppgaven om? Begge vinklene er innskrevne vinkler som spenner over den samme korden BC.
Steg 1 – Identifiser korden
Vinkelen \(\angle BAC\) har endepunktene B og C på sirkelen.
Steg 2 – Den andre vinkelen
Vinkelen \(\angle BDC\) har også endepunktene B og C.
Steg 3 – Samme bue
Begge spenner over buen BC som ikke inneholder vinkelpunktet.
Steg 4 – Periferivinkelsetningen
Innskrevne vinkler som spenner over samme bue, er like store.
Steg 5 – Konklusjon
\[\angle BAC=\angle BDC.\]
Begge markerte vinkler spenner over korden BC.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
CircularArc[(0,0),B,C]
Buen BC
Tolkning: GeoGebra kan måle begge periferivinklene og vise at de er like.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspalpha=sp.symbols("alpha",positive=True)angle_BAC=alpha/2angle_BDC=alpha/2print("Central angle over arc BC =",alpha)print("Angle BAC =",angle_BAC)print("Angle BDC =",angle_BDC)print("Difference =",sp.simplify(angle_BAC-angle_BDC))print("Reason: both inscribed angles subtend chord BC")
Utskrift fra Python:
Central angle over arc BC = alpha
Angle BAC = alpha/2
Angle BDC = alpha/2
Difference = 0
Reason: both inscribed angles subtend chord BC
Fasit: Vinklene er like fordi begge er periferivinkler over korden BC.
Vanlig feil: Å begrunne med at firkanten bare ser symmetrisk ut.
Sensorpunkt: Korden/buen BC og periferivinkelsetningen skal nevnes.
Del 1 - Oppgave 7bFormlikhet i Ptolemaios-beviset
Oppgave 7b
Oppgave: Punktet E ligger på BD slik at \(\angle DCE=\angle ACB\). Forklar at \(\triangle DEC\sim\triangle ABC\), og vis at \(ED\cdot AC=AB\cdot DC\).
Vis løsning
Hva spør oppgaven om? Vi finner to par like vinkler og bruker deretter forholdet mellom samsvarende sider.
Steg 1 – Ett vinkelpar
\(\angle DCE=\angle ACB\) ved konstruksjonen.
Steg 2 – Det andre vinkelparet
Fordi E ligger på BD, er \(\angle EDC=\angle BDC\). Fra a er \(\angle BDC=\angle BAC\).
Steg 3 – Formlikhet
Dermed er \(\triangle DEC\sim\triangle ABC\) ved vinkel–vinkel.
Steg 4 – Samsvar
D svarer til A, E til B og C til C.
Steg 5 – Sideforhold
\[\frac{ED}{AB}=\frac{DC}{AC}.\]
Steg 6 – Kryssmultipliser
\[ED\cdot AC=AB\cdot DC.\]
Punktet E ligger på diagonalen BD i standardbeviset.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Angle[D,C,E]=Angle[A,C,B]
Konstruksjonsvilkår
2
AreCongruent[Triangle[D,E,C],Triangle[A,B,C]]
Nei; trekantene er formlike, ikke nødvendigvis kongruente
Tolkning: Målte vinkler og sideforhold dokumenterer formlikheten.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspED,AB,DC,AC=sp.symbols("ED AB DC AC",positive=True)ratio_equation=sp.Eq(ED/AB,DC/AC)cross_multiplied=sp.Eq(ED*AC,AB*DC)check=sp.simplify(ED/AB-DC/AC)print("Similarity correspondence: D<->A, E<->B, C<->C")print("Side ratio equation =",ratio_equation)print("Cross-multiplied result =",cross_multiplied)print("If ratio difference is zero, product difference is zero after multiplying by AB*AC")print("Symbolic multiplied difference =",sp.expand(check*AB*AC))
Utskrift fra Python:
Similarity correspondence: D<->A, E<->B, C<->C
Side ratio equation = Eq(ED/AB, DC/AC)
Cross-multiplied result = Eq(AC*ED, AB*DC)
If ratio difference is zero, product difference is zero after multiplying by AB*AC
Symbolic multiplied difference = -AB*DC + AC*ED
Fasit: \(\triangle DEC\sim\triangle ABC\), og derfor \(ED\cdot AC=AB\cdot DC\).
Vanlig feil: Å bruke feil samsvar mellom hjørnene i de formlike trekantene.
Sensorpunkt: Begge vinkelpar og det riktige sideforholdet må vises.
Del 1 - Oppgave 7cAndre formlikhet i Ptolemaios-beviset
Oppgave 7c
Oppgave: Forklar at \(\triangle ACD\sim\triangle BCE\), og vis at \(BE\cdot AC=BC\cdot AD\).
Vis løsning
Hva spør oppgaven om? Vi sammenligner vinklene ved C og bruker at motstående vinkler i en syklisk firkant er supplementære.
Steg 1 – Vinkelen ved C
\(\angle ACD=\angle ACB+\angle BCD\).
Steg 2 – Bruk konstruksjonen
\(\angle BCE=\angle BCD+\angle DCE=\angle BCD+\angle ACB\). Dermed er \(\angle ACD=\angle BCE\).
Steg 3 – Vinkelen ved E
\(\angle BEC\) er supplementvinkelen til \(\angle DEC\). Fra b er \(\angle DEC=\angle ABC\).
Steg 4 – Syklisk firkant
\(\angle ADC+\angle ABC=180^{\circ}\). Derfor er \(\angle BEC=\angle ADC\).
Steg 5 – Formlikhet
\(\triangle ACD\sim\triangle BCE\).
Steg 6 – Sideforhold
\[\frac{BE}{AD}=\frac{BC}{AC}.\]
Steg 7 – Kryssmultipliser
\[BE\cdot AC=BC\cdot AD.\]
De to formlikhetene deler opp diagonalen BD.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Angle[A,C,D]=Angle[B,C,E]
Lik vinkel ved C
2
Angle[A,D,C]=Angle[B,E,C]
Lik andre vinkel
Tolkning: To like vinkelpar gir formlikhet med samsvar A↔B, C↔C, D↔E.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspBE,AD,BC,AC=sp.symbols("BE AD BC AC",positive=True)ratio_equation=sp.Eq(BE/AD,BC/AC)product_equation=sp.Eq(BE*AC,BC*AD)print("Similarity correspondence: A<->B, C<->C, D<->E")print("Side ratio equation =",ratio_equation)print("Product equation =",product_equation)print("Cross multiplication check =",sp.expand((BE/AD-BC/AC)*AD*AC))print("This equals BE*AC - BC*AD")
Utskrift fra Python:
Similarity correspondence: A<->B, C<->C, D<->E
Side ratio equation = Eq(BE/AD, BC/AC)
Product equation = Eq(AC*BE, AD*BC)
Cross multiplication check = AC*BE - AD*BC
This equals BE*AC - BC*AD
Fasit: \(\triangle ACD\sim\triangle BCE\), og derfor \(BE\cdot AC=BC\cdot AD\).
Vanlig feil: Å anta formlikhet uten å etablere to vinkelpar.
Sensorpunkt: Vinkelargumentet og korrekt samsvar skal være tydelig.
Del 1 - Oppgave 7dSammenstilling av Ptolemaios’ setning
Oppgave 7d
Oppgave: Bruk resultatene fra b og c til å vise \[AC\cdot BD=AB\cdot DC+BC\cdot AD.\]
Vis løsning
Hva spør oppgaven om? Punktet E deler diagonalen BD i delene BE og ED. Vi multipliserer denne summen med AC.
Steg 1 – Del diagonalen
Fordi E ligger på BD, er \(BD=BE+ED\).
Steg 2 – Multipliser med AC
\[AC\cdot BD=AC(BE+ED).\]
Steg 3 – Fordel
\[AC\cdot BD=AC\cdot BE+AC\cdot ED.\]
Steg 4 – Bruk del c
\(AC\cdot BE=BC\cdot AD\).
Steg 5 – Bruk del b
\(AC\cdot ED=AB\cdot DC\).
Steg 6 – Sett inn
\[AC\cdot BD=BC\cdot AD+AB\cdot DC.\]
Steg 7 – Bytt rekkefølge
Dette er nøyaktig Ptolemaios’ setning.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Expand[AC*(BE+ED)]
\(AC\,BE+AC\,ED\)
Tolkning: Etter substitusjon av de to produktidentitetene fås Ptolemaios direkte.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspAC,BE,ED,BC,AD,AB,DC=sp.symbols("AC BE ED BC AD AB DC")BD=BE+EDexpression=sp.expand(AC*BD)substituted=expression.subs({AC*BE:BC*AD,AC*ED:AB*DC})print("BD = BE + ED")print("AC*BD expanded =",expression)print("Use AC*BE = BC*AD")print("Use AC*ED = AB*DC")print("Result =",substituted)print("Target difference =",sp.expand(substituted-(AB*DC+BC*AD)))
Utskrift fra Python:
BD = BE + ED
AC*BD expanded = AC*BE + AC*ED
Use AC*BE = BC*AD
Use AC*ED = AB*DC
Result = AB*DC + AD*BC
Target difference = 0
Fasit: \(AC\cdot BD=AB\cdot DC+BC\cdot AD\).
Vanlig feil: Å glemme at BD er summen BE+ED.
Sensorpunkt: Begge delresultatene skal settes inn i riktig ledd.
Del 1 - Oppgave 7ePytagoras fra Ptolemaios
Oppgave 7e
Oppgave: Bruk Ptolemaios’ setning og den viste sykliske firkanten til å bevise Pytagoras’ setning.
Vis løsning
Hva spør oppgaven om? Figuren er et rektangel innskrevet i en sirkel. Sidene har lengder a og b, mens begge diagonalene har lengde c.
Steg 1 – Identifiser lengdene
\(AB=CD=a\), \(BC=AD=b\), og \(AC=BD=c\).
Steg 2 – Bruk Ptolemaios
\[AC\cdot BD=AB\cdot DC+BC\cdot AD.\]
Steg 3 – Sett inn lengdene
\[c\cdot c=a\cdot a+b\cdot b.\]
Steg 4 – Forenkle
\[c^2=a^2+b^2.\]
Steg 5 – Tolkning
Trekant ABC er rettvinklet fordi en vinkel som spenner over diameteren AC er 90 grader.
Steg 6 – Konklusjon
Likningen er Pytagoras’ setning for katetene a,b og hypotenusen c.
I det innskrevne rektangelet er begge diagonalene c.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Simplify[c*c-(a*a+b*b)]
\(c^2-a^2-b^2\)
Tolkning: Ptolemaios for rektangelet gir at uttrykket må være 0.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspa,b,c=sp.symbols("a b c",positive=True)left=c*cright=a*a+b*bprint("Ptolemy left AC*BD =",left)print("Ptolemy right AB*DC + BC*AD =",right)print("Resulting equation: c^2 = a^2 + b^2")example_a,example_b=3,4example_c=sp.sqrt(example_a**2+example_b**2)print("Example a=3, b=4 gives c =",example_c)print("Check c^2-a^2-b^2 =",sp.simplify(example_c**2-example_a**2-example_b**2))
Utskrift fra Python:
Ptolemy left AC*BD = c**2
Ptolemy right AB*DC + BC*AD = a**2 + b**2
Resulting equation: c^2 = a^2 + b^2
Example a=3, b=4 gives c = 5
Check c^2-a^2-b^2 = 0
Fasit: Ptolemaios gir \(c^2=a^2+b^2\), altså Pytagoras’ setning.
Vanlig feil: Å bruke bare én av diagonalene som c uten å forklare at diagonalene i et rektangel er like.
Sensorpunkt: Alle fire side- og to diagonallengder skal kobles korrekt til Ptolemaios.
Del 2 - med hjelpemidler
Del 2 - Oppgave 1aParameterkurve
Oppgave 1a
Oppgave: Posisjonsvektoren er \[\vec r(t)=\left(\frac{1-t^2}{t^2+1},\frac{t^2+2t}{t^2+1}\right),\qquad -10\le t\le10.\] Tegn grafen.
Vis løsning
Hva spør oppgaven om? Vi plotter x(t) mot y(t), ikke hver koordinat separat mot t.
Steg 1 – Koordinatfunksjoner
\(x(t)=(1-t^2)/(t^2+1)\) og \(y(t)=(t^2+2t)/(t^2+1)\).
Steg 2 – Viktige punkt
\(\vec r(0)=(1,0)\). For store positive og negative t nærmer x seg -1 og y seg 1.
Steg 3 – Parameterplot
La t løpe fra -10 til 10 og tegn punktene \((x(t),y(t))\).
Steg 4 – Retning
Økende t bestemmer bevegelsesretningen langs kurven.
Steg 5 – Implisitt kontroll
Eliminasjon av t gir \(5x^2+4xy-2x+4y^2-4y-3=0\).
Steg 6 – Avgrensning
Bare den delen som svarer til \(-10\le t\le10\), skal tegnes.
Kurven er tegnet med t som felles parameter.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Curve[(1-t^2)/(t^2+1),(t^2+2t)/(t^2+1),t,-10,10]
Parameterkurven
Tolkning: Curve-kommandoen tegner x- og y-koordinatene med samme parameter.
\[P(\text{minst ett grønt})=1-\left(\frac{36}{37}\right)^{10}.\]
Steg 4 – Beregn
\[P\approx0{,}239660.\]
Steg 5 – Prosent
Dette er omtrent \(23{,}97\%\).
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
1-(36/37)^10
\(0.2396601251\)
Tolkning: Komplementet er enklere enn å summere sannsynligheten for 1,2,...,10 grønne.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
fromfractionsimportFractionp_no_green=Fraction(36,37)**10p_at_least_one=1-p_no_greenprint("P(no green in one game) =",Fraction(36,37))print("P(no green in 10 games) =",p_no_green)print("P(at least one green) =",p_at_least_one)print("Decimal probability =",float(p_at_least_one))print("Percentage =",100*float(p_at_least_one))
Utskrift fra Python:
P(no green in one game) = 36/37
P(no green in 10 games) = 3656158440062976/4808584372417849
P(at least one green) = 1152425932354873/4808584372417849
Decimal probability = 0.23966012512231558
Percentage = 23.966012512231558
Fasit: \(1-(36/37)^{10}\approx0{,}23966\), altså ca. \(23{,}97\%\).
Vanlig feil: Å bruke \(10/37\) som om hendelsene var gjensidig utelukkende.
Sensorpunkt: Uavhengighet og komplementhendelsen må fremgå.
Del 2 - Oppgave 2bLogaritmisk ulikhet
Oppgave 2b
Oppgave: Hvor mange ganger må vi minst spille for at sannsynligheten for grønt minst én gang skal være større enn 50 %?
Vis løsning
Hva spør oppgaven om? Vi setter opp en ulikhet med komplementet og løser den med logaritmer.
Steg 1 – Modell
\[1-\left(\frac{36}{37}\right)^n>0{,}5.\]
Steg 2 – Flytt ledd
\[\left(\frac{36}{37}\right)^n<0{,}5.\]
Steg 3 – Ta logaritme
\[n\ln(36/37)<\ln(0{,}5).\]
Steg 4 – Del på negativt tall
Fordi \(\ln(36/37)<0\), snur ulikhetstegnet: \[n>\frac{\ln(0{,}5)}{\ln(36/37)}.\]
Steg 5 – Tallverdi
Grensen er \(n>25{,}298\).
Steg 6 – Minste heltall
\(n=26\).
Steg 7 – Kontroll
25 spill gir under 50 %, mens 26 gir over 50 %.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
ln(0.5)/ln(36/37)
\(25.29828948\)
2
1-(36/37)^26
\(0.5096\)
Tolkning: Fordi n må være et heltall, rundes grensen opp til 26.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importmaththreshold=math.log(0.5)/math.log(36/37)n=math.floor(threshold)+1p25=1-(36/37)**25p26=1-(36/37)**26print("Continuous threshold =",threshold)print("Smallest integer n =",n)print("P(at least one green in 25 games) =",p25)print("P(at least one green in 26 games) =",p26)print("25 games exceeds 0.5 =",p25>0.5)print("26 games exceeds 0.5 =",p26>0.5)
Utskrift fra Python:
Continuous threshold = 25.29828948343004
Smallest integer n = 26
P(at least one green in 25 games) = 0.4958968427156847
P(at least one green in 26 games) = 0.5095212523720176
25 games exceeds 0.5 = False
26 games exceeds 0.5 = True
Fasit: Vi må spille minst \(26\) ganger.
Vanlig feil: Å dele på en negativ logaritme uten å snu ulikhetstegnet.
Sensorpunkt: Heltallsavrunding og kontroll av 25 og 26 skal være med.
Del 2 - Oppgave 2cBinomisk sannsynlighet
Oppgave 2c
Oppgave: Forklar hvordan man kommer fram til \(p\approx0{,}151\) for rødt tall i minst 7 av 10 spill.
Vis løsning
Hva spør oppgaven om? Antall røde utfall er binomisk fordelt med n=10 og sannsynlighet 18/37 i hvert spill.
Tolkning: Komplementet av den kumulative sannsynligheten til og med 6 gir minst 7.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importmathp=18/37terms=[]forkinrange(7,11):value=math.comb(10,k)*p**k*(1-p)**(10-k)terms.append((k,value))total=sum(valuefor_,valueinterms)print("Distribution: X ~ Binomial(n=10, p=18/37)")fork,valueinterms:print(f"P(X={k}) = {value:.12f}")print("P(X>=7) =",total)print("Rounded to three decimals =",round(total,3))
Utskrift fra Python:
Distribution: X ~ Binomial(n=10, p=18/37)
P(X=7) = 0.104793017011
P(X=8) = 0.037229098149
P(X=9) = 0.007837704873
P(X=10) = 0.000742519409
P(X>=7) = 0.1506023394423857
Rounded to three decimals = 0.151
Vanlig feil: Å bruke sannsynligheten 18/36 i stedet for 18/37.
Sensorpunkt: Binomisk modell, sum fra 7 til 10 og korrekt p-verdi må vises.
Del 2 - Oppgave 2dBinomisk modell i to nivåer
Oppgave 2d
Oppgave: Åtte venner spiller 10 ganger hver. Finn sannsynligheten for at nøyaktig 3 av dem får rødt minst 7 av 10 ganger.
Vis løsning
Hva spør oppgaven om? For hver venn er «minst 7 røde» en ny Bernoulli-hendelse med sannsynlighet q fra del c.
Steg 1 – En venn
Fra del c er \(q\approx0{,}1506023394\).
Steg 2 – Ny variabel
La Y være antall av de åtte vennene som lykkes.
Steg 3 – Fordeling
\[Y\sim\operatorname{Bin}(8,q).\]
Steg 4 – Nøyaktig tre
\[P(Y=3)=\binom83q^3(1-q)^5.\]
Steg 5 – Beregn
\[P(Y=3)\approx0{,}0845743.\]
Steg 6 – Prosent
Omtrent \(8{,}46\%\).
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
q:=1-BinomialDist[10,18/37,6,true]
\(0.1506023394\)
2
BinomialDist[8,q,3,false]
\(0.0845743141\)
Tolkning: Den andre binomiske modellen bruker q som suksessannsynlighet.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importmathp_red=18/37q=sum(math.comb(10,k)*p_red**k*(1-p_red)**(10-k)forkinrange(7,11))probability=math.comb(8,3)*q**3*(1-q)**5print("q = P(one friend gets at least 7 red) =",q)print("Number of friends = 8")print("Required successes = 3")print("Binomial coefficient C(8,3) =",math.comb(8,3))print("P(Y=3) =",probability)print("Percentage =",100*probability)
Utskrift fra Python:
q = P(one friend gets at least 7 red) = 0.1506023394423857
Number of friends = 8
Required successes = 3
Binomial coefficient C(8,3) = 56
P(Y=3) = 0.08457431406545474
Percentage = 8.457431406545474
Fasit: \(\binom83q^3(1-q)^5\approx0{,}08457\), altså ca. \(8{,}46\%\).
Vanlig feil: Å bruke 18/37 direkte i den andre binomiske modellen.
Sensorpunkt: Det må være tydelig at q fra del c er den nye suksessannsynligheten.
Del 2 - Oppgave 3aKostnadsfunksjon
Oppgave 3a
Oppgave: Veien AC er 120 m, avstanden CD er 20 m, og \(BC=x\). Firmaet tar 800 kr/m langs veien og 1500 kr/m i terrenget. Vis at \[P(x)=96000-800x+1500\sqrt{x^2+400}.\]
Vis løsning
Hva spør oppgaven om? Vi finner lengden AB langs veien og BD i terrenget og summerer de to kostnadene.
Steg 1 – Veilengden
\(AB=AC-BC=120-x\).
Steg 2 – Terrenglengden
Trekant BCD er rettvinklet, så \[BD=\sqrt{x^2+20^2}=\sqrt{x^2+400}.\]
Steg 3 – Veikostnad
\[800(120-x)=96000-800x.\]
Steg 4 – Terrengkostnad
\[1500\sqrt{x^2+400}.\]
Steg 5 – Totalpris
\[P(x)=96000-800x+1500\sqrt{x^2+400}.\]
Steg 6 – Domene
B ligger mellom C og A, så \(0\le x\le120\).
x er avstanden BC langs veien.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
P(x):=800(120-x)+1500sqrt(x^2+20^2)
\(96000-800x+1500\sqrt{x^2+400}\)
Tolkning: GeoGebra forenkler direkte fra den geometriske kostnadsmodellen.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspx=sp.symbols("x",real=True)AB=120-xBD=sp.sqrt(x**2+20**2)P_geometric=800*AB+1500*BDP_given=96000-800*x+1500*sp.sqrt(x**2+400)print("AB =",AB)print("BD =",BD)print("Road cost =",sp.expand(800*AB))print("Terrain cost =",1500*BD)print("Total cost =",P_geometric)print("Difference from stated formula =",sp.simplify(P_geometric-P_given))print("Domain: 0 <= x <= 120")
Utskrift fra Python:
AB = 120 - x
BD = sqrt(x**2 + 400)
Road cost = 96000 - 800*x
Terrain cost = 1500*sqrt(x**2 + 400)
Total cost = -800*x + 1500*sqrt(x**2 + 400) + 96000
Difference from stated formula = 0
Domain: 0 <= x <= 120
Andrederiverten er positiv for k>0, så punktet er et minimum.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Solve[-1000+k*10/sqrt(10^2+400)=0,k]
\(1000\sqrt5\)
Tolkning: Den oppgitte optimale x-verdien bestemmer terrengprisen entydig.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspx,k=sp.symbols("x k",positive=True)Q=1000*(120-x)+k*sp.sqrt(x**2+400)Q_prime=sp.diff(Q,x)solution=sp.solve(sp.Eq(Q_prime.subs(x,10),0),k)[0]second=sp.simplify(sp.diff(Q,x,2).subs({x:10,k:solution}))print("Q(x) =",Q)print("Q'(x) =",Q_prime)print("Equation at x=10 =",sp.Eq(Q_prime.subs(x,10),0))print("k exact =",solution)print("k decimal =",sp.N(solution,12))print("Q''(10) after substitution =",second)print("Minimum confirmed =",second>0)
Utskrift fra Python:
Q(x) = k*sqrt(x**2 + 400) - 1000*x + 120000
Q'(x) = k*x/sqrt(x**2 + 400) - 1000
Equation at x=10 = Eq(sqrt(5)*k/5 - 1000, 0)
k exact = 1000*sqrt(5)
k decimal = 2236.06797750
Q''(10) after substitution = 80
Minimum confirmed = True
Fasit: Firmaet tar \(1000\sqrt5\approx2236{,}07\) kr per meter i terrenget.
Vanlig feil: Å sette selve kostnaden lik 0 i stedet for den deriverte.
Sensorpunkt: Det må brukes at x=10 er et minimum, og andrederivert/fortegn bør kontrollere dette.
Del 2 - Oppgave 4aFaktorisering og nullpunkt
Oppgave 4a
Oppgave: \[f(x)=x^3-2bx^2+(b^2+3)x,\qquad b\in\mathbb R.\] Forklar at f bare har ett nullpunkt uansett b.
Vis løsning
Hva spør oppgaven om? Vi faktoriserer ut x og fullfører kvadratet i den resterende faktoren.
Steg 1 – Faktoriser ut x
\[f(x)=x\bigl(x^2-2bx+b^2+3\bigr).\]
Steg 2 – Fullfør kvadratet
\[x^2-2bx+b^2=(x-b)^2.\]
Steg 3 – Ny form
\[f(x)=x\bigl((x-b)^2+3\bigr).\]
Steg 4 – Positiv faktor
For alle reelle x og b er \((x-b)^2+3\ge3>0\).
Steg 5 – Nullpunkt
Produktet kan derfor bare være 0 når \(x=0\).
Steg 6 – Koordinat
Grafens eneste nullpunkt er \((0,0)\).
Alle kurvene går gjennom (0,0), og ingen har andre nullpunkter.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Factor[x^3-2b x^2+(b^2+3)x]
\(x((x-b)^2+3)\)
Tolkning: Den andre faktoren er strengt positiv for reelle verdier.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspx,b=sp.symbols("x b",real=True)f=x**3-2*b*x**2+(b**2+3)*xfactored=x*((x-b)**2+3)print("f(x) =",f)print("Factorized =",sp.factor(f))print("Target factorization =",factored)print("Difference =",sp.expand(f-factored))print("Minimum possible value of second factor = 3")print("Only real zero is x=0")
Utskrift fra Python:
f(x) = -2*b*x**2 + x**3 + x*(b**2 + 3)
Factorized = x*(b**2 - 2*b*x + x**2 + 3)
Target factorization = x*((-b + x)**2 + 3)
Difference = 0
Minimum possible value of second factor = 3
Only real zero is x=0
Fasit: Fordi \(f(x)=x((x-b)^2+3)\), er det eneste nullpunktet \(x=0\).
Vanlig feil: Å behandle den positive faktoren som om den kunne bli 0.
Sensorpunkt: Faktoriseringen og argumentet om streng positivitet må være eksplisitt.
Del 2 - Oppgave 4bEkstremalpunkter i parameterfamilie
Oppgave 4b
Oppgave: For hvilke b-verdier har grafen til f både toppunkt og bunnpunkt?
Vis løsning
Hva spør oppgaven om? En tredjegradsfunksjon har både topp og bunn når den deriverte har to ulike reelle nullpunkter.
Steg 1 – Deriver
\[f^\prime(x)=3x^2-4bx+b^2+3.\]
Steg 2 – Diskriminant
For andregradslikningen er \[\Delta=(-4b)^2-4\cdot3(b^2+3).\]
Steg 3 – Forenkle
\[\Delta=16b^2-12b^2-36=4(b^2-9).\]
Steg 4 – To ulike røtter
Vi krever \(\Delta>0\): \[b^2-9>0.\]
Steg 5 – Løs ulikheten
\[|b|>3.\]
Steg 6 – Intervallform
\[b<-3\quad\text{eller}\quad b>3.\]
Steg 7 – Grenseverdier
For \(b=\pm3\) har f′ en dobbel rot og grafen får ikke både topp og bunn.
Kurvene med b=±4 har to ekstremalpunkter, mens b=0 ikke har det.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Discriminant[3x^2-4b x+b^2+3,x]
\(4(b^2-9)\)
2
Solve[4(b^2-9)>0,b]
\(b<-3\) eller \(b>3\)
Tolkning: Strengt positiv diskriminant gir to ulike stasjonære punkt.
Fasit: Grafen har både toppunkt og bunnpunkt når \(b<-3\) eller \(b>3\).
Vanlig feil: Å bruke \(\Delta\ge0\); dobbel rot gir ikke både topp og bunn.
Sensorpunkt: Diskriminanten må være strengt positiv.
Del 2 - Oppgave 4cFelles tangent
Oppgave 4c
Oppgave: Vis at grafen til f tangerer linjen \(y=3x\) uavhengig av b, og bestem tangeringspunktet.
Vis løsning
Hva spør oppgaven om? Vi undersøker differansen mellom f(x) og linjen. En dobbel rot i differansen betyr kontakt med samme stigning.
Steg 1 – Trekk fra linjen
\[f(x)-3x=x^3-2bx^2+b^2x.\]
Steg 2 – Faktoriser
\[f(x)-3x=x(x-b)^2.\]
Steg 3 – Kontakt ved x=b
Faktoren \((x-b)^2\) viser at x=b er minst en dobbel rot i differansen.
Steg 4 – Samme punkt
\[f(b)=3b.\] Dermed ligger kontaktpunktet både på grafen og linjen.
Steg 5 – Samme stigning
\[f^\prime(b)=3b^2-4b^2+b^2+3=3.\] Linjen \(y=3x\) har stigning 3.
Steg 6 – Tangeringspunkt
\[(b,3b).\]
Steg 7 – Tilfellet b=0
Da er differansen \(x^3\), og linjen tangerer fortsatt i \((0,0)\).
Den stiplede linjen y=3x er tangent til hvert medlem av familien.
GeoGebra/CAS-kontroll
GeoGebra - CAS
1
Factor[x^3-2b x^2+(b^2+3)x-3x]
\(x(x-b)^2\)
2
Substitute[x=b,Derivative[x^3-2b x^2+(b^2+3)x]]
\(3\)
Tolkning: Dobbelroten x=b og lik derivert 3 dokumenterer tangering.
Python-kontroll med SymPy
Python 3 - faktisk kjøring
importsympyasspx,b=sp.symbols("x b",real=True)f=x**3-2*b*x**2+(b**2+3)*xline=3*xdifference=sp.factor(f-line)f_at_b=sp.simplify(f.subs(x,b))slope_at_b=sp.simplify(sp.diff(f,x).subs(x,b))print("f(x)-3x =",difference)print("f(b) =",f_at_b)print("Line value at x=b =",line.subs(x,b))print("f'(b) =",slope_at_b)print("Line slope = 3")print("Point of tangency = (b, 3*b)")print("Function-value difference =",sp.simplify(f_at_b-3*b))print("Slope difference =",sp.simplify(slope_at_b-3))
Utskrift fra Python:
f(x)-3x = x*(-b + x)**2
f(b) = 3*b
Line value at x=b = 3*b
f'(b) = 3
Line slope = 3
Point of tangency = (b, 3*b)
Function-value difference = 0
Slope difference = 0
Fasit: Grafen tangerer \(y=3x\) i punktet \((b,3b)\) for alle reelle b.
Vanlig feil: Å vise bare at grafen og linjen skjærer hverandre, uten å kontrollere samme stigning.
Sensorpunkt: Både punktlikhet og derivertlikhet/dobbelrot skal dokumenteres.
Kilde og metode: Oppgavetekstene er transkribert fra Utdanningsdirektoratets eksamenssett REA3022 Matematikk R1, høsten 2021. Sidebildene fra original-PDF-en er brukt som autoritativ kilde ved symboler og figurer. Løsningene, figurene og kontrollkodene er originale ifingo-utarbeidelser. Python-utskriftene er generert ved faktisk kjøring av hver kodeblokk under produksjonen.
ifingo-lærerenHjelper deg å forstå
ifingo-læreren hjelper deg å forstå – ikke å gjøre leksene for deg 💜