Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""



Relevanta dokument
Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""

Övning 1. Abstrakta datatyper. 1. Stacken

Övning 1 - Abstrakta datatyper

Grundläggande datalogi - Övning 2

Länkade listor, stackar och köer

Sätt att skriva ut binärträd

Grundläggande datalogi - Övning 3

Föreläsning 13 och 14: Binära träd

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Övning 2. (Länkade) Listor, noder

Grundläggande datalogi - Övning 4

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Övning 0. Python för den som kan MATLAB. Lättare att läsa färdig kod än att skriva själv Det krävs övning för att automatiskt få detaljerna rätt:

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

TDP002 - Imperativ programmering

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Datastrukturer och algoritmer

Grundläggande datalogi - Övning 1

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Trädstandarder redskap för förvaltning av träd. Johan Östberg Mobil: E-post:

Föreläsning 3. Stack

Förslag till yttrande, medborgarförslag om skyltning av träd i Skolparken Nora

Hos vad? och bör därför vara instanseller klassvariabel i vilken klass?

Importförbud och sundhetscertifikat för import av trä och träprodukter

Föreläsning 3. Stack

Mer grafik. Jan Erik Moström

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

KOMMISSIONENS GENOMFÖRANDEFÖRORDNING (EU)

Sekvensdatatyper, ASCII och chiffer. Linda Mannila

Introduktion till programmering SMD180. Föreläsning 8: Listor

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Abstrakta datatyper Laboration 2 GruDat, DD1344

Hur man programmerar. Exempel på problemlösning i Python

Övning 3. Problemträd, breddenförst, djupetförst, hashning. Skriv ett program som läser personers namn och födelsedag från fil.

Detta kallas kärnved och består av tätvuxna celler med hårdare och starkare byggnad. Den ljusa, lösare delen i ytterkanten kallas ytved eller splint.

Föreläsning 8 Datastrukturer (DAT037)

Tentamen OOP

Listor. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 7. Peter Dalenius Institutionen för datavetenskap

Laboration: Whitebox- och blackboxtesting

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Hvilken verdi har et tre? Johan Östberg Mobil: E-post:

Programmering grundkurs

Länkade strukturer. (del 2)

729G04 Programmering och diskret matematik. Föreläsning 7

Föreläsning Datastrukturer (DAT036)

Kan ett datorprogram spela solitär?

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Lektion 2: Sökagenter. Robin Keskisärkkä

Föreläsning 5. Rekursion

Föreläsning Datastrukturer (DAT036)

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 12: Exempel och problemlösning

Implementering av vindskademodellen enligt Lagergren et al. i Heureka

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Tenta i Grundläggande programmering DD klockan

Lektion 1 - Programmeringsteknik F1, ht 2003

Övning 6. Ali Tofigh 24 Oktober, 2006

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Grundläggande programmering med C# 7,5 högskolepoäng

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

Rev No. Magnetic gripper 3

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

729G04 Programmering och diskret matematik. Python 3: Loopar

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Testautomatisering. BDD, RSpec

Grundläggande Datalogi

Föreläsning Datastrukturer (DAT036)

Ordlistor, filhantering och ut på webben. Linda Mannila

BST implementering, huvudstruktur

Programmering grundkurs

Introduktion till programmering SMD180. Föreläsning 7: Strängar

DD1314 Programmeringsteknik

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

Föreläsning Datastrukturer (DAT037)

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Språket Python - Del 1 Grundkurs i programmering med Python

Föreläsning 8: Exempel och problemlösning

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret Lektion 3

Föreläsning 6: Introduktion av listor

Grundläggande databehandling ht 2005

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

Programmering A. Johan Eliasson

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

Transkript:

Per Sedholm DD1320 (tilda11) 2011-09-02 Övning 1 Abstrakta datatyper 1. Stacken -*- coding: utf-8 -*- """Classroom exercise 1, example 1.""" class Stack: """A representation of a last-in-first-out (LIFO) stack of objects.""" def init (self): """Create an empty stack.""" self.top = None def push(self,x): """Push an item onto the top of this stack.""" ny = Node(x) ny.next = self.top self.top = ny def pop(self): """Remove the top object from this stack and return it.""" x = self.top.value self.top = self.top.next return x def isempty(self): """Test if this stack is empty.""" The naïve solution (below) is unnecessary: if self.top == None: return True return False return self.top == None class Node: """An entry in a linked structure (e.g. Stack).""" def init (self, x): """Create a node linked to the given element.""" self.value = x self.next = None 1

$ python -i ovn1-01.py >>> help(stack) Help on class Stack in module main : class Stack A representation of a last-in-first-out (LIFO) stack of objects. Methods defined here: init (self) Create an empty stack. isempty(self) Test if this stack is empty. pop(self) Remove the top object from this stack and return it. push(self, x) Push an item onto the top of this stack. >>> help(node) Help on class Node in module main : class Node An entry in a linked structure (e.g. Stack). Methods defined here: init (self, x) Create a node linked to the given element. Användning data = "pining for the fjords" s1 = Stack() for word in data.split(): print "pushing on s1:", word s1.push(word) s2 = Stack() while not s1.isempty(): word = s1.pop() print "pushing " + word + " on stack s2" s2.push(word) pushing on s1: pining pushing on s1: for pushing on s1: the pushing on s1: fjords pushing fjords on stack s2 pushing the on stack s2 pushing for on stack s2 pushing pining on stack s2 2. Inläsning och utskrift row = raw_input("ge en rad tal: ") parted_row = row.split() for num in parted_row: print num Ge en rad tal: 5 10 15 20 25 42 5 // 10 // 15 // 20 // 25 // 42 2

3. Läs från fil; sortera input = open("tred.txt") See ex.4 for URL for line in input: word = line.strip() print ", ".join(alist) $ ln -s /afs/nada.kth.se/info/dd1320/www-csc/tilda11/ovn/tred.txt $ python ovn1-03.py Abies, Acer, Aesculus, Alnus, Betula, Carpinus, Corylus, Fagus, Fraxinus, Juniperus, Larix, Malus, Picea, Populus, Populus, Prunus, Quercus, Salix, Salix, Sambucus, Sorbus, Syringa, Taxus, Tilia, Ulmus $ fmt tred_sv.txt egentligen radseparerad Banan Apelsin Äpple Plommon Öl Körsbär Åkerbär $ python ovn1-03.py med tred_sv.txt Apelsin, Banan, Körsbär, Plommon, Äpple, Åkerbär, Öl 4. Mäta tid; läsa URL import urllib import time def fetchsortedfile(filnamn): """Read file with the given name, return words as sorted list.""" wfile = open(filnamn) for line in wfile: word = line.strip() remove whitespace return alist def lasurlsortera(url): """Fetch file from given URL, return words as sorted list.""" wwwfile = urllib.urlopen(url) for line in wwwfile: word = line.strip() return alist before = time.time() lst1 = fetchsortedfile("tred.txt") after = time.time() print "Tid för filläsning:", after - before before = time.time() lst2 = lasurlsortera("http://www.csc.kth.se/utbildning/kth/kurser/dd" "1320/tilda11/ovn/tred.txt") note linebreak after = time.time() print "Tid för webbläsning:", after - before csc-datan$ python ovn1-04.py Tid för filläsning: 0.0144970417023 Tid för webbläsning: 0.212308883667 csc-datan$ python ovn1-04.py Tid för filläsning: 0.00315999984741 Tid för webbläsning: 0.0140569210052 hemma-datan$ python ovn1-04.py Tid för filläsning: 5.79357147217e-05 Tid för webbläsning: 0.0276610851288 3

5. Abstrakt datastruktur för temperatur templib.py def CtoF(c): return c*5/9 + 32 def FtoC(f): return (f - 32)*5/9 import templib c = 37.0 f = templib.ctof(c) print c, " C =", f, " F =", templib.ftoc(f), " C" from templib import CtoF, FtoC c = 37.0 f = CtoF(c) print c, " C =", f, " F =", FtoC(f), " C" 37.0 C = 52.5555555556 F = 11.4197530864 C temp.py """Temp - an abstract datatype for temperature Temp is used to represent temperature in multiple scales. """ zeroc = 273.15 zerof = 459.67*5/9 0 C == 273.15 K 0 F == 255.37222... K Conversion between Kelvin, degrees Celsius, degrees Fahrenheit [ C] = [K] + 273.15 [K] = [ C] - 273.15 [ C] = ([ F] - 32)*5/9 [ F] = [ C]*9/5 + 32 [K] = ([ F] + 459.67)*5/9 [ F] = [K]*9/5-459.67 class Temp: def init (self): self.k = 0 Temperature in Kelvin def setk(self,k): self.k = K def setc(self,c): self.k = zeroc + C def setf(self,f): self.k = zerof + 5*F/9 def getk(self): return self.k def getc(self): return self.k - zeroc def getf(self): return (self.k - zerof)*9/5 from temp import Temp t = Temp() c = input("vad är temperaturen i Celsius? ") t.setc(c) print "Amerikaner kallar det", str(t.getf()) + " F" Vad är temperaturen i Celsius? 100 Amerikaner kallar det 212.0 F 4

Representationsfel kan ge många decimaler: >>> 0.1+0.2 0.30000000000000004 I bas 2 (binärt) så kan värdet 0.1 inte representeras exakt. (Jfr. 1 3 decimalt.) 0.1 10 = 0.00011001100110011001100110011001100110011001100110011010... 2 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): Cross-multiply by bd: a/b > c/d => ad > bc num1 = self.num*otherfraction.den num2 = self.den*otherfraction.num return num1 - num2 if num1 < num2: return -1 if num1 == num2: return 0 return 1 f = Fraction(6, 8) g = Fraction(10, 16) h = f + g f.show() print "+", g.show() print "=", h.show() print if f < g: print str(f), "<", str(g) print str(f), ">=", str(g) 6 / 8 + 10 / 16 = 176 / 128 6/8 >= 10/16 Pythons klass Fraction (modulen fractions) har funktionen gcd för att beräkna största gemensamma nämnare (greatest common divisor, GCD). Det använder Euklides algoritm, som i Python kan skrivas: def gcd(a, b): while b: a, b = b, a%b return a 5