ProgX: Oppgaver i "Basic Python"

Mykje av dette er det du finn under "Grunnleggjande programmering", men noken krever bruk av lister (sjå Introduksjon til lister og listemetodar) eller strenger (sjå strengmetodar). Andre krever randomfunksjonar.

1 Bruk av matematiske og andre operatorar i konsollet:

  1. Finn kvadratet av 77 og kvadratrota av 85
  2. Finn avstanden frå origo til punktet (0.5, 0.7)
  3. Utfør heiltalsdivisjonen 127 delt på 33
  4. Finn resten av divisjonen 127/33 Svar: 28
  5. Kan du finna denne resten på ein annan måte? Hint: du kan bruka divisjon og heiltalsdivisjon
  6. Korleis kan du finna ut om 27 er delelig med 3?
  7. Korleis kan du finna ut om eit tilfeldig heiltal er eit kvadrattal?
  8. Kva skjer hvis du skriv "hei på " + "deg"?
  9. Kva skjer hvis du skriv "to" + 2 ?

2 "Kalkulatorar"

Her treng du ikkje bruka løkker, men gjerne if-setningar

  1. Pytagoras: Lag eit program som finn hypotenusen i ein trekant med kjente kateter.
    Variant: Lag eit program som finn ei side i ein rettvinkla trekant når dei to andre er kjente. Programmet skal lesa inn dei to sidene og spørja om disse er to kateter eller hypotenus og ein av katetane.
  2. avstand: Lag eit program som les inn to punkt (x1,y1) og (x2,y2), og skriv ut avstanden mellom dei.
  3. enheter: Lag eit eller fleire program som reknar om mellom enheter, feks m/s til km/h, meter til engelsk mile osv. Sjå Omrekningskalkulator.
  4. abc-formelen: Lag eit program som løyser ein andregradslikning vha abc-formelen (eksempel på det), og skriv ut riktig svar for to, ein, eller ingen løysing.
  5. ulikheter: Lag et program som les inn ein x-verdi og sjekkar om den er ei løysing på ulikheten - x2 + 7x - 6 > 0
  6. Herons formel: Skriv et program som les inn alle sidene (a, b og c) i ein vilkårlig trekant, og reknar ut arealet vha Herons formel.
    Ein variant av Herons formel er Brahmaguptas formel. Den gjeld for ein såkalt syklisk firkant, som er det same som ein firkant innskriven i ein sirkel.
  7. Bevegelseslikningane: Skriv et program basert på bevegelseslikningane i fysikk, som les inn v0, a, og t, og som reknar ut sluttfarten v, og strekningen s

3 Tilfeldige tal, terningkast ol.

Sjå Python: Randomfunksjonar.

  1. Lag eit tilfeldig heiltal mellom 1 og 100
  2. Lag eit tilfeldig partal mellom 1 og 100
  3. Lag eit tilfeldig desimaltal mellom 0 og 1
  4. Lag eit tilfeldig desimaltal mellom -1 og 1
  5. Lag eit tilfeldig punkt (x,y) slik at både x og y ligg mellom -1 og 1.  Finn deretter avstanden frå origo. (Dette er ein utvidelse av 1.2)

3.6 Terningkast med ein terning

Lag eit program som kastar ein terning N gonger, dvs generer N tilfeldige tal mell om 1 og 6
Finn gjennomsnittet.

3.7 Terningkast med to terningar

Lag et program som simulerer kast av to terninger. Vi "kastar" mange gonger og skriv ut summen S av kast1 og kast2. Stopp programmet hvis summen er større eller lik 10. Sjå løysingsforslag

Variant: Lag ei liste med frekvensane (kalla "f" her) der du tar vare på summen, dvs slik at f[0] inneheld antal gonger summen blir to, f[1] antal gonger tre osv heilt opp til f[10] som er antall gonger summen blir 12, som er det meste. Så for kvart kast må du altså legga 1 til på rett plass i lista.
Til slutt skal programmet skriva ut alle frekvensane.

4 if-setningar:

  1. Finn ut om det tilfeldige punktet du genererte over har kortare avstand frå origo enn 1. (sjå 1.2 og 3.5)
  2. Finn ut om det tilfeldige talet frå oppgave 1) over er eit partal eller oddetal og om det er eit kvadrattall eller ikkje.
  3. Hvis dette talet er eit oddetal, sjekk om n2 også er eit oddetal. Ka finn du?

5 Løkker:

  1. Lag ei løkke med N = 100 iterasjonar der du genererer eit tilfeldig punkt som over, og finn ut om talet k har kortare avstand enn 1 frå origo. La variabelen k telja opp kor mange gonger det skjer, og regn ut p = 4*k / N. Skriv ut p. Auk N til 1000, 10000 osv. Kva tal nærmar p seg? Korfor det? Sjå løysingsforslag
  2. Skriv ut alle multippel av 3 som er mindre enn 100. Bruk ei while-løkke.
  3. Skriv ut del lille gangetabellen. Hint: skriv ut multippel av 1, av 2 osv opp til 10. (prøv å pynta på utskriften)

6 Fleire løkkeoppgaver:

6.1 Primtal

Les meir om Primtal.

6.2 Fakultet Sjå løysingsforslag

1) Lag et program som finn n! (n - fakultet) (5! er 1*2*3*4*5 = 120 osv)
2) Ved hjelp av denne funksjonen skal du skriva ut dei første 10 tala:
1! = 1
2! = 2
3! = 6...
10! = 3628800

6.3 Fibonacci-følgen

Lag eit program som skriv ut Fibonacci-følgen. sjå: https://no.wikipedia.org/wiki/Fibonaccitall Her kan du gjerne bruka lister, (Sjå introduksjon til lister) men oppgava kan løysast på mange måtar. Her er ei løysingsforslag. Det bruker ein teknikk for tallbytting som du kan sjå her.

6.4 Figurtall

Skriv ut alle trekanttal og alle pyramidetal under 100 Sjå https://no.wikipedia.org/wiki/Trekanttall og https://no.wikipedia.org/wiki/Pyramidetall
Prøv tilsvarande for tetraedertall: https://no.wikipedia.org/wiki/Tetraedertall

Sjå også: http://oyro.no/figurtal.html

6.5 Pascals trekant

Skriv ut dei ti (feks.) første radene i Pascals trekant. Her er dei første fem. Her er det også greit å bruka lister.

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

6.6 Floyds trekant (Sjå løysingsforslag)

Skriv ut dei første n radene i Floyds trekant. Her er dei første fem:

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15

6.7 Lazy caterer's sequence

Siffera til venstre i kvar rad, dvs. 1, 2, 4, 7, 11, .... dannar det som kallast Lazy caterer's sequence. Lag eit program som skriv ut disse.

6.8 Mønster

Lag program som skriv ut følgande mønster (med varierande antal linjer). Programmet skriv ut ulike mønster med X-ar
NB! Mønster 1,2 og 3 er innanfor det som kan komma på ein prøve, det fjerde er på grensa,  men det siste er for vanskelig til å ha på ein prøve. Sjå løysingsforslag.

Mønster 1:
X
XX
XXX
XXXX
XXXXX
XXXXXX

Mønster 2:
XXXXXX
XXXXX
XXXX
XXX
XX
X

Mønster 3:
X
XX
X X
X  X
X   X
X    X

Mønster 4:
X X X
 X X X
X X X
 X X X
X X X
 X X X

Mønster 5: Diamantmønster:
   X  
  X X 
 X   X
X     X
 X   X
  X X 
   X  

6.9 Collatz antagelse

Eit av dei uløyste problema i matematikken er den såkalte Collatz Conjecture. (formodning eller antagelse). Problemet er som følger

Vi startar med eit heiltal, og bruker ein av følgande reglar på talet og erstattar det med det nye:

Antagelsen er at vi alltid ender opp med 1 til slutt. Men dette er ikkje bevist.
Oppgava for oss er då å laga eit program som bruker reglane og sjekker om dette stemmer for eit gitt tall.

7 Vektorar som lister:

Denne oppgava passar kanskje best for dei som tar R1. NB: Det fins bibliotek der vi kan gjera dette med arrays, som er enklare, men vi skal gjera det med vanlige lister.

  1. Lag et program som definer vektorane a =  [1,3,2] og b = [2,2,3], og som finn ein ny vektor som er summen av disse: c = a + b. Finn også differansen.
  2. Lag eit program som finn skalarproduktet av to vektorar [1,3,2] * [2,2,3] = 1*2 + 3*2 + 2*3 = 2 + 6 + 6 = 14.
  3. Finn lengden av ein vektor når start- og sluttpunkt er gitt. Dette er det same som å finna avstanden mellom to punkt.
  4. Finn vinkelen mellom to vektorar som er gitt på koordinatform.

8 Tekststrenger

Oppgave 8.1

Definer strengen s1 = "abcdefg", og lag ein ny streng som er lik den omvendte "gfedcba" vha ei løkke.

Oppgave 8.2

9 Nøtter (?):

9.1 Randomwalk i 2D (som et apropos til Brownske bevegelsar i termofysikken)

Du kan evt. gjera det enklare ved å gå langs ei linje. Då startar du i x = 0, og så tar du eit tilfeldig steg i pluss- eller minusretning.

9.2 Pytagoreiske talltrippel:

Eit pytagoreisk talltrippel er tre heiltall som passar i Pytagoras sin likning, som feks 3,4 og 5.

9.3 Kaprekars konstant.

Lag eit program som finn Kaprekars konstant (også kalla Kaprekars tall)

9.4 Primtal

Her treng du kanskje heiltalsdivisjon og/eller rest (modulo) av ein heiltalsdivisjon. Sjå operatorar.

  1. Skriv eit program som finn ut om eit gitt tal er eit primtal. Løysingsforslag.
  2. Skriv eit program som finn ut alle primtalsfaktorane av eit gitt tal.
  3. Ein av dei kjente algoritmane for å generera primtal er den såkalte Eratosthenes' sil (eller sold). Les om den og bruk den til å generera alle primtall opp til 100

9.5 Sortering.

Ei av dei vanligaste algoritmane å starta med i programmering, er å laga ein sorteringsalgoritme. Det fins mykje teori, og mange forskjellige
algoritmar for dette, og det fins ferdiglaga funksjonar i Python. Men du skal laga din egen algoritme. For å klara det treng du å kunna lister. (Sjå Introduksjon til lister og listemetodar.)
Det kan også vera greit å sjekka programmet bytt.py som bytter to tal.

Sorter ei liste med heiltal. Du bruka såkalt boblesortering. Hvis du feks startar med a = [6,2,7,9,1,1,3,2,5,10,15,8], så skal du ha ut [1,1,2,2,3,5,6,7,9,10,15] Løysingsforslag.

10 Funksjonar:

Intro til bunnpunkt og nullpunkt for ein funksjon

Vi tar utgangspunkt i funksjonen f(x) over.