bild
Skolan för
elektroteknik
och datavetenskap

Laboration 1 - Datastruktur för bråk

Formaliteter

Alla laborationer görs i grupper om två. Din labbkompis är den som har fått samma datornummer som du på sitt placeringskort.
  1. Logga in. Ni bör båda ha varsitt konto (användarnamn + lösenord). Logga in på det ena.
  2. Checka in på kursen.
    Välj "rapp" i vänstermenyn och följ länken för att aktivera din kursregistrering. Logga in med ditt kth-konto (som för Mina Sidor). Det här måste ni göra bägge två!
  3. Öppna ett terminalfönster.
    Under Applications hittar du Accessories och därunder Terminal. Prova att skriva whoami i terminalfönstret för att se vilken av er som är inloggad just nu.
  4. Skapa gemensam katalog med labbkompisen i två steg!
    Skriv följande i terminalfönstret:
       course labdir tilda10 kompisens_användarnamn
    Låt sedan labkompisen logga in på sitt konto och ge kommandot
       course labdir tilda10 ditt_eget_användarnamn
    Nu har ni en gemensam katalog tilda10 där ni kan spara alla program ni skriver i kursen.
  5. Starta Python.
    Under Applications hittar du Programming och därunder IDLE (du får prova DrPython om du vill)

SimaManager

Under Applications och sedan CSC hittar du SimaManager. I fönstret som öppnas kan du välja kursen tilda. Denna kö använder du när det är full rulle under labbarna och du vill få tag på en assistent, till exempel för att fråga om hjälp eller för att redovisa dina färdiga labbar. Är det lugnt så är det bara att vifta så kommer vi!

Funktionen gcd

Öppna ett nytt Python-fönster (under File i IDLE) och kopiera följande kod dit.
# -*- coding: Latin-1 -*-
# gcd-funktionen från Miller & Ranums bok, s 35

def gcd(m,n):
    while m%n != 0:
        oldm = m
        oldn = n
        m=oldn
        n=oldm%oldn
    return n
Lägg till ett huvudprogram som läser in två tal, beräknar gcd genom att anropa funktionen, och skriver ut resultatet. Tips: Läs in med input och skriv ut med print. Spara programmet i tilda10-katalogen.

Svara sedan på följande frågor:

  1. Vad är gcd(1331, 704)?
  2. Hur många varv blir det i while-slingan? (Tips: lägg in en print-sats i funktionen)
  3. Går det lika bra att anropa funktionen med gcd(704, 1331)? Vad händer då?
Kommentera nu bort huvudprogrammet (under Format hittar du Comment Out Region) men låt funktionen stå kvar.

Klassen Fraction

Kopiera hela klassen nedan och klistra in den efter din gcd-funktion.
#  Fraction-klassen från Miller & Ranums bok, s 35
class Fraction:

    def __init__(self, top, bottom):
        self.num = top
        self.den = bottom

    def __str__(self):
        return str(self.num)+"/"+str(self.den)

    def show(self):
        print self.num,"/",self.den

    def __add__(self,otherfraction):
        newnum = self.num*otherfraction.den + \
                 self.den*otherfraction.num
        newden = self.den * otherfraction.den
        common = gcd(newnum,newden)
        return Fraction(newnum/common,newden/common)

    def __cmp__(self,otherfraction):
        num1 = self.num*otherfraction.den
        num2 = self.den*otherfraction.num
        if num1 < num2:
            return -1
        else:
            if num1 == num2:
                return 0
            else:
                return 1
  • Skriv ett huvudprogram för att testa alla metoderna i Fraction-klassen. Här är några exempel:
    vete = Fraction(2,10)
    vete.show()
    print vete
    korn = Fraction(1,3)
    musli = vete + korn
    print musli
    
  • Lägg till en ny metod - du får själv välja vad den ska göra. Provkör.

  • Skriv en kommentar till varje metod som beskriver vad den gör.

  • Svara sedan på följande frågor:
    1. Vad är relationen mellan en klass och ett objekt?
    2. Hur skriver man för att skapa ett Fraction-objekt?
    3. Vad gör __init__?
    4. Vilka av metoderna ovan har returvärden?
    5. Vad är self?
    6. När anropas metoden __str__?
    7. När anropas metoden __add__?
    8. När anropas metoden __cmp__?
    9. Hur används parametern otherfraction i __add__ och __cmp__?

Redovisa ditt program och dina svar för någon av assistenterna!








Väl labbat av ................................. medger....................... den ...............

Sidansvarig: Linda Kann <lk@csc.kth.se>
Uppdaterad 2010-08-31