FÖRBÄTTRINGSARBETE PÅGÅR!

TILDA, ÖVNING 1

Pythonuppgifter, abstrakta datatyper

    INLÄSNING OCH UTSKRIFT

  1. Skriv ett program som läser in en rad tal och skriver ut dom med ett tal per rad.
    
    raden = raw_input("Ge en rad tal: ")
    raden_i_delar = raden.split()
    for tal in raden_i_delar:
        print tal
    
    
    

    GCD-algoritmen

  2. Beräkna minsta gemensamma faktor mellan två tal.
    Indata: Två heltal m och n
    Utdata: Deras minsta gemensamma faktor

    Algoritm:

    Exempel:

    120 modulo 65 = 55
    65 modulo 55 = 10
    55 modulo 10 = 5
    10 modulo 5 = 0

    I Python

    #encoding:Latin1 
    
    def gcd(m,n):
        while m%n != 0:
            oldm = m
            oldn = n
            m=oldn
            n=oldm%oldn
        return n
    
    




    Listan - exempel på en datastruktur i Python

  3. Data: ett antal tal, tecken eller objekt

    Metoder och operationer:

  4. Skriv ett program som går igenom en lista med alla namn i grupp1 och läser in ålder för varje person och lägger in i en ny lista.
    Sortera den nya listan, vänd på den och räkna ut hur många element den har.

    Vi skriver egna datastrukturer

    I kursen ska vi själva implementera datastrukturer, oftast genom att skriva egna klasser i Python.

  5. Abstrakt datatyp för temperatur

    * Temperatur kan anges i olika skalor. En abstrakt datatyp minskar risken för missförstånd. Definiera klassen temp med metoderna setK, setC, setF och getK, getC, getF.

    * Använd sedan klassen i ett program som läser in utomhustemperaturen (Celsius) och skriver ut temperaturen så att en amerikan förstår (Fahrenheit).


    Filen temp.py:
    # -*- coding: Latin-1 -*-
    """Abstrakt datatyp för temperatur"""
    
    nollC = 273.15                        
    nollF = 255.3666666                   #F-nollan i Kelvin
    
    class Temp:
    
        def __init__(self):
            self.K = 0                             #Temperatur i Kelvin
    
        def setK(self,K): 
    	self.K = K
    
        def setC(self,C):
    	self.K = nollC+C
    
        def setF(self,F): 
    	self.K = nollF+5*F/9
    
        def getK(self):   
    	return self.K
    
        def getC(self):   
    	return self.K-nollC
    
        def getF(self):   
    	return (self.K-nollF)*9/5
    
    

  6. Fraction-klassen: Ett exempel från Miller & Ranums bok, s 35:
    # encoding: Latin1 (tillåt å, ä och ö)
    # Fraction-klassen 
    
    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
            return Fraction(newnum,newden)
    
        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
    

    Stacken


  7. Filen stack.py (känd från föreläsning)

    class Stack:
    
       def __init__(self):
          self.top = None
    
       def push(self,x):
          ny = Node(x)
          ny.next = self.top
          self.top = ny
    
       def pop(self):
          x = self.top.value
          self.top = self.top.next
          return x
    
       def isempty(self):
          if self.top == None: 
             return True
          else: 
             return False
    
    
    class Node:
    
       def __init__(self, x):
          self.value = x
          self.next = None