Övning 1 - Abstrakta datatyper

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. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""

Sätt att skriva ut binärträd

Länkade listor, stackar och köer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Datastrukturer och algoritmer

Grundläggande datalogi - Övning 2

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 3 - Tillämpad datalogi 2012

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Datalogi för E Övning 3

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

Föreläsning 3. Stack

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

Erfarenheter från labben

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

Abstrakta datastrukturer

Länkade strukturer. (del 2)

Tommy Färnqvist, IDA, Linköpings universitet

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

Föreläsning 11. ADT:er och datastrukturer

729G04 Programmering och diskret matematik

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

Abstrakta datatyper Laboration 2 GruDat, DD1344

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

729G04 Programmering och diskret matematik

Föreläsning 3. Stack

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Lösningsförslag till exempeltenta 2

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

Använda Python Laboration 1 GruDat, DD1344

Laboration: Whitebox- och blackboxtesting

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

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

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Rekursion och induktion för algoritmkonstruktion

Datastrukturer och algoritmer

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

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

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 2 Programmeringsteknik och C DD1316

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Grundläggande datalogi - Övning 1

Kungliga Tekniska Högskolan Ämneskod 2D1370 Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

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?

Ordlistor, filhantering och ut på webben. Linda Mannila

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

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

Strängar. TDDD64 Programmering i Python Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Föreläsning Datastrukturer (DAT036)

DD1314 Programmeringsteknik

Fredag 10 juni 2016 kl 8 12

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

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

Föreläsning 2 Datastrukturer (DAT037)

Övning 6. Ali Tofigh 24 Oktober, 2006

Lösningar Datastrukturer TDA

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

729G04 Programmering och diskret matematik. Python 3: Loopar

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

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

Ö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:

Tentamen i Introduktion till programmering

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

OOP Objekt-orienterad programmering

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

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å

Datastrukturer. föreläsning 3. Stacks 1

Datalogi, grundkurs 1

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Kurskod D0010E Datum Skrivtid 5tim

Stackar, köer, iteratorer och paket

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

Tenta i Grundläggande programmering DD klockan

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

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

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tecken och strängar i Java

Dugga Datastrukturer (DAT036)

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

Grundläggande datalogi - Övning 3

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

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

Transkript:

/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20121 0 # coding : latin Övning 1 - Abstrakta datatyper 18 Summering Vi gick igenom betydelsen av abstrakta datatyper/datastrukturer. Detta exemplifierades genom att dels titta på generella abstrakta dataytyper så som stacken, inläsning och utskrift och listan samt dels studerade en egendefinerade abstrakta datatyper fraction. I pdfen finns två ytterligre exemple på egendefinerade abstrakta datayper temperatur och iso2utf. 19 import s y s, o s 20 s y s. p a t h. append ( o s. getcwd ()) 21 from s h o w _ f i g import s h o w _ f i g 1 Stacken Rita bilder som visar hur det ser ut när man lägger in ett nytt element i stacken. Rita bilder som visar hur det ser ut när man tar bort ett element från stacken. Skriv kommentarer till koden nedan! Skriv ett program som använder två stackar för att lösa något problem. In och uttag från stacken 33 34 s h o w _ f i g ( stack_example. png ) 34 35 # -*- coding : utf -8 -*- 36 """ Classroom exercise 1, example 1. """ 37

/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20122 38 c l a s s S t a c k : 39 """ A representation of a last - in - first - out ( LIFO ) stack of 40 objects. """ 41 def init ( s e l f ) : 42 """ Create an empty stack. """ 43 s e l f. t o p = None 44 45 def push ( s e l f, x ) : 46 """ Push an item onto the top of this stack. """ 47 ny = Node( x ) 48 ny. n e x t = s e l f. t o p 49 s e l f. t o p = ny 50 51 def pop ( s e l f ) : 52 """ Remove the top object from this stack and return it.""" 53 x = s e l f. t o p. v a l u e 54 s e l f. t o p = s e l f. t o p. n e x t 55 r e t u r n x 56 def i s e m p t y ( s e l f ) : 57 """ Test if this stack is empty. """ 58 ## The naïve solution ( below ) is unnecessary : 59 # if self. top == None : 60 # return True 61 # else : 62 # return False 63 r e t u r n s e l f. t o p == None 64 65 c l a s s Node : 66 """ An entry in a linked structure (e.g. Stack ). """ 67 def init ( s e l f, x ) : 68 """ Create a node linked to the given element. """ 69 s e l f. v a l u e = x 70 s e l f. n e x t = None Med help kan vi nu skriva ut en kortfattad beskrivning av programmet 73 p r i n t ( h e l p ( S t a c k )) Help on c l a s s S t a c k i n module p y r e p o r t. main : c l a s s S t a c k A r e p r e s e n t a t i o n o f a l a s t - in - f i r s t - o u t ( LIFO ) s t a c k o f o b j e c t s. Methods d e f i n e d h e r e : init ( s e l f ) C r e a t e an empty s t a c k. i s e m p t y ( s e l f ) T e s t i f t h i s s t a c k i s empty. pop ( s e l f ) Remove t h e t o p o b j e c t from t h i s s t a c k and r e t u r n i t. push ( s e l f, x ) Push an i t e m o n t o t h e t o p o f t h i s s t a c k. None

/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20123 79 Exempel användning av stacken 80 d a t a = [ 1,2,3,4 ] 81 s 1 = S t a c k () 82 f o r number i n d a t a : 83 p r i n t " p u s h i n g on s1 : ", number 84 s 1. push ( number ) 85 p u s h i n g on s 1 : 1 p u s h i n g on s 1 : 2 p u s h i n g on s 1 : 3 p u s h i n g on s 1 : 4 86 s 2 = S t a c k () 87 w h i l e not s 1. i s e m p t y () : 88 number = s 1. pop () 89 p r i n t " p u s h i n g ", number, " on s t a c k s2 " 90 s 2. push ( number ) 91 p u s h i n g 4 on s t a c k s 2 p u s h i n g 3 on s t a c k s 2 p u s h i n g 2 on s t a c k s 2 p u s h i n g 1 on s t a c k s 2 92 p r i n t " s1 isempty? ", s 1. i s e m p t y () s 1 i s e m p t y? True 92 p r i n t " s2 isempty? ", s 1. i s e m p t y () s 2 i s e m p t y? True 2. Inläsning och utskrift 97 98 r a d e n = raw_input ("Ge en rad t a l : ") Ge en r a d t a l : 98 r a d e n _ i _ d e l a r = r a d e n. s p l i t () 99 f o r t a l i n r a d e n _ i _ d e l a r : 100 p r i n t t a l 1 34 5 6 7 Listan - exempel på en datastruktur i Python Data: ett antal tal, tecken eller objekt Metoder och operationer: append(x) Lägger till x sist i listan. insert(i,x) Lägger till x på plats i. pop() Plockar bort sista elementet från listan. sort() Sorterar listan.

/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20124 reverse() Vänder på listan. index(x) Returnerar index för första förekomsten av x. count(x) Räknar antalet x i listan. remove(x) Tar bort första förekomsten av x. [i] Returnerar i:te elementet i listan. [:] Plockar ut en dellista. Konkatenerar två listor Flerdubblar listan. in Kollar om ett element finns med i listan. len Returnerar listans längd. 3. Läs från fil och sortera 127 i n f i l = open (" b i l a r. t x t ") 128 129 l i s t a = [ ] 130 f o r r a d i n i n f i l : 131 o r d e t = r a d. s t r i p () 132 l i s t a. append ( o r d e t ) 133 l i s t a. s o r t () 134 135 p r i n t l i s t a [ Bmw, F i a t, P o r sche, Saab, Volvo ] 4. Jämföra inläsning från text mot inläsning från web 139 import u r l l i b 140 import t i m e 141 142 def l a s F i l S o r t e r a ( f i l n a m n ) : 143 i n f i l = open ( f i l n a m n ) 144 l i s t a = [ ] 145 f o r r a d i n i n f i l : 146 o r d e t = r a d. s t r i p () 147 l i s t a. append ( o r d e t ) 148 l i s t a. s o r t () 149 r e t u r n l i s t a 150 151 def l a s U R L S o r t e r a ( u r l ) : 152 i n f i l = u r l l i b. u r l o p e n ( u r l ) 153 l i s t a = [ ] 154 f o r r a d i n i n f i l : 155 o r d e t = r a d. s t r i p () 156 l i s t a. append ( o r d e t ) 157 l i s t a. s o r t () 158 r e t u r n l i s t a 159 160 161 i n n a n = t i m e. t i m e () 162 l i s t a 1 = l a s F i l S o r t e r a (" t r e d. t x t ") 163 e f t e r = t i m e. t i m e () 164 p r i n t " Tid f ö r f i l l ä s n i n g : ", e f t e r - i n n a n

/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20125 166 Tid f ö r f i l l ä s n i n g : 0.000543117523193 167 i n n a n = t i m e. t i m e () 168 l i s t a 2 = l a s U R L S o r t e r a (" h t t p : //www. c s c. kth. s e / u t b i l d n i n g / kth / k u r s e r /DD1320/ t i l d \ 169 a11 / ovn / t r e d. t x t " ) 170 e f t e r = t i m e. t i m e () 171 p r i n t " Tid f ö r w e b b l ä s n i n g : ", e f t e r - i n n a n 192 Tid f ö r w e b b l ä s n i n g : 0.0210530757904 Egna datastrukturer I kursen ska ni själva implementera datastrukturer, oftast genom att skriva egna klasser i Python. 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: 193 """ Temp - an abstract datatype for temperature 194 Temp is used to represent temperature in multiple scales. 195 """ 196 197 ZERO_C = 273. 15 # 0 C == 273. 15 K 198 199 ZERO_F = 459.67*5/9 #0 F == 255.37222... K 200 201 202 # Conversion between Kelvin, degrees Celsius, degrees Fahrenheit 203 # [ C ] = [ K ] + 273.15 [ K ] = [ C ] - 273.15 204 # [ C ] = ( [ F ] - 32) *5/9 [ F ] = [ C ] *9/5 + 32 205 # [ K ] = ( [ F ] + 459.67) *5/9 [ F ] = [ K ] *9/5-459.67 206 207 c l a s s Temp : 208 209 def init ( s e l f ) : 210 s e l f.k = 0 # Temperatur i Kelvin 211 212 213 def s e t K ( s e l f,k) : 214 s e l f.k = K 215 216 def s e t C ( s e l f,c) : 217 s e l f.k = ZERO_C+C 218 219 def s e t F ( s e l f,f) : 220 s e l f.k = ZERO_F+5*F/9 221 222 def getk ( s e l f ) : 223 r e t u r n s e l f.k 224 225 def getc ( s e l f ) : 226 r e t u r n s e l f.k-zero_c 227 228 def g e t F ( s e l f ) : 229 r e t u r n ( s e l f.k-zero_f) *9/5 Import temp

/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20126 226 227 from temp import Temp 228 t = Temp() 229 c = i n p u t ("Vad är t e m p e r a t u r e n i C e l s i u s? ") Vad ä r t e m p e r a t u r e n i C e l s i u s? 229 t. s e t C ( c ) 230 p r i n t " Amerikaner k a l l a r d e t ", s t r ( t. g e t F ()) + "F" A m e r i k a n e r k a l l a r d e t 86.0F 230 # Vad är temperaturen i Celsius? 1 6. Fraction-klassen: Ett exempel från Miller & Ranums bok, s 35: 236 # encoding : Latin1 ( tillåt å, ä och ö) 237 # Fraction - klassen 238 239 c l a s s F r a c t i o n : 240 241 def init ( s e l f, top, bottom ) : 242 s e l f.num = t o p 243 s e l f. den = bottom 244 245 def str ( s e l f ) : 246 r e t u r n s t r ( s e l f.num)+" / "+ s t r ( s e l f. den ) 247 248 def show ( s e l f ) : 249 p r i n t s e l f.num," / ", s e l f. den 250 251 def add ( s e l f, o t h e r f r a c t i o n ) : 252 newnum = s e l f.num* o t h e r f r a c t i o n. den + s e l f. den * o t h e r f r a c t i o n.num 253 newden = s e l f. den * o t h e r f r a c t i o n. den 254 r e t u r n F r a c t i o n (newnum, newden ) 255 256 def cmp ( s e l f, o t h e r f r a c t i o n ) : 257 num1 = s e l f.num* o t h e r f r a c t i o n. den 258 num2 = s e l f. den * o t h e r f r a c t i o n.num 259 i f num1 < num2 : 260 r e t u r n -1 261 e l s e : 262 i f num1 == num2 : 263 r e t u r n 0 264 e l s e : 265 r e t u r n 1 Svara på följande frågor: 1. Vad är relationen mellan en klass och ett objekt? - objekt är instantieringar av klasser, engelskan "instance". Hur skriver man för att skapa ett Fraction-objekt? - fr=fraction(2,3). Vad gör init? anropasnrettobjectskapas,stterattributen 302 7. Text konvertering Följande funktion konverterar en sträng från teckenkodningen iso8859-1 till utf-8. Gör funktionen generellare så att den kan konvertera från en valfri given teckenkodning till en annan. 303 def i s o 2 u t f ( s t r a n g ) :

/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20127 304 """ 305 Konverterar från iso8859 till utf -8 306 """ 307 u s t r a n g = s t r a n g. d e c o d e ( i s o 8 8 5 9 1 ) 308 r e t u r n u s t r a n g. e n c o d e ( u t f 8 ) Konvertering av valfri teckenkodning 316 def c o n v e r t _ c a r a c t e r _ s e t ( s t r a n g, c u r r e n t _ s e t, t a r g e t _ s e t ) : 317 """ 318 Convert from one caracter set to another 319 320 Input : 321 string - string to convert 322 current_ set - current caracter set as a string, e. g. iso8859 323 target_ set - target caracter set as a string, e. g. utf -8 324 325 """ 326 u s t r a n g = s t r a n g. d e c o d e ( c u r r e n t _ s e t ) 327 r e t u r n u s t r a n g. e n c o d e ( t a r g e t _ s e t )