Opgaver/Øvelser

Aflevering af opgaver

Send en mail til neinalways@gmail.com med:

  • Ordet grprog i emnelinjen.
  • Én vedlagt arkivfil i rar, jar, 7z, zip, eller tgz.format indeholdende jeres kildekode.
  • Alle relevante filer skal være i arkivfilen. Relevante filer er .py-filer.
  • Arkivfilen skal have lektionsnummer og initialer i filnavnet. Fx NMLlektion3.zip. INGEN MELLEMRUM i directory- eller filnavne, tak!

Opgave 5.1

Der findes i Python et modul, time. Modulet har (bla) en funktion, der også hedder time. Funktionen returnerer den aktuelle Greenwich Mean Time i det, der kaldes “the epoch”, som er et arbitrært valgt tidspunkt, der bruges som reference punkt for tid. På UNIX baserede systemer, fx Linux og OS X, er dette tidspunkt 1, januar 1970.

# eksempel fra idle
>>> import time
>>> time.time()
1501151416.063009

Skriv et program, ass51.py, der læser den aktuelle tid og konverterer den til timer, minutter, sekunder plus det antal dage, der er gået siden "the epoch".

Opgave 5.2

Fermat’s sidste læresætning siger, at der ikke findes positive heltal, a, b og c for hvilke det gælder, at

an + bn = cn

for værdier af n større end 2.

This theorem was first conjectured by Pierre de Fermat in 1637 in the margin of a copy of Arithmetica where he claimed he had a proof that was too large to fit in the margin. The first successful proof was released in 1994 by Andrew Wiles, and formally published in 1995, after 358 years of effort by mathematicians.

Citat fra Fermat's Last Theorem i Wikipedia.

  1. Skriv en funktion, check_fermat, der tager fire argumenter, a, b, c og n, og derefter kontrollerer om Fermat’s læresætning holder. Hvis n is greater than 2 og

    an + bn = cn

    skal programmet skrive, “OMG! Fermat tog fejl!” Ellers skal programmet skrive “Godt forsøg, men … Prøv igen!”

  2. Skriv et program, ass52.py, der beder brugeren om at indtaste værdier for a, b, c og n, konverterer dem til heltal, for derefter at anvende check_fermat til at kontrollere om Fermat’s læresætning holder.

Opgave 5.3

Hvis du får tre pinde kan de muligvis lægges på en flade, så de danner en trekant. Hvis fx en af pindene er 12 cm lang, og de to øvrige begge er 1 cm lange, kan du ikke lave en trekant af dem. De to korte vil ikke kunne mødes. Til tre tilfældige længder af pinde, er der en simpel test, der kan afgøre om det er muligt at lave en trekant af dem:

Hvis en hvilken som helst af de tre længder er større end summen af de øvrige to, kan der ikke laves en trekant af dem. Ellers kan det lade sig gøre.
  1. Skriv en funktion, is_triangle, der tager tre heltal som argumenter, og derefter printer "Ja" eller "Nej" afhængigt af, om der kan laves en trekant af de tre pinde med de givne længder.
  2. Skriv et program, ass53.py, der beder brugeren om at indtaste værdier for de tre pindes længder, konverterer dem til heltal og derefter checker, ved hjælp af is_triangle om de kan bruges til at lave en trekant.

Opgave 5.4

Hvad er outputtet fra dette program, ass54.py? Tegn et stack diagram, der viser programmets status, når resultatet printes.

def recurse(n, s):
    if n == 0:
        print(s)
    else:
        recurse(n-1, n+s)

recurse(3, 0)

Hvad ville der ske, hvis recurse kaldes således: recurse(-1, 0)?

Udvid programmet med en docstring, der forklarer en bruger det nødvendige og tilstrækkelige for at kunne bruge funktionen.

Opgave 5.5

Læse følgende funktion og se om du kan ræsonnere dig frem til hvad den gør. Se evt eksemplerne i [Dow15] kapitel 4.

def draw(t, length, n):
    if n == 0:
        return
    angle = 50
    t.fd(length*n)
    t.lt(angle)
    draw(t, length, n-1)
    t.rt(2*angle)
    draw(t, length, n-1)
    t.lt(angle)
    t.bk(length*n)

Læg den derefter ind i et program, ass55.py, og check efter om du ræsonnerede rigtigt. Aflever både funktion og program, hvis de ikke ligger i en fil.

Opgave 5.6

En Koch kurve er en fractal, der ligner det vi ser i Figur 20.1. For at tegne en Koch kurve med længden x skal du blot

  1. Tegne en Koch curve med længden x/3
  2. Dreje 60 grader til venstre
  3. Tegne en Koch curve med længden x/3
  4. Dreje 120 grader til højre
  5. Tegne en Koch curve med længden x/3
  6. Dreje 60 grader til venstre
  7. Tegne en Koch curve med længden x/3

Undtagelsen er hvis x er mindre end 3: Her tegnes en ret linje med længden x.

Figur 20.1. Koch kurve
Koch kurve

Figuren er figur 5.2 fra [Dow15].


  1. Skriv en funktion, koch, der tager et turtle-objekt og en længde som argumenter. Funktionen skal bruge turtle-objektet til at tegne en Koch-kurve med den givne længde.
  2. Skriv en anden funktion, snowflake, som tegner tre Koch-kurver med omrids som et snefnug.
  3. Koch-kurver kan generaliseres på en lang række måder. Se http://en.wikipedia.org/wiki/Koch_snowflake for at læse om eksempler. Implementer din favorit som ass56.py.