Kaares kokebok - Programmering i matematikk

Kaares kokebok er en selvinstruerende og lettlest bok for programmering i matematikk i videregående skole. Emner og oppgaver er direkte knyttet til kompetansemålene i matematikk etter fagfornyelsen, der algoritmisk tenkning, utforskning og eksperimentering står sentralt. Boken dekker hele programmeringsløpet i matematikk i videregående skole, fra VG1 (1P, 1T) til VG2 (S1) og VG3 (S2). Unødvendige forklaringer er skrellet bort, slik at elevene kan oppdage sammenhenger og mønstre på egen hånd. Ekstra hensyn er tatt for å innføre hvert nytt konsept i små steg, og for å gi nybegynneren mestringsfølelse så tidlig som mulig. Læreverket passer som et tillegg til tradisjonelle undervisningsressurser i matematikk, der hver elev har hver sin bok. Læreverket kan også brukes som lærerhåndbok eller som understøttelse til lærers etterutdanning.

K AARE E RLEND J ØRGENSEN S TEIN A LEXANDER D AHL

KAARES KOKEBOK PROGRAMMERING I MATEMATIKK

E T KOMPLETT OPPLÆRINGSLØP PÅ VGS

Jørgensen & Dahl Forlag AS

© 1. utgave Jørgensen & Dahl Forlag AS 2023 1. opplag 2023

ISBN 978-82-692219-8-5

Materialet i denne publikasjonen er vernet etter åndsverkloven. Uten uttrykkelig samtykke fra rettighetshaverne er eksemplarfremstilling, som utskrift og annen kopiering, bare tillatt når det er hjemlet i lov eller avtale med Kopinor (www.kopinor.no) .

Utnyttelse i strid med lov eller avtale kan medføre erstatnings- og straffeansvar.

Boka har egen nettside: www.jdforlag.no

Henvendelser om denne utgivelsen kan rettes til: kontakt@jdforlag.no

Omslag og omslagsillustrasjon: Kaare E. Jørgensen & Stein A. Dahl Sats, figurer og formgivning: Kaare E. Jørgensen & Stein A. Dahl Boka er satt med: Computer Modern 10/12, pdflatex/TikZ/tcolorbox Grafisk produksjon: Artko AS Papir: 115g Silk Trykket i Baltikum

Innhold

Innledning

xiii

I Programmering på Vg1

1

1 Skrive til skjerm 3 1.1 NedlastingavThonny ....................... 3 1.2 InstallasjonavThonny ....................... 3 1.3 Skrivut«Hallo,Norge» ...................... 4 1.4 Skriveutetdikt........................... 5 1.5 RegnemedPython ......................... 6 1.6 Potenser............................... 7 1.7 Kvadratrøtter ............................ 8 1.8 Oppsummeringkapittel1. . . . . . . . . . . . . . . . . . . . . . 9 1.9 Oppgaver .............................. 10 2 Variabler 13 2.1 Lagretekstienvariabel ...................... 13 2.2 Lagretallivariabler ........................ 14 2.3 Brukevariableriutregning . . . . . . . . . . . . . . . . . . . . . 15 2.4 FeilsøkingiThonny ........................ 16 2.5 Endreenvariabel.......................... 17 2.6 Endreflerevariabler ........................ 18 2.7 Heltallsdivisjon........................... 19 2.8 Heltallsdivisjonogrest....................... 20 2.9 Oppsummeringkapittel2. . . . . . . . . . . . . . . . . . . . . . 21 2.10 Oppgaver .............................. 22 3 Inndata 27 3.1 Leseinntekst............................ 27 3.2 Leseinntall............................. 28 3.3 Leseinndesimaltall ........................ 30 3.4 Formatertutskrift.......................... 31 3.5 Prosentkalkulator.......................... 32 3.6 Oppsummeringkapittel3. . . . . . . . . . . . . . . . . . . . . . 33 3.7 Oppgaver .............................. 34 4 Vilkår og tilfeldighet 39 4.1 Enkelif-setning........................... 39

v

4.2 Tilfeldigheltall........................... 40 4.3 Vilkårmedifogelse ........................ 41 4.4 If,elifogelse............................ 42 4.5 Vilkårmedor............................ 44 4.6 Boolskevariablerogand...................... 45 4.7 Størsttall .............................. 46 4.8 Tilfeldigdesimaltall ........................ 47 4.9 Egenkapitaloglån ......................... 48 4.10 Oppsummeringkapittel4. . . . . . . . . . . . . . . . . . . . . . 49 4.11 Oppgaver .............................. 50 5 Løkker 55 5.1 Enkelfor-løkke........................... 55 5.2 Tallmønstre med addisjon, metode 1 . . . . . . . . . . . . . . . . 56 5.3 Tallmønstre med addisjon, metode 2 . . . . . . . . . . . . . . . . 57 5.4 Gange-ogdelemønstre....................... 58 5.5 Summeremedløkker........................ 59 5.6 While-løkke:sparing........................ 60 5.7 Figurtall............................... 61 5.8 WhileTrue:prøvigjen ....................... 62 5.9 Oppsummeringkapittel5. . . . . . . . . . . . . . . . . . . . . . 63 5.10 Oppgaver .............................. 64 6 Lister 71 6.1 Elementerienliste......................... 71 6.2 Leggetilogsletteelementer . . . . . . . . . . . . . . . . . . . . 72 6.3 Sumoglengde ........................... 73 6.4 Løpegjennomlistemedløkke . . . . . . . . . . . . . . . . . . . 74 6.5 Løpegjennomflerelister...................... 75 6.6 Algoritmeformedian........................ 76 6.7 Oppsummeringkapittel6. . . . . . . . . . . . . . . . . . . . . . 77 6.8 Oppgaver .............................. 78 7 Funksjoner 89 7.1 Lineærfunksjon .......................... 89 7.2 Funksjonerogløkker........................ 90 7.3 Bestemmenullpunkt ........................ 91 7.4 Eksponentialfunksjon: halveringstid . . . . . . . . . . . . . . . . 92 7.5 Funksjonmedflereparametre . . . . . . . . . . . . . . . . . . . 93 7.6 Størstmuligoverskudd....................... 94 7.7 Gjennomsnittligvekstfart. . . . . . . . . . . . . . . . . . . . . . 95 7.8 Lagenumpy-arrayer ........................ 96 7.9 Tegneengrafmedmatplotlib . . . . . . . . . . . . . . . . . . . 97

vi

Innhold

7.10 Oppsummeringkapittel7. . . . . . . . . . . . . . . . . . . . . . 98 7.11 Oppgaver .............................. 100

II Programmering på Vg2

113

8 Logaritmer og likninger 115 8.1 Utregninger med naturlige logaritmer . . . . . . . . . . . . . . . 115 8.2 Utregninger med tierlogaritmer . . . . . . . . . . . . . . . . . . 116 8.3 Enkellogaritmelikning....................... 117 8.4 Logaritmelikningmedln...................... 118 8.5 Eksponentiallikning ........................ 119 8.6 Halveringsalgoritmen del 1: tallinja . . . . . . . . . . . . . . . . 120 8.7 Halveringsalgoritmendel2. . . . . . . . . . . . . . . . . . . . . 121 8.8 Oppsummeringkapittel8. . . . . . . . . . . . . . . . . . . . . . 124 8.9 Oppgaver .............................. 126 9 Grafiske fremstillinger 133 9.1 Linjediagram ............................ 133 9.2 Linjediagrammedpynt....................... 134 9.3 Stolpediagram ........................... 136 9.4 Grafen til en polynomfunksjon . . . . . . . . . . . . . . . . . . . 138 9.5 Grafene til e x og ln x ........................ 140 9.6 Logaritmiskskala.......................... 141 9.7 Oppsummeringkapittel9. . . . . . . . . . . . . . . . . . . . . . 142 9.8 Oppgaver .............................. 144 10 Grenseverdier og funksjoner 149 10.1 Grenseverdi der x gårmotuendelig ................ 149 10.2 Grenseverdi der x gårmot0 .................... 150 10.3 Grenseverdi der x gårmotettall .................. 152 10.4 Eksponentialfunksjon........................ 153 10.5 Numeriskderivasjon ........................ 154 10.6 Toppunkt .............................. 155 10.7 Ikke-kontinuerlig funksjon . . . . . . . . . . . . . . . . . . . . . 156 10.8 Newtonsmetodedel1 ....................... 158 10.9 Newtonsmetodedel2 ....................... 160 10.10 Oppsummeringkapittel10 . . . . . . . . . . . . . . . . . . . . . 162 10.11Oppgaver .............................. 164 11 Sannsynlighet (S1) 169 11.1 Toliketerningkast ......................... 169 11.2 Simulerefødsler .......................... 170

vii

11.3 Sumavterningkast......................... 172 11.4 Trekkekuler ............................ 173 11.5 Trekkekulerfratoesker . . . . . . . . . . . . . . . . . . . . . . 174 11.6 Trekningtiletstyre......................... 175 11.7 Skiskyting ............................. 176 11.8 Oppslutning og meningsmåling . . . . . . . . . . . . . . . . . . 177 11.9 VinnertalliLotto.......................... 178 11.10 Oppsummeringkapittel11 . . . . . . . . . . . . . . . . . . . . . 179 11.11Oppgaver .............................. 182 12 Reelle data og modellering 193 12.1 Orkaner............................... 193 12.2 Lesedatafrafil........................... 194 12.3 To bedrifter: grafisk fremstilling . . . . . . . . . . . . . . . . . . 195 12.4 Tobedrifter:dataanalyse . . . . . . . . . . . . . . . . . . . . . . 196 12.5 Lineærregresjon .......................... 198 12.6 Polynomregresjon ......................... 199 12.7 Logaritmiskregresjon ....................... 201 12.8 Eksponentiellregresjon. . . . . . . . . . . . . . . . . . . . . . . 203 12.9 Oppsummeringkapittel12 . . . . . . . . . . . . . . . . . . . . . 205 12.10Oppgaver .............................. 208

III Programmering på Vg3

215

13 Tallfølger og rekker 217 13.1 Tallfølger .............................. 217 13.2 Tallfølger med rekursiv formel . . . . . . . . . . . . . . . . . . . 218 13.3 Aritmetisk rekke: rekursivt . . . . . . . . . . . . . . . . . . . . . 219 13.4 Aritmetisk rekke: eksplisitt . . . . . . . . . . . . . . . . . . . . . 220 13.5 Geometrisk rekke: rekursivt . . . . . . . . . . . . . . . . . . . . 221 13.6 Geometrisk rekke: eksplisitt . . . . . . . . . . . . . . . . . . . . 222 13.7 Uendelige geometriske rekker: rekursivt . . . . . . . . . . . . . . 223 13.8 Uendelige geometriske rekker: eksplisitt . . . . . . . . . . . . . . 224 13.9 Oppsummeringkapittel13 . . . . . . . . . . . . . . . . . . . . . 225 13.10Oppgaver .............................. 228 14 Integrasjon 237 14.1 Oppdeltareal ............................ 237 14.2 Trapesogrektangler ........................ 238 14.3 Arealetundergrafen ........................ 240 14.4 Arealetunderenparabel . . . . . . . . . . . . . . . . . . . . . . 242 14.5 Rektangelsumoverln........................ 244

viii

Innhold

14.6 Negativeintegraler ......................... 246 14.7 Arealetmellomtografer . . . . . . . . . . . . . . . . . . . . . . 248 14.8 Oppsummeringkapittel14 . . . . . . . . . . . . . . . . . . . . . 250 14.9 Oppgaver .............................. 252 15 Diskrete sannsynlighetsfordelinger (S2) 263 15.1 Stokastiskvariabel ......................... 263 15.2 Utforske forventningsverdien . . . . . . . . . . . . . . . . . . . 264 15.3 Simulere binomisk sannsynlighet . . . . . . . . . . . . . . . . . 266 15.4 Utforske og beregne variansen . . . . . . . . . . . . . . . . . . . 268 15.5 Sannsynlighetsberegning binomisk . . . . . . . . . . . . . . . . 270 15.6 Simulere hypergeometriske forsøk . . . . . . . . . . . . . . . . . 272 15.7 Hypergeometrisk fordeling . . . . . . . . . . . . . . . . . . . . . 274 15.8 Oppsummeringkapittel15 . . . . . . . . . . . . . . . . . . . . . 276 15.9 Oppgaver .............................. 278 16 Kontinuerlige sannsynlighetsfordelinger (S2) 285 16.1 Kontinuerlig stokastisk variabel . . . . . . . . . . . . . . . . . . 285 16.2 Ventetid............................... 287 16.3 Normalfordelingen: simulering . . . . . . . . . . . . . . . . . . . 289 16.4 Normalfordelingen: grafisk . . . . . . . . . . . . . . . . . . . . . 291 16.5 Standardnormalfordeling: kalkulator . . . . . . . . . . . . . . . . 293 16.6 Sentralgrensesetningen: plott . . . . . . . . . . . . . . . . . . . . 294 16.7 Sentralgrensesetningen: simulering . . . . . . . . . . . . . . . . 296 16.8 Enkel hypotesetest: binomisk . . . . . . . . . . . . . . . . . . . 299 16.9 Hypotesetestpåreelledata . . . . . . . . . . . . . . . . . . . . . 301 16.10Tosidigtest ............................. 303 16.11 Oppsummeringkapittel16 . . . . . . . . . . . . . . . . . . . . . 305 16.12Oppgaver .............................. 308 Tillegg 317 A Referanseprogrammer i R1 319 A.1 Tegne grafen til den omvendte funksjonen . . . . . . . . . . . . . 319 A.2 Undersøkeomtovektorererlike. . . . . . . . . . . . . . . . . . 319 A.3 Lengdenavvektorer ........................ 319 A.4 Vektorsummanuelt......................... 320 A.5 Vektorsummednumpy....................... 320 A.6 Multiplikasjon av vektor med skalar (tuppel) . . . . . . . . . . . 320 A.7 Multiplikasjon av vektor med skalar (liste) . . . . . . . . . . . . 320 A.8 Avgjøreparallellitet ........................ 321 A.9 Skalarprodukt (prikkprodukt) . . . . . . . . . . . . . . . . . . . 321 A.10 Avgjøre ortogonalitet ved skalarprodukt . . . . . . . . . . . . . . 321

ix

A.11 Vinkelen mellom to vektorer med numpy . . . . . . . . . . . . . 322 A.12 Parameterfremstilling gitt to punkter . . . . . . . . . . . . . . . . 322 A.13 Parameterfremstilling av kurve grafisk . . . . . . . . . . . . . . . 323 B Referanseprogrammer i R2 325 B.1 Konvertere fra grader til radianer . . . . . . . . . . . . . . . . . . 325 B.2 Konvertere fra radianer til grader . . . . . . . . . . . . . . . . . . 325 B.3 Vinkeliførsteomløp(grader) . . . . . . . . . . . . . . . . . . . 325 B.4 Vinkel i første omløp (radianer) . . . . . . . . . . . . . . . . . . 326 B.5 Numerisk integrasjon med trigonometrisk funksjon . . . . . . . . 326 B.6 Numerisk integrasjon: omdreiningslegeme . . . . . . . . . . . . 327 B.7 Punktinnikule ........................... 327 B.8 Skalarprodukt (prikkprodukt) i 3D . . . . . . . . . . . . . . . . . 328 B.9 Vektorprodukt (kryssprodukt) i 3D . . . . . . . . . . . . . . . . . 328 B.10 Lengdenavenvektor........................ 328 B.11 Volumprodukt ........................... 329 B.12 Avstandfrapunkttilplan. . . . . . . . . . . . . . . . . . . . . . 329 B.13 Tegneretningsdiagram....................... 330 B.14 Tegne omdreiningslegeme i 3D . . . . . . . . . . . . . . . . . . 331 C Installering av Python-biblioteker 333 C.1 Generell framgangsmåte i terminal . . . . . . . . . . . . . . . . . 333 C.2 Installere bibliotek gjennom Thonny . . . . . . . . . . . . . . . . 333 D Nettressurser 335 D.1 HovedsidenpåGitHub....................... 335 D.2 Finneløsninger........................... 335 D.3 Finnecsv-filer ........................... 335 D.4 Kartlegging............................. 336 D.5 Ekstrastoff ............................. 336 D.6 Diskusjonsforumet ......................... 336 D.6.1 Velgoglesediskusjoner. . . . . . . . . . . . . . . . . . . 336 D.6.2 Opprettediskusjon ..................... 336 D.6.3 Formatering i diskusjoner . . . . . . . . . . . . . . . . . . 338 D.7 Meldefeiliboka .......................... 338 D.8 Feilellerforbedringikode . . . . . . . . . . . . . . . . . . . . . 339 E Til Læreren 341 E.1 Innhold ............................... 341 E.2 Implementere programmering i undervisningen . . . . . . . . . . 341 E.3 KortomPython........................... 341 E.4 Fremdriftsplaner .......................... 342 E.4.1 FremdriftsplanVg1..................... 342

x

Innhold

E.4.2 FremdriftsplanVg2..................... 342 E.4.3 FremdriftsplanVg3..................... 342 E.5 Nivådifferensiering......................... 343 E.6 Oppgavetyper: oversikt og analyse . . . . . . . . . . . . . . . . . 343 E.6.1 Kode-rekkefølge....................... 343 E.6.2 Kodemedfeil........................ 344 E.6.3 Kodepuslespill........................ 344 E.6.4 Algoritmepånorsk ..................... 344 E.6.5 Skjelettkode......................... 345 E.6.6 Tekst............................. 345 E.7 Utvikling av programmeringskunnskap i fem faser . . . . . . . . 346 E.8 Opplæringens struktur: PRIMM . . . . . . . . . . . . . . . . . . 347 E.9 PRIMM-analyse: et konkret eksempel . . . . . . . . . . . . . . . 348 Figurer 349 Tabeller 354 Python 355 Stikkordsregister 357 Bibliografi 368

xi

DELI Programmering på Vg1

KAPITTEL 1 Skrive til skjerm

1.1 Nedlasting av Thonny

Figur 1.1: Nedlastingsvalg på nettsiden thonny.org.

Åpne nettsiden  thonny.org. Du vil se nedlastingsalternativene øverst på nettsiden, som illustrert i figur 1.1. Velg versjonen som er kompatibel med ditt operativsystem (Windows, Mac eller Linux), og vent på at nedlastingen fullføres. 1.2 Installasjon av Thonny

Figur 1.2: Installasjonen er ferdig.

Åpne den nedlastede installasjonsfilen. Følg veiviseren ved å klikke på Next flere ganger. Klikk deretter på Install for å igangsette installasjonen. Klikk på Finish etter at installasjonen er fullført. Se figur 1.2. 3

1.3 Skriv ut «Hallo, Norge»

(0103_hallo.py)

Du skal nå få datamaskinen til å skrive ut teksten Hallo, Norge til skjermen.

a) Åpne programmet Thonny. b) Skriv koden print("Hallo, Norge") i den øvre delen av Thonny. Se figur 1.3.

Skriv koden her

Resultatet av koden

Figur 1.3: Første program i Thonny.

Det er vanlig å gjøre feil når man programmerer. La oss se på noen typiske feil:

print"Hallo, Norge")

pritn("Hallo, Norge")

print(Hallo, Norge)

q

print("Hallo, Norge ' )

Print("Hallo, Norge")

print("Hallo, Norge)

Insektet symboliserer at det er feil («bugs») i koden. c) Bestem feilen i hver av kodelinjene ovenfor. d) Rett eventuelle feil i koden din. e) Fra menyen velg File Save as... , og lagre som « 0103_hallo.py». f) Klikk på for å kjøre programmet. Nå bør teksten Hallo, Norge vises i den delen av Thonny som kalles Shell. Se figur 1.3. Gratulerer! Du har nå laget bokas første Python-program. ò Boka legger opp til bruk av Thonny som Python-editor, men du står selvsagt fritt til å velge andre programmer som for eksempel «Visual Studio Code» eller «Spyder».

4

1. Skrive til skjerm

1.4 Skrive ut et dikt

(0104_dikt.py)

print("Likevel rommer det")

1

print("")

2

print("hele evigheten.")

3

Python-kommandoen print skriver ut tekst eller verdier til skjermen. a) Les koden ovenfor, og gjett på resultatet. b) Lag en ny fil ved å klikke på @ , eller velg File New fra menyen.

c) Skriv av koden, lagre som « 0104_dikt.py» og klikk på for å kjøre program- met. d) La kodelinjene 1 og 2 bytte plass. Gjett på resultatet, før du kjører programmet.

e) Legg til kodelinja print("Nå.") nederst i koden. f) Legg til kodelinja print("Et meget lite ord") .

Nå.

Et meget lite ord. Nå. Likevel rommer det hele evigheten.

g) Skriv ferdig koden slik at resultatet blir som vist ovenfor. 1

Figur 1.4: Hans Børlis poetiske verden: Hytte i skogen.

1 Dikt av Hans Børli.[1]

5

1.5 Regne med Python

(0105_regne.py)

print(3 + 4) print("3 + 4")

1

2

Python kan utføre regneoperasjoner for deg. a) Les koden ovenfor, og gjett på resultatet.

b) Lag en ny fil ved å klikke på @ , eller velg File New fra menyen. c) Skriv av koden, lagre som « 0105_regne.py» og kjør programmet. d) Legg til kodelinja print(12 - 4*2) . e) Legg til kodelinja print("12 - 4*2") . Gjett på resultatet, før du kjører pro- grammet. f) Legg til den riktige kodelinja som regner ut 100 − 25 ÷ 3, og skriver svaret til skjermen: 100 - 25/3 print(100 - 25/3) print("100 - 25/3") g) Les koden nedenfor, og gjett på resultatet.

print("(10-3/6) * 2 =") print((10-3/6) * 2)

h) Legg til kodelinjene ovenfor, og kjør programmet. i) Legg til kode som regner ut og skriver ut svaret på regnestykkene 2 · 5 − 10 og ( 20 − 3 ÷ 12 ) · ( 2 + 4 · 21 ) . Resultatet av dette skal være slik: 2*5 - 10 = 0 (20 - 3/12) * (2 + 4*21) = 1698.5

Figur 1.5: Snart snakker du pythonsk.

6

1. Skrive til skjerm

1.6 Potenser

(0106_potenser.py)

print(2*3) print(2**3) print(2*4) print(2**4)

1

2

3

4

4 z }| { 2 · 2 · 2 · 2 = 16, skrives i Python som 2**4 .

En potens, som for eksempel 2 4 =

a) Les koden ovenfor, og gjett på resultatet. b) Lag en ny fil ved å klikke på @ , eller velg File New fra menyen. c) Skriv av koden, lagre som « 0106_potenser.py» og kjør programmet. d) Endre kodelinje 2 til print(2**3*2) . Gjett på resultatet, før du kjører program- met. e) Legg til en kodelinje for å regne ut 10 3 . Kontroller at svaret blir 1000. f) Endre kodelinje 4 til print("2**4 =", 2**4) . g) Legg til kodelinja nedenfor som gir resultatet 3**4 = 81 . print("3**4 =", 3**4) print(3**4) print("3*4 =", 3**4) print("3**4=," 3**4) h) Utvid programmet slik at det regner ut 4 5 − 3 6 og resultatet presenteres slik: 4**5 - 3**6 = 295

Figur 1.6: Å regne på gamlemåten.

7

1.7 Kvadratrøtter

(0107_rotter.py)

import math

1

print(math.sqrt(4))

2

print(math.sqrt(25)) Koden math.sqrt(25) regner ut kvadratroten til 25, det vil si √ 25 = 5. a) Les koden ovenfor, og gjett på resultatet. b) Lag en ny fil ved å klikke på @ , eller velg File New fra menyen. c) Skriv av koden, lagre som « 0107_rotter.py» og kjør programmet. d) Endre på kodelinje 3 for å regne ut √ 36. e) Legg til den korrekte av kodelinjene nedenfor som regner ut √ 125

3

− 25 · 2.

print(math.sqrt(125-25)**2)

print(math.sqrt(125-25)*2)

print(math.Sqrt(125-25)*2)

print(math:sqrt(125-25)*2)

Resultatet av kodelinja skal bli 20.0 . I matematikken på VGS lærer du at det ikke er mulig å ta kvadratroten til et negativt tall. For eksempel finnes ikke tallet √ − 5. f) Legg til kode for å regne ut √ − 5. Undersøk hva slags feilmelding du får. Endre deretter tallet − 5 til 5, for å unngå feilmeldingen. g) Legg til kodelinja nedenfor. Gjett på resultatet, før du kjører programmet.

print("Kvadratroten til 144 er", math.sqrt(144))

h) Fullfør programmet slik at det regner ut stykkene nedenfor, og skriver svarene på skjermen. Resultatet skal være som vist til høyre. √ 1234 · 5 (i) √ 6 2 + 8 2 2 (ii) 78.54934754662193 5.0 ò For å få større knapper i Thonny, velg Tools Options... General UI scaling factor imenyen. Sett «UI scaling factor» til for eksempel 2,5, og start Thonny på nytt.

8

1. Skrive til skjerm

1.8 Oppsummering kapittel 1 I dette kapitlet lærte du å bruke print -kommandoen til å skrive ut tekst og utføre regneoperasjoner.

Utskrift av tekst print("Hei") print("") print("på deg.")

Hei

på deg.

Regneoperasjoner print("5*3 + 4") print(5*3 + 4) print(3**2 - 10/2) print("3/4 = ", 3/4)

5*3 + 4 19 4.0 3/4 = 0.75

Kvadratrot

import math print(math.sqrt(9)) print("Kvadratroten til 120 er", math.sqrt(120)) 3.0 Kvadratroten til 120 er 10.954451150103322

Feilsøking

Print(5+3*4)

NameError: name ' Print ' is not defined

Python gjenkjenner ikke Print som en gyldig kommando fordi den er skrevet med stor P. Perfeksjon For at et Python-program skal kjøre som normalt, må det være helt feilfritt!

9

1.9 Oppgaver Oppgave 1.1A

(opg_0101A.py)

Print("Mount Everest") print(er verdens høyeste) print"fjell.")

q

Skriv av koden, og rett opp feilene slik at programmet kjører uten feilmelding.

Oppgave 1.2A

(opg_0102A.py)

print("Elon Musk") ... ...

Elon Musk er rik.

Skriv ferdig koden slik at den produserer det angitte resultatet.

Oppgave 1.3A

(opg_0103A.py)

7.0 12

print(3*4)

print(100-99-1)

4 0

print(42/7 + 1)

print(7*4-6*4)

Sett sammen kodelinjene i riktig rekkefølge slik at resultatet av programmet blir som vist ovenfor. Oppgave 1.4A (opg_0104A.py) Lag et program som regner ut stykkene nedenfor, og skriver ut svarene. 10 · 3 − 7 (i) ( 20 − 8 ÷ 2 ) · 2 (ii) 3 5 + 2 10 (iii) 10 46 − 7 2 (iv) Oppgave 1.5A (opg_0105A.py)

123 · 234 321 · 432

Lag et program som regner ut

. Resultatet skal vises som følger:

(123*234) / (321*432) = ...

10

1. Skrive til skjerm

Oppgave 1.6B

(opg_0106B.py)

Lag et program som regner ut √ 3 2 + 4 2 og q 1 2  − 8 . Oppgave 1.7B

(opg_0107B.py) I matematikk tar vi også i bruk tredjerot, fjerderot og så videre, i tillegg til kvadratrot. Følgende sammenhenger gjelder: √ 16 = 16 1 / 2 = 4 3 √ 27 = 27 1 / 3 = 3 4 √ 16 = 16 1 / 4 = 2 Bruk dette til å lage et program som regner ut følgende, uten bruk av math.sqrt : √ 16 (i) 4 √ 16 (ii) 3 √ 1337 (iii) 5 √ − 1024 (iv) Oppgave 1.8B (opg_0108B.py)

1 print(f"2*5 = { 2*5 } og 2**5 = { 2**5 } ") 2 ... 3 ...

2*5 = 10 og 2**5 = 32 10/5 = 2.0 og 10-5 = 2 10**5-9**5 = 40951

Bruk av print(f"...") lar oss kombinere tekst med utregning av matematiske ut- trykk. Uttrykket vi ønsker å regne ut plasseres inni {...} . Skriv ferdig koden ovenfor slik at du får resultatet til høyre. Bruk tilsvarende format som på den første kodelinja. Oppgave 1.9B (opg_0109B.py)

1 print(f"Tallet er 123.4726") 2 print(f"1 desimal { 123.4726 : .1f } ") 3 print(f"3 desimaler { 123.4726 : .3f } ")

Tallet er 123.4726 1 desimal: 123.5 3 desimaler: 123.473

Koden ovenfor viser hvordan vi kan runde av desimaltall. En skulptur er kjøpt for 5000 kr , og verdien øker med 8 % årlig. Etter x år vil verdien være 5000 · 1,08 x . Lag et program som regner ut verdien hvert år de tre første årene. Presenter resultatet med 2 desimaler slik:

Etter 1 år: ... kr Etter 2 år: ... kr Etter 3 år: 6298.56 kr

11

Oppgave 1.10B (opg_0110B.py) En rettvinklet trekant har sider a = 4, b = 8 og c er den lengste siden (hypotenus). Ifølge Pytagoras’ setning er a 2 + b 2 = c 2 . Figur 1.7 viser formelen for c . [ 1T

b =3

a =8

Figur 1.7: Rettvinklet trekant. Ukjent c.

Lag et program som regner ut og skriver ut c med 3 desimaler. Se oppgave 1.9 for hvordan du runder av til 3 desimaler i utskriften. Oppgave 1.11B [ 1T (opg_0111B.py)

import math print(math.pi)

1

2

Volumet av en kule med radius r er gitt ved

V = 4 π r 3 3 Ta utgangspunkt i koden ovenfor, og bruk math.pi til å beregne volumet av en kule med radius 2,84 m . Avrund svaret til 3 desimaler. Resultatet skal være: Volumet av en kule med radius 2,84 m: 95.950 kubikkmeter ? Du kan bruke Unicode for å produsere mer estetisk tiltalende utskrift i Python. For å skrive ut 3 2 , må du skrive print(u"3 \u00b2 ") , der \u00b2 er unicode-tallet for 2 . Merk at print -kommandoen må begynne slik: print(u"...") . Finn flere unicode- tall på nettsiden  https://unicode-table.com/en/sets/superscript-and-subscript-letters/, og lag et program som skriver ut følgende: Oppgave 1.12S (opg_0112S.py)

10 4 + 5 2 + 6 − 9

12

KAPITTEL 2 Variabler

2.1 Lagre tekst i en variabel

(0201_tekst.py)

hobby = "piano"

1

2 print("Min hobby er", hobby)

Variabler lar oss lagre tall eller tekst til senere bruk. a) Les koden ovenfor, og gjett på resultatet. Nedenfor ser du tre typiske feil, sammen med den korrekte koden.

hobby = "piano" print("Min hobby er", hobby)

hobby = "piano" print("Min hobby er," hobby)

q

hobby = "piano" print("Min hobby er", Hobby)

hobby = piano print("Min hobby er", hobby)

b) Forsøk å finne feilen i hvert enkelt tilfelle. c) Skriv av koden, lagre som « 0201_tekst.py» og kjør programmet. d) Utvid koden som vist nedenfor. Gjett på resultatet, før du kjører programmet.

hobby = "piano" hobby = "fotball" hobby = "tennis"

1

2

3

4 print("Min hobby er", hobby)

e) Legg til to kodelinjer med print("Min hobby er", hobby) på riktig plass i ko- den, slik at resultatet blir som vist nedenfor. Min hobby er piano

Min hobby er fotball Min hobby er tennis

13

2.2 Lagre tall i variabler

(0202_tall.py)

timelonn = 140

1

2 print("Timelønna er", timelonn)

Usman jobber som ekstrahjelp på et bilverksted. Han får 140 kr i timelønn. Kodelinja timelonn = 140 gjør at programmet lagrer verdien 140 i variabelen timelonn . a) Les koden ovenfor, og gjett på resultatet.

b) Lag en ny fil ved å klikke på @ , eller velg File New fra menyen. c) Skriv av koden, lagre som « 0202_tall.py» og kjør programmet. d) Endre på kodelinje 1 slik at resultatet av programmet blir: Timelønna er 210

En uke jobbet Usman 12 timer. e) Legg til de to nye kodelinjene for å vise fram antall timer.

timelonn = 210

1

2 print("Timelønna er", timelonn) 3 timer = 12 4 print("Antall timer:", timer)

f) Legg til kodelinja ukelonn = 210*12 . I stedet for å skrive 210*12 , kan vi bruke variabelnavnene timelonn * timer . g) Endre kodelinja ukelonn = 210*12 til ukelonn = timelonn * timer . h) Legg til en kodelinje for å skrive ut følgende: Ukelønna er 2520 Vi antar at Usman jobber 30 uker i året, og 12 timer per uke. i) Legg til følgende kodelinjer i riktig rekkefølge: print("Årslønna er", aarslonn, "kr.") uker = 30 aarslonn = uker * ukelonn j) Utforsk, ved å endre på timer = 12 , antall hele timer Usman må jobbe ukentlig for at årslønna skal bli minst 100 000 kr .

14

2. Variabler

2.3 Bruke variabler i utregning

(0203_fart.py)

km = 3.8

1

print(f"Du løp { km } km.")

2

Kateryna er en ivrig løper. Hun vil lage et program hvor hun kan registrere distanse i kilometer og tid i timer, og få beregnet gjennomsnittsfarten i km/t og m/s. a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 0203_fart.py» og kjør programmet. I koden print(f"Du løp { km } km.") , betyr {km} at vi setter inn verdien av variabelen km på det stedet i strengen (teksten). c) Undersøk hva som skjer dersom du fjerner f-en slik: print("Du løp {km} km.") . d) Angre endringen og endre tilbake til kodelinje 2 slik det står øverst på siden. e) Legg til følgende kodelinjer i riktig rekkefølge for å regne ut gjennomsnitts-

farten i km/t. tid_min = 24

print(f"Farten var { fart_kmt } km/t.")

tid_timer = tid_min / 60 fart_kmt = km / tid_timer f) Legg til kode for å regne ut farten i m/s og lagre verdien i variabelen fart_mps . Bruk at 1 m / s er 3,6 km / h . g) Skriv ut farten i m/s på samme måte som vi skrev ut farten i km/t.

Figur 2.1: Kateryna på joggetur i fjellet.

15

Oppgave 3.7B

(opg_0307B.py) Jagerfly bruker ofte Mach som fartsenhet. Lydens hastighet er 1 Mach, som ved hav- nivå tilsvarer 1230 km / t . Lag et program der brukeren kan skrive inn farten i km/t og få oppgitt farten i Mach.

Figur 3.7: Jagerfly.

Oppgave 3.8B

(opg_0308B.py) Lag et program som beregner rabatten i kroner og den nye prisen på en vare. Brukeren skal oppgi ordinær pris, og rabatt i prosent. Kjøringen av programmet skal være på formen: Oppgi pris: 499

Oppgi prosent rabatt: 70 Du får 349.30 kr i rabatt Den nye prisen er 149.70 kr

Oppgave 3.9B

(opg_0309B.py)

innskudd = ...

1

2 rente = float(input("Oppgi årlig rente: ")) 3 vekstfaktor = 1 + rente/100

Lag et program som regner ut hvor mye et innskudd på en sparekonto vokser til i løpet av 10 år. Brukeren skal kunne oppgi innskudd i kroner og årlig rente. Du kan ta utgangspunkt i koden ovenfor og legge til kode for å beregne innskuddet etter 10 år. m Dersom innskuddet er 15000 kr og den årlige renta er 2,3% , så er verdien etter 10 år gitt ved uttrykket 15000 · 1,023 10 . 36

3. Inndata

Oppgave 3.10B (opg_0310B.py) Formelen for svingetiden T til en pendel, når vi ser bort fra friksjon og luftmotstand, er gitt ved T = 2 π · s L g L er snorlengden i meter, og g er tyngdens akselerasjon. På Jorden er g = 9,81 m / s 2 . Skriv et program der brukeren kan oppgi snorlengden, og få vite svingetiden. Oppgave 3.11B (opg_0311B.py) Lag et program som regner ut den lengste siden i en rettvinklet trekant. Brukeren skal oppgi lengdene av de to korte sidene. Svaret skal rundes av til én desimal. La a og b være lengden av de to korte sidene. Da kan du regne ut den lengste siden c ved formelen c = p a 2 + b 2 Oppgave 3.12B (opg_0312B.py) Yatzy-klubben på Yannestad vgs skal avholde en Yatzy-kveld. Ved hvert spillebord må det være 5 terninger for at de skal kunne spille Yatzy. Lag et program der brukeren skriver inn antall terninger, og får vite hvor mange spillebord de kan sette opp og hvor mange terninger de har til overs. m Bruk heltallsoperatoren // og modulo-operatoren % . Oppgave 3.13B [ 1T (opg_0313B.py) Tverrsummen av 531 er 5 + 3 + 1 = 9. Lag et program som lar brukeren angi et tresifret tall og deretter beregner tverrsummen av dette. Tresifrede tall er tall fra og med 100 til og med 999. Ta utgangspunkt i koden nedenfor. Til høyre ser du en kjøring av programmet der brukeren taster inn 583.

tall = int(input("...")) siffer1 = tall // 100

1

Oppgi et tresifret tall: 583 5 + 8 + 3 = 16

2

siffer2 = tall ...

3

...

4

m Benytt deg av heltallsoperatoren // og modulo-operatoren % for å hente ut sifrene.

37

4.4 If, elif og else

(0404_situps.py)

Antall situps Fysisk form (16–25 år) Flere enn 49 Utmerket 44–49 Bra 39–43 Over gjennomsnittet

Tabell 4.1: Situps på 1 minutt.

Vi skal lage et program hvor brukeren kan taste inn antall situps han klarer på 1 minutt, og deretter få en tilbakemelding på sin fysiske form. a) Les koden nedenfor, og gjett på resultatet.

situps = 51

1

if situps > 49:

2

print("Utmerket")

3

b) Skriv av koden, lagre som « 0404_situps.py» og kjør programmet. c) Legg til en ny if -setning for å undersøke om antall situps er minst 44:

if situps > 49:

print("Utmerket")

if situps > 44: print("Bra")

Kjør feilsøking. d) Endre if situps > 44: til elif situps > 44: . Kjør feilsøking for å undersøke forskjellen på if og elif («elif» er kortform av «else if»). e) Legg til den nye koden nedenfor:

elif situps > 44: print("Bra") else :

print("Over gjennomsnittet")

f) Endre antall situps til 44 ved å endre kodelinje 1. Gjett på hva som blir resulta- tet, før du kjører programmet.

42

4. Vilkår og tilfeldighet

Les inn sit-ups

Start

ja

Skriv ut «Utmerket»

sit-ups > 49 ?

nei

ja

Skriv ut «Bra»

sit-ups >= 44 ?

Skriv ut «Over gjennomsnittet»

Slutt

nei

Figur 4.2: Flytdiagram: situps.

g) Endre elif situps > 44: til elif situps >= 44: . Kjør programmet på nytt. h) Endre kodelinje 1 slik at antall situps leses inn fra brukeren hver gang program- met kjører. m Se side 28 dersom du har glemt hvordan du leser inn heltall fra brukeren. Programmet du har laget så langt, kan tegnes som flytdiagrammet i figur 4.2. i) Undersøk hvilke tall som nå gir resultatet Over gjennomsnittet . Prøv tallene i intervallet 39-43, men også tall under 39 og tall over 43. j) Endre else : til elif situps >= 39: . Kjør programmet på nytt, og identifiser forskjellen. k) Legg til kode slik at situps i intervallet 31-38, gir resultatet Gjennomsnittlig , og slik at situps i intervallet 25-30 gir resultatet Under gjennomsnittet . l) Fullfør programmet slik at situps under 25, gir resultatet Veldig svakt . m) Test programmet med forskjellige input-verdier, slik at du ser alle de forskjel- lige utskriftene.

43

4.9 Egenkapital og lån

(0409_bank.py)

pris = 2_700_000

1

2 ek_prosent = 0.15 # ek = egenkapital 3 ek_minimum = pris * ek_prosent

4 5 print(f"Boligen koster { pris } kr.") 6 ek = int(input("Oppgi din egenkapital i kr: "))

En leilighet selges for 2,7 millioner kroner. Bernts Bank tilbyr boliglån med krav om at låntakeren stiller med egenkapital på 15 % av leilighetens verdi. Vi skal lage et program som undersøker om en kunde tilfredsstiller kravene for å få lån. a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 0409_bank.py» og kjør programmet. ò Kodelinja pris = 2_700_000 gir nøyaktig samme resultat som pris = 2700000 , men først- nevnte måte gjør store tall lettere å lese. c) Legg til en if -setning for å undersøke om brukeren har nok egenkapital:

ek = int(input("Oppgi din egenkapital i kr: ")) if ek >= ek_minimum: print("Du kan få lån")

Bernts Bank endrer reglene for å få lån. I tillegg til egenkapitalen på 15 %, må lånebe- løpet være mindre enn 4 ganger årlig inntekt for å sikre at låntakeren har økonomisk evne til å betjene lånet. d) Legg til følgende kodelinjer på korrekt måte slik at programmet benytter de endrede reglene: inntekt = int(input("Oppgi årsinntekt: ")) else : if ek >= ek_minimum and lan < 4*inntekt: lan = pris - ek print("Du får ikke lån") print("Lån:", lan) e) Endre koden som vist nedenfor, og fullfør den for å undersøke om det mangler egenkapital. Skriv ut hvor mye det mangler slik.

else:

print("Du får ikke lån") if ek < ek_minimum: ek_mangel = ... ...

48

4. Vilkår og tilfeldighet

4.10 Oppsummering kapittel 4 I dette kapitlet har du lært å bruke vilkår til å styre kodeflyten. Du har også lært å bruke random-biblioteket til å generere tilfeldige tall.

Tilfeldige tall import random

heltall = random.randint(1, 6) desimaltall = random.uniform(0, 9) print(f" { heltall = } ") print(f" { desimaltall = } ")

heltall = 5 desimaltall = 7.73284...

Både randint - og uniform -kommandoene inkluderer begge endepunktene. Sann- synligheten for at uniform faktisk gir ett endepunkt, er dog svært lav.

Vilkår med if, elif og else import random

a = random.randint(2, 7) b = random.randint(2, 7) print(f"a = { a } og b = { b } ") if a > b: print("a er størst") elif a < b: print("b er størst") else : print("a og b er like")

a = 6 og b = 3 a er størst

I stedet for else : , kunne vi her skrevet elif a == b: . Ofte er sistnevnte å fore- trekke, fordi det gjør hensikten med koden lettere å forstå.

Logiske operatorer and og or a = 10 b = 15 if a > 0 and b == 15: print("Her") if a > 0 and b % 2 == 0: print("kommer") if a > 0 or b % 2 == 0: print("jeg")

Her jeg

Ved bruk av and må begge uttrykk være True for at det hele blir True . Ved bruk av or er det tilstrekkelig at minst ett av uttrykkene er True .

49

KAPITTEL 7 Funksjoner

7.1 Lineær funksjon

(0701_linfunk.py)

def g(x):

1

return 3*x - 4

2

3 4

print(g(3))

La funksjonen f være gitt ved g ( x )= 3 x − 4. I Python bruker vi nøkkelordet def for å fortelle programmet at vi nå begynner å definere en funksjon. a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 0701_linfunk.py» og kjør programmet. c) Legg til kodelinja print(g(1)) . Gjett på resultatet, før du kjører programmet. d) Endre nå begge print -kommandoene som vist nedenfor, og observer resulta- tene.

def g(x):

1

return 3*x - 4

2

3 4

print(f" { g(3) = } ") print(f" { g(1) = } ")

5

Kodelinja print(f" { g(1) = } ") forstår Python som at du ønsker å regne ut g ( 1 ) ogat svaret skal presenteres på formen g(1) = -1 .

e) Endre på kodelinje 2 slik at funksjonen blir

g ( x )= 5 − 2 x f) Fullfør programmet slik at brukeren kan gjette på konstantleddet til g , og fåvite om det er riktig eller feil. Bruk blant annet disse kodelinjene: gjett = int(input("Hva er konstantleddet? ")) konst = g(0) else : if gjett == konst:

89

7.2 Funksjoner og løkker

(0702_andregrad.py)

def h(x):

1

return x**2 - 4*x

2

3 4

print("h(x) = x^2 - 4*x") print(f" { h(3) = } ")

5

Vi kan bruke en løkke til å skrive ut mange funksjonsverdier. a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 0702_andregrad.py» og kjør programmet. c) Legg til kodelinja print(f" { h(0) = } ") . d) Legg til følgende kode:

print("x, h(x)") print("-------") for i in range(1, 8): print(h(i))

e) Endre print(h(i)) til print(f" { i } , { h(i) } ") . f) Endre tallene i range(1, 8) slik at resultatet av løkka blir som vist nedenfor.

x, h(x) ------- -2, 12 -1, 5 0, 0

1, -3 2, -4 3, -3 4, 0 5, 5

ò Tabellen ser rotete ut. I oppgave 7.19 på side 106 lærer du å bruke biblioteket tabulate for å produsere ryddige tabeller. g) Bruk følgende kodelinjer til å summere alle funksjonsverdiene i utskriften ovenfor ( 12 + 5 + 0 + ··· + 0 + 5 ) . summ = 0 print(f" { summ = } ") summ += h(i)

90

DELII Programmering på Vg2

KAPITTEL 8 Logaritmer og likninger

8.1 Utregninger med naturlige logaritmer

(0801_natlog.py)

import numpy

1

2 3

e = numpy.e # Eulers tall

4 ln = numpy.log # Naturlig logaritme 5 print(e) 6 print(ln(e))

Vi skal benytte oss av biblioteket numpy til å utføre beregninger med logaritmer. a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 0801_natlog.py» og kjør programmet. ò Dersom du får en feilmelding ved kjøring av programmet, er det mulig at numpy ikke er instal- lert. Se side 333 for en gjennomgang av installeringen. c) Legg til kodelinja print(ln(e**3)) for å regne ut ln e 3 . For å vise både uttrykket og svaret, kan vi bruke formen print(f" { ... = } ") . d) Endre kodelinje 5-7 slik:

ln = numpy.log print(f" { e = } ") print(f" { ln(e) = } ") print(f" { ln(e**3) = } ")

e) Legg til en kodelinje for å regne ut ln e 6 . f) Legg til kodelinja print(ln(e**(-2))) for å regne ut ln e − 2 . g) Legg til en kodelinje for å regne ut ln e − 9 . Kodelinja print(ln(15+3**5)-e**2) regner ut ln ( 15 + 3 5 ) − e 2 . h) Legg til kode som regner ut 2 3 − ln ( e 4 + 50 ) .

115

11.2 Simulere fødsler

(1102_fodsler.py)

1 from numpy.random import choice

2 3

kjonn = ["gutt", "jente"] barn = choice(kjonn)

4

print(barn)

5

Vi kan hente ut en tilfeldig verdi fra en liste ved å bruke numpy.random.choice - funksjonen. Alle verdiene er da like sannsynlige (uniform sannsynlighet). ò Biblioteket numpy må være installert for at koden skal fungere. Se side 333 for fremgangsmåte. a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 1102_fodsler.py» og kjør programmet. c) Endre choice -kommandoen til choice(kjonn, size=5) for å lage 5 barn. d) Legg til kodelinja print(barn == "jente") . Gjett på resultatet, før du kjører programmet. e) Legg til kodelinja jenter = sum(barn == "jente") . Skriv også ut verdien. 1

Figur 11.1: Barn leker i gresset uten iPad.

1 Når du bruker sum -funksjonen, behandles True som 1 og False som 0. For eksempel gir sum([True, False, True]) verdien2. 170

11. Sannsynlighet (S1)

Anta nå at vi velger ut 600 tilfeldige fembarnsfamilier. Vi ønsker å telle opp antall slike familier som har minst 4 jenter. f) Legg til en for -løkke for å generere en tilfeldig fembarnsfamilie i hver itera- sjon, som vist nedenfor.

antall_forsok = 600 for i in range(antall_forsok): barn = choice(kjonn, size=5)

g) Tell antall jenter ved å legge til kodelinja jenter = sum(barn == "jente") . Vi ønsker nå å telle opp frekvensen til hendelsen «minst 4 jenter». h) Implementer variabelen frekvens slik:

antall_forsok = 600 frekvens = 0 for i in range(antall_forsok):

barn = choice(kjonn, size=5) jenter = sum(barn == "jente") if jenter >= 4: frekvens += 1

i) Legg til kode for å skrive ut frekvensen under for -løkka. j) Beregn og skriv ut relativ frekvens for hendelsen «minst 4 jenter».

frekvens antall_forsøk .

m Regn ut relativ frekvens slik:

De virkelige sannsynlighetene er P ( Jente )= 0,486 og P ( Gutt )= 0,514. k) Implementer de virkelige sannsynligheten for gutt og jente i koden slik:

frekvens = 0 sanns = [0.514, 0.486] for i in range(antall_forsok):

barn = choice(kjonn, size=5, p=sanns)

l) Bestem sannsynligheten for «minst 4 jenter». Øk antall forsøk til 6000 og vur- der hvordan dette påvirker resultatet.

171

KAPITTEL 12 Reelle data og modellering

12.1 Orkaner

(1201_orkaner.py)

import numpy as np

1

2 3 aar = np.arange(2005, 2016) # [2005, 2006, ..., 2015] 4 orkaner = [6, 4, 7, 4, 2, 8, 5, 2, 5, 2, 5] 5 print(len(orkaner)) 6 print(f"I { aar[1] } var det { orkaner[1] } orkaner.")

Landsbyen Neybsdnal har registrert antall orkaner i september i perioden 2005-2015. Vi skal lage en algoritme for å bestemme hvilket år det var flest orkaner. a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 1201_orkaner.py» og kjør programmet. c) Legg til kodelinja print(f"I { aar[9] } var det { orkaner[9] } orkaner.") d) Legg til følgende kodelinjer for å skrive ut orkaner: for i in range(len(orkaner)): print(orkaner[i]) e) Endre print -kommandoen inni for -løkka til print(f"I { aar[i] } var det { orkaner[i] } orkaner.") f) Plasser følgende kodelinjer på riktig plass slik at det høyeste antallet orkaner i september blir lagret i variabelen maks . maks_orkaner= orkaner[i] if orkaner[i] > maks_orkaner: maks_orkaner= orkaner[0] g) Plasser kodelinjene maks_aar = aar[0] og maks_aar = aar[i] på rett plass slik at året det forekom flest orkaner på blir lagret i variabelen maks_aar . h) Legg til kode som lager en utskrift på formen:

Det var flest orkaner i xxxx. Dette året var det x orkaner.

193

12.2 Lese data fra fil

(1202_lesefil.py)

kjoreturer.txt timer,km 3,120 2,65 1.5,82 ...

import pandas as pd

1

2 3

filnavn = "kjoreturer.txt" data = pd.read_csv(filnavn)

4

print(data)

5

Vi bruker biblioteket pandas for å lese data fra filer. Ovenfor til høyre ser du de første linjene i filen vi skal lese inn i programmet vårt. a) Åpne nettsiden  github.com/jdforlag/kaares_kokebok_vgs. Velg så reelle_data_S1 kjoreturer.txt og last ned filen. b) Skriv av koden, lagre som « 1202_lesefil.py» og kjør programmet. Sørg for at « 1202_lesefil.py» og kjoreturer.txt ligger i samme mappe. ò Dersom du får en feilmelding når du kjører programmet, er det mulig at pandas ikke er instal- lert. For å installere, se side 333. c) Endre print -kommandoen til print(data.timer) . d) Endre print -kommandoen til print(data.km) . e) Utvid programmet slik at du legger sammen og skriver ut summen av alle kjøre- lengdene. Bruk følgende kodelinjer: for tur in data.km: sum_turer = 0 sum_turer = sum_turer + tur print(f"Total kjørelengde er { sum_turer } km.") f) Bruk skjelettkoden nedenfor til å bestemme den korteste turen målt i timer.

min_tid = 5000 for tid in data.timer: if tid < ... : min_tid = ... print(...)

g) Bruk blant annet kodelinjene for i in range(len(data.timer)): og fart = data.km[i] / data.timer[i] til å bestemme høyest fart.

194

DELIII Programmering på Vg3

KAPITTEL 13 Tallfølger og rekker

13.1 Tallfølger

(1301_folger.py)

a = 3

1

print(a) a = a + 4 print(a) a = a + 4 print(a)

2

3

4

5

6

Vi begynner med å lage et program for å utforske tallfølgen { a n } = { 3,7,11, ... } . a) Les koden ovenfor, og gjett på resultatet. b) Skriv av koden, lagre som « 1301_folger.py» og kjør programmet. Vi bruker for - eller while -løkker for å gjenta kodelinjer. c) Endre koden som vist nedenfor.

a = 3

1

for i in range(2):

2

print(a) a = a + 4

3

4

print(a)

5

d) Endre print -kommandoene inni for -løkka til print(a, end=", ") . e) Endre koden slik at resultatet blir som vist nedenfor. 3, 7, 11, 15, 19

m Du trenger bare å endre antall gjentakelser av for -løkka.

f) Endre koden slik at resultatet blir som vist nedenfor. 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207

217

Page 1 Page 2 Page 3 Page 4 Page 5 Page 6 Page 7 Page 8 Page 9 Page 10 Page 11 Page 12 Page 13 Page 14 Page 15 Page 16 Page 17 Page 18 Page 19 Page 20 Page 21 Page 22 Page 23 Page 24 Page 25 Page 26 Page 27 Page 28 Page 29 Page 30 Page 31 Page 32 Page 33 Page 34 Page 35 Page 36 Page 37 Page 38 Page 39 Page 40 Page 41 Page 42 Page 43 Page 44 Page 45 Page 46 Page 47 Page 48 Page 49 Page 50 Page 51 Page 52 Page 53

Made with FlippingBook - PDF hosting