Grundläggande datalogi - Övning 2

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

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?

Grundläggande datalogi - Övning 1

Länkade listor, stackar och köer

Föreläsning 3. Stack

Föreläsning 3. Stack

Övning 1 - Abstrakta datatyper

Grundläggande datalogi - Övning 3

Grundläggande datalogi - Övning 4

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

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

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Sätt att skriva ut binärträd

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

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

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

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

DD1314 Programmeringsteknik

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

Tentamen i Algoritmer & Datastrukturer i Java

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

Några saker till och lite om snabbare sortering

Abstrakta datatyper Laboration 2 GruDat, DD1344

Tentamen i Algoritmer & Datastrukturer i Java

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Selektion och iteration

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

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

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

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

Datastrukturer och algoritmer

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 Matlab DD1312. Programspråk. Utskrift på skärmen

Datalogi, grundkurs 1

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

Stack, specifikation. Stack och Kö. Y s t M A p. Stack. <== > Y s t M A p <== > Prioritetskö

Övning 6. Ali Tofigh 24 Oktober, 2006

Föreläsning Datastrukturer (DAT036)

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

Föreläsning Datastrukturer (DAT036)

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Grundläggande databehandling ht 2005

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

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

Föreläsning Datastrukturer (DAT036)

Länkade strukturer. (del 2)

Föreläsning 2 Programmeringsteknik och C DD1316

Pythons standardbibliotek

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Föreläsning Datastrukturer (DAT037)

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

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

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

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

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

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

Fredag 10 juni 2016 kl 8 12

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

Föreläsning 8 Datastrukturer (DAT037)

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

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

Laboration: Whitebox- och blackboxtesting

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

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Övning 3 - Tillämpad datalogi 2012

Mer grafik. Jan Erik Moström

Programmering grundkurs

Måndag 13 mars 2017 kl Rita en KMP-automat för CAMCORDERCAMERA samt ange next-vektorn.

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

DD1321, Tentamen i tillämpad programmering och datalogi Lördagen den 18 dexember 2010 kl 13 18

Kan ett datorprogram spela solitär?

Länkade strukturer, parametriserade typer och undantag

Tentamen i Introduktion till programmering

TENTAMEN: Objektorienterad programutveckling. Läs detta! Skriv ditt namn och personnummer på varje blad (så att vi inte slarvar bort dem).

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2. Länkad lista och iterator

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Föreläsning Datastrukturer (DAT036)

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

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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

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

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Övning 1. Abstrakta datatyper. 1. Stacken

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 13 Datalogi 1 DA2001

Datalogi för E Övning 3

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

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

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

Exempeltenta GruDat 2002/2003

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Transkript:

Grundläggande datalogi - Övning 2 Björn Terelius November 7, 2008

Klasser skapas med nyckelordet class Klasser Konstruktorer och destruktorer Undantagshantering class MyClass: Docstring and doctests for the class def MemberFunction1(self):... def MemberFunction2(self, arg):... Klassen kan sedan instansieras och användas x = MyClass() x.memberfunction1() x.memberfunction2(15)

Klasser Konstruktorer och destruktorer Undantagshantering När ett objekt konstrueras körs metoden init () När ett object destrueras körs metoden del () I Python skapar man normalt medlemsvariabler i init () class FileHandle: def init (self, filename): self.file = open(filename) def del (self): self.file.close()

Klasser Konstruktorer och destruktorer Undantagshantering En exception kastas på följande sätt raise ExceptionTyp('Felmeddelande') och fångas med try:... except ExceptionTyp, namn... Exceptions används främst för att hantera fel som uppstår då programmet exekveras

En stack kan implementeras som en länkad lista av noder class Node: def init (self, item, next): "The constructor initializes member varibles" self.item = item self.next = next Själva stacken innehåller bara en referens till den första noden class Stack: A concrete implementation of an ADT stack def init (self): self.top = None

def empty(self): Returns True if the queue is empty and False otherwise return self.top==none def push(self, item): Puts an element on the top of the stack self.top = Node(item, self.top)

def pop(self): Removes an element from the top of the stack and returns the removed element. Raises an exception if the stack was empty if self.empty(): raise Exception("Empty stack") top_item = self.top.item self.top = self.top.next return top_item

Partitionera en lista Vända på en kö En RPN kalkylator Stackar används ofta för att spara temporära resultat. def partition_list(l, pivot): small=stack() large=stack() for x in l: if x<pivot: small.push(x) else: large.push(x) for i in range(len(l)-1, -1, -1): if not large.empty(): l[i] = large.pop() else: l[i] = small.pop() return l

Partitionera en lista Vända på en kö En RPN kalkylator Sista elementet som sätts in i en stack är det första som kommer tas ut. Detta kan användas för att vända på ordningen i andra datastrukturer. def reverse_queue(q): Takes a queue q as input and reverses it s = Stack() while not q.empty(): s.push(q.dequeue()) while not s.empty(): q.enqueue(s.pop()) return q

Partitionera en lista Vända på en kö En RPN kalkylator from stack import Stack def tokenize(s): Returns a list of tokens t = s.split() return t

Partitionera en lista Vända på en kö En RPN kalkylator def eval_postfix(tokens): operands = Stack() for t in tokens: if t in "+-*/": operand2 = operands.pop() operand1 = operands.pop() result = compute(t, operand1, operand2) operands.push(result) else: operands.push(float(t)) result = operands.pop() if not operands.empty(): raise Exception("Too few operators") return result

Partitionera en lista Vända på en kö En RPN kalkylator def compute(op, lhs, rhs): if op=='+': return lhs+rhs elif op=='-': return lhs-rhs elif op=='*': return lhs*rhs elif op=='/': return lhs/rhs else: raise Exception("Invalid operator")

Partitionera en lista Vända på en kö En RPN kalkylator def rpn_calculator(): while True: s = raw_input("input> ") if not s: break try: result = eval_postfix(tokenize(s)) print result except Exception, e: print "Illegal syntax:", e

Partitionera en lista Vända på en kö En RPN kalkylator >>> from rpn import * >>> rpn_calculator() Input> 1 2 / 3 + 3.5 Input> 3 1.2 3.8 + * 15.0 Input> 3 4 + - Illegal syntax: Empty stack Input> 5 6 7 + Illegal syntax: Too few operators Input> >>> ^D