Oppgaver: Programmering av tallfølger

Oppgaver: Programmering av tallfølger#

Oppgave 1

Ta quizen!


Oppgave 2

Nedenfor vises noen programkoder som skriver ut noen tall. Les programmene og prøv å forutsi hvilke tall de skriver ut.

Skriv inn gjetningen din og sjekk svaret ditt for hvert av programmene.


Oppgave 3

Fyll ut programmet nedenfor slik at det skriver ut alle tallfølgen

\[ 1, 2, 3, 4, 5, 6, 7, 8. \]

Fyll ut programmet nedenfor slik at det skriver ut tallfølgen

\[ 2, 4, 6, 8. \]

Fyll ut programmet nedenfor slik at det skriver ut tallfølgen

\[ 1, 5, 9, 13. \]

Fyll ut programmet nedenfor slik at det skriver ut tallfølgen

\[ -5, -3, -1, 1, 3, 5. \]

Oppgave 4

Fyll ut programmet nedenfor slik at det skriver ut tallfølgen

\[ 10, 6, 2 \]

Fyll ut programmet nedenfor slik at det skriver ut tallfølgen

\[ 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0 \]

Fyll ut programmet nedenfor slik at det skriver ut tallfølgen

\[ 5, 3, 1, -1, -3, -5 \]

Fyll ut programmet nedenfor slik at det skriver ut tallfølgen

\[ -2, -5, -8, -11, -14 \]

Oppgave 5

Fyll ut programmet nedenfor slik at det skriver ut alle partallene til og med \(20\).

Fyll ut programmet nedenfor slik at det skriver ut alle oddetallene til og med \(21\).

Lag et program som skriver ut de \(20\) første partallene.

Lag et program som skriver ut de \(20\) første oddetallene.


Oppgave 6

Alma og Synne snakker om en annen strategi for å skrive ut partall og oddetall.

Alma

Jeg har en annen idé for å skrive ut partallene på. Vi kan lage en løkke som går gjennom alle naturlige tall og sjekker om det er et partall.

Synne

Det er en god idé! Da kan vi bruke en if-setning for å sjekke om tallet er partall.

Alma

Men hvordan sjekker vi at et tall er et partall igjen?

Synne

Det er vel bare å sjekke om det er delelig med \(2\)? Jeg har lest at det kan man gjøre ved å skrive
if n % 2 == 0:

Fyll ut programmet nedenfor slik at det skriver ut alle partallene til og med \(20\) ved hjelp av en if-setning.

Alma og Synne fortsetter samtalen.

Alma

Ok, så nå klarer vi å skrive ut partall ved å sjekke om et tall er delelig med \(2\). Men hva med oddetallene?

Synne

Da har jeg lest at vi kan bruke en if-else-setning. Hvis tallet er delelig med \(2\), så gjør vi ingenting. Da kan vi bruke pass. Og så skriver vi ut tallet hvis det ikke er delelig med \(2\).


Bruk strategien til Alma og Synne i programmet nedenfor.


Oppgave 7

Alma og Synne snakker om hvordan man kan avgjøre om et tall \(p \in \mathbb{N}\) er et primtall med et program.

Alma

Jeg har lest at et primtall er et tall som bare er delelig med \(1\) og seg selv.

Synne

Ja, det stemmer! Så hvis vi skal sjekke om et tall \(n\) er et primtall, så må vi sjekke om det er delelig med alle tallene fra \(2\) til \(p - 1\).

Alma

Ja, men hvordan gjør vi det i et program?

Synne

Vi kan bruke en løkke som går gjennom alle tallene \(n \in \{2, 3, \ldots, p - 1\}\) og sjekker om \(p\) er delelig med hvert av dem. Da kan vi vel bruke en if-setning litt som når vi sjekket om et tall var delelig med \(2\)?

Bruk strategien til Alma og Synne i programmet nedenfor. Sjekk at tallene \(11\), \(51\) og \(729\) er primtall.

Alma og Synne er ikke helt fornøyde.

Alma

Men nå sjekker vi jo fryktelig mange tall. Trenger vi å sjekke alle tallene fra \(2\) til \(p - 1\)?

Synne

Nei! Vi trenger bare å sjekke tallene opp til \(\sqrt{p}\). Hvis \(p\) er delelig med et tall større enn \(\sqrt{p}\), så må det også være delelig med et tall mindre enn \(\sqrt{p}\).

Alma

Hvorfor er det slik?

Synne

Det er jeg ikke sikker på. Var bare noe jeg så på Insta. Men hvordan regner vi ut \(\sqrt{p}\) i et program?

Alma

Det er enkelt! Vi kan bruke int(n ** 0.5)


Endre på programmet ditt og prøv ut strategien de snakker om.

Argumenter for at det største tallet man trenger å sjekke for å avgjøre om et tall \(p\) er et primtall, er \(\sqrt{p}\).


Oppgave 8

I denne oppgaven skal du lære hvordan man summerer tall med et program.

I programmet nedenfor summeres noen tall med en variabel s i en løkke. Linja s = s + n legger til verdien av n til summen s.

Les programmet og forutsi hvilken verdi som skrives ut av programmet.

Endre på programmet slik at det regner ut summen

\[ S = 1 + 2 + 3 + \ldots + 99 + 100 \]

Endre på programmet slik at det regner ut summen

\[ S = 1 + 3 + 5 + \ldots + 97 + 99 \]

Endre på programmet slik at det regner ut summen

\[ S = 2 + 4 + 6 + \ldots + 98 + 100 \]

Oppgave 9

Nedenfor ser du tre figurer. Figurene er satt sammen av små kvadrater.

Tenk deg at du skal fortsette å lage figurer etter samme mønster.

../../../../_images/oppgave_91.svg

Lag en formel \(K(n)\) som gir antall kvadrater i figur \(n\).

Lag et program som regner ut og skriver ut hvor mange små kvadrater det er i hver av de \(10\) første figurene.

Tenk deg at du har 100 000 små kvadrater. Du starter med å lage figur \(1\), så figur \(2\), deretter figur \(3\), og så videre.

Lag et program som finner ut hvor mange figurer du kan lage og hvor mange små kvadrater du har igjen.


Oppgave 10

Nedenfor ser du tre figurer. Figurene er satt sammen av små kvadrater.

Tenk deg at du skal fortsette å lage figurer etter samme mønster.

../../../../_images/oppgave_10.svg

Lag en formel \(K(n)\) som gir antall kvadrater i figur \(n\).

Lag et program som beregner og skriver ut hvor mange små kvadrater det er i hver av de \(20\) første figurene.

Tenk deg at du har 1 000 000 små kvadrater. Du starter med å lage figur \(1\), så figur \(2\), deretter figur \(3\), og så videre.

Lag et program som finner ut

  1. Hvor mange figurer du kan lage

  2. Hvor mange små kvadrater du har igjen


Oppgave 11

Nedenfor ser du tre figurer. Figurene er satt sammen av små kvadrater.

Tenk deg at du skal fortsette å lage figurer etter samme mønster.

../../../../_images/oppgave_112.svg

Lag en formel \(K(n)\) som gir antall kvadrater i figur \(n\).

Lag et program som beregner og skriver ut hvor mange små kvadrater det er i hver av de \(20\) første figurene.

Tenk deg at du har 1 000 000 små kvadrater. Du starter med å lage figur \(1\), så figur \(2\), deretter figur \(3\), og så videre.

Lag et program som finner ut

  1. Hvor mange figurer du kan lage

  2. Hvor mange små kvadrater du har igjen


Oppgave 12

I denne oppgaven skal du jobbe med summer av oddetall og partall.

Vi lar \(S_n\) være summen av de \(n\) første oddetallene slik at

\[\begin{align*} S_1 &= 1 \\ S_2 &= 1 + 3 \\ S_3 &= 1 + 3 + 5 \\ S_4 &= 1 + 3 + 5 + 7 \\ S_5 &= 1 + 3 + 5 + 7 + 9 \\ S_6 &= 1 + 3 + 5 + 7 + 9 + 11 \\ \vdots & \quad \quad \quad \vdots \quad \quad \quad \vdots \quad \quad \quad \vdots \\ \end{align*}\]

Lag et program som skriver de \(20\) første oddetallene.

Lag et program som skriver ut \(S_1, S_2, S_3, \ldots, S_{20}\).

La \(P_n\) være summen av de \(n\) første partallene.

Lag et program som skriver ut \(P_1, P_2, P_3, \ldots, P_{20}\).


Oppgave 13

Å regne ut \(\pi\) med så mange desimaler som mulig har vært et mål for matematikere i over tusen år. En måte å komme fram til verdien til \(\pi\) på er med summen

\[ \pi = \dfrac{4}{1} - \dfrac{4}{3} + \dfrac{4}{5} - \dfrac{4}{7} + \dfrac{4}{9} - \ldots \]

Jo flere ledd man bruker, jo nærmere kommer man verdien til \(\pi\).

Lag et program som skriver ut de \(5\) første leddene i summen.

Du bør få disse verdiene i utskriften:

4.0
-1.3333333333333333
0.8
-0.5714285714285714
0.4444444444444444

Lag et program som summerer de \(5\) første leddene i tallfølgen.

Bestem en god tilnærming til \(\pi\) med programmet ditt fra b.

Hvor mange ledd trenger du for å få \(\pi\) med \(5\) riktige desimaler?


Oppgave 14

Summen av en annen tallfølge nærmer seg også \(\pi\), men mye raskere enn den forrige. Summen er

\[ \pi = 3 + \dfrac{4}{2 \cdot 3 \cdot 4} - \dfrac{4}{4 \cdot 5 \cdot 6} + \dfrac{4}{6 \cdot 7 \cdot 8} - \dfrac{4}{8 \cdot 9 \cdot 10} + \ldots \]

Lag et program som skriver ut de \(5\) første leddene i summen.

Du bør få utskriften:

3
0.16666666666666666
-0.03333333333333333
0.011904761904761904
-0.005555555555555556

Lag et program som regner ut en tilnærming til \(\pi\) ved å bruke de 10 000 først leddene i summen.


Oppgave 15

Anna og Nicolai jobber med å lage et program som regner ut \(n\)-fakultet definert med formelen:

\[ n! = 1 \cdot 2 \cdot 3 \cdot \ldots \cdot (n - 1) \cdot n \]

For eksempel er

\[ 5! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120 \]
Anna

Når vi regner ut summer, så setter vi en variabel s = 0 på starten av programmet, og så legger vi til leddene ved å skrive s = s + ledd.

Nicolai

Ja, kanskje vi bare kan bytte ut plusstegnet med et gangetegn da?

Anna

Men hvis s er 0 i starten, så blir jo svaret alltid 0?

Nicolai

Ja, kanskje vi må sette den lik noe annet da?

Ta utgangspunkt i dialogen mellom Anna og Nicolai og lag et program som regner ut \(5!\).

Antall måter å stokke en kortstokk på er \(52!\)

Bruk programmet ditt til å regne ut \(52!\).

Kan du forklare hvorfor det sannsynligvis stemmer at når man stokker en kortstokk, så er det nesten umulig å få samme rekkefølge som en annen gang?


Oppgave 16

En rask måte å komme fram til sifrene til \(\pi\) er ved ta utgangspunkt i kjedebrøken nedenfor:

\[ \pi = \dfrac{4}{1 + \dfrac{1^2}{3 + \dfrac{2^2}{5 + \dfrac{3^2}{7 + \dfrac{4^2}{9 + \ddots}}}}} \]

Regn ut en tilnærming til \(\pi\) ved å bruke \(3\) ledd i kjedebrøken:

\[ \pi \approx \dfrac{4}{1 + \dfrac{1^2}{3 + \dfrac{2^2}{5}}} \]

Lag en algoritme du kan bruke til å skrive et program som regner ut verdien til \(\pi\) ved å bruke \(n\) ledd i kjedebrøken.

Lag et program med utgangspunkt i algoritmen din fra b og regn ut en tilnærming til \(\pi\).


Oppgave 17

Det finnes ingen generell formel for primtallene. Vi kan liste opp noen av de første:

\[ 2, 3, 5, 7, 11, 13, \ldots \]

men det er ikke noe mønster i dem. Tallet \(13\) er det sjette primtallet, for eksempel.

Lag et program som finner primtall nr. 10 000.

Lag et program som bestemmer summen av de 10 000 første primtallene.