Programmeringscamp. Implementer funktionerne én for én og test hele tiden.



Relaterede dokumenter
Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi

Abstrakte datatyper C#-version

Python programmering. Per Tøfting. MacFest

Lær Python - Dag 4, modul 2 Objektorienteret programmering

Lær Python dag 1 - modul 1

2. Husk at give execute-tilladelser. I Filezilla højreklikker I på den overførte file, så vælger I fileattributes og sætter kryds i execute.

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

Introduktion til funktioner, moduler og scopes i Python

Tredjepart webservices

Programmering og Problemløsning, 2017

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

DM507 Algoritmer og datastrukturer

Netværk & elektronik

Introduktion til programmering. Uge 38.1 Python 2 Learning Python, kap 8-12.

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

SmartWeb Brugermanual

Løsning af møntproblemet

Programmering og Problemløsning, 2017

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Klasser og Objekter i Python. Uge 11

Programmering I Java/C#

DM507 Algoritmer og datastrukturer

3. PROJEKT, 2 SEMESTER

Python 3 kursus lektion 1:

DM507 Algoritmer og datastrukturer

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Programmering for begyndere Lektion 2. Opsamling mm

3 Algebraisk Specifikation af Abstrakte Datatyper.

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Tree klassen fra sidste forelæsning

DDD Runde 2, 2015 Facitliste

Danmarks Tekniske Universitet

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Det er muligt at chekce følgende opg. i CodeJudge: og

IT Support Guide. Installation af netværksprinter (direkte IP print)

Databaseadgang fra Java

Enigma. Et programmeringssprog. Forfatter: Niels Serup X. Y Vejleder: A B C. Fag: Programmering Uddannelsessted: N M

Software Construction 1 semester (SWC) Spørgsmål 1

BRP Kursusintroduktion og Java-oversigt

Opsætning (GIS udbyder)

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

Transkript:

Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere den abstrakte datastruktur en kø. Opgave 2 beder jer om at implementere pseudokode der specificerer søgninger i websider. Abstrakte datastrukturer og pseudokode blev gennemgået i uge 44. Mens I udvikler modulerne er det nemmeste at teste funktionerne i selve modulet: Definition af funktioner.. if name == " main ": test af funktioner. Implementer funktionerne én for én og test hele tiden. Opgave 1. Implementering af en kø Opgaven træner i at implementere en abstrakt datastruktur og i at indkapsle den så andre kan bruge det. Den abstrakte datastruktur skal være en kø: En kø er FIFO: first in first out Har følgende metoder: enqueue(elem) indsæt et element bagerst i køen og returner det dequeue() fjern elementet forrest i køen og returner dette. size() returner tal der angiver køens længde isempty() returner Boolean der angiver om køen er tom I behøver kun lave: enqueue, size, og isempty. tail head

2 Tail Head Lav et modul queuemodule hvor følgende klasser er defineret: class element: def init (self,name): self.name = name self.next = None class queue: def init (self): self.tail = None self.head = None Tail peger på køens hale (den sidst tilkomne), head på køens hoved (den først tilkomne). Man laver en ny kø ved at skrive queue() og et nyt element ved at skrive element(navn), f.eks. element( Hansen ) Modulet skal tilbyde følgende services på køer: def enqueue(queue,anelement): '''add anelement as the tail for the queue and return it''' def dequeue(queue): '''remove the head of the queue and return it''' def size(queue): '''return the size of the queue''' def isempty(queue): '''return true if the queue is empty''' Skriv et andet modul der importerer kømodulet. from queuemodule import * Det nye modul skal indeholde følgende kommandoer der bruger jeres implementation print 'lav ny koe' dagligbrugsen = queue() print 'Er koeen tom?', isempty(dagligbrugsen) print 'indsaet tre elementer' enqueue(dagligbrugsen,element('hansen')) enqueue(dagligbrugsen,element('karlsen')) enqueue(dagligbrugsen,element('jensen')) print 'Er koeen tom?', isempty(dagligbrugsen)

3 Og give følgende output lav ny koe Er koeen tom? True indsaet tre elementer Er koeen tom? False Stoerrelse = 3 Stoerrelse = 2 Stoerrelse = 1 Stoerrelse = 0 Stoerrelse = 0 Husk at opdatere køens variable head og tail. Faldgruber i dequeue: Hvad skal der ske hvis vi kalder funktionen på en tom kø? Hvad skal der ske når vi fjerner det sidste element i køen og den bliver tom? Opgave 2. Lav et modul der downloader en webside og søger i den Opgaven træner i at implementere pseudokode samt at indkapsle services i et modul ordfindermodul så andre kan bruge dem. I behøver kun lave 1.1. 1.2 er frivilling. 1.1 Obligatorisk Modulet skal indeholde følgende. Det starter med: import httplib def getwebpage(server,url): '''server er navnet pa en server. Url er dokumentets url. Returnerer HTMLkoden som en string. Hvis der opstaar fejl returneres den tomme string og fejlinformation printes ud Man faar fat i websitets indexside ved at saette url til den tomme streng''' connectionobject = httplib.httpconnection(server)#get the server connectionobject.request("get", url)#send a request result = connectionobject.getresponse()#get the response status = result.status if status == 200: #OK return result.read() else: #not OK print result.status, result.reason return '' Hvis vi vil fiske DMI s side om østjyllands vejr frem skriver man: thepage = getwebpage('www.dmi.dk', '/dmi/index/danmark/regionaludsigten/ostjylland.htm') Server = 'www.dmi.dk', url = '/dmi/index/danmark/regionaludsigten/ostjylland.htm' Dernæst skal det indeholde følgende funktioner, beskrevet i pseudokode: findtags(atext,starttag, endtag) '''returnerer en liste af alle forekomster af starttag...starttag i atext Ved soegning efter links kan starttag f.eks. vaere = <a og sluttag vaere </a>'''

4 initialiser taglisten lav alle bogstaver om til lowercase. Find er case-sensitiv find positionen af første forekomst af start-tag mens vi har fundet et start-tag find slut-tag'et fra en position efter start-taget hvis vi fandt et slut-tag tilfoej hele tag'et til taglisten led efter nyt start-tag fra en position efter slut-taget ellers vi kunne ikke finde tag'et. Hop ud af løkken returner taglisten I skal bruge funktionen find til at løse opgaven. Find er en metode hos typen string. Den kaldes: S.find(sub [,start [,end]]), hvor S er en string, sub er den tekst man vil finde, start angiver den position hvorfra søgningen starter, end den position hvor søgningen slutter. Funktionen returnerer sub s startposition. 'Peter boegh Andersen'.find('boegh') giver f.eks. resultatet 6. Hvis sub ikke kan findes, returneres -1. Find er case-sensitiv. Et muligt output fra funktionen kan være: <a href="/about/website">website maintained by the python community</a> <a href="http://www.xs4all.com/" title="web and email hosting provided by xs4all, netherlands">hosting by xs4all</a> <a href="http://www.pollenation.net/" title="design and content management system by pollenation internet, yorkshire">design by pollenation</a> Man kan f.eks. forestille sig funktionen brugt af en såkaldt webcrawler der systematisk leder nettet igennem efter websider den kan indeksere. Den vil bruge de fundne hyperlinks til at downloade nye websider. Implementer følgende pseudokode: 1.2 Frivillig def findwords(atext, wordlist): '''finder ordne i wordlist i atext. Returnerer en citationsliste med ordenes kontekst''' lav alle bogstaver i wordlist om til lowercase. Find er case-sensitiv initialiser citationslisten for alle ord i ordlisten find foerste forekomst af ordet i atext mens ordet blev fundet tilfoej fundkonteksten til citationslisten find naeste forekomst af ordet i atext returner citationslisten Fundkonteksten laves på følgende måde: def makecontext(awordposition,atext): '''returner 20 bogstaver foran og efter ordpositionen''' hvis positionen er udenfor teksten returner den tomme streng ellers find starten af konteksten find slutningen af konteksten returner atext[start:slutning] Output af findwords, der leder efter ordet python, kan f.eks. være: ally, support other python conferences a the world, and fund python related devel ="about/">about the python software found o:psf%40python.org">psf< sf<span>@</span>python<span>.</s for questions about python, please write :help%40python.org">help lp<span>@</span>python<span>.</s for comments on the python.org web pages

5 Faldgruber i makecontext: hvad skal der ske, hvis der er mindre end 20 bogstaver foran findestedet, eller mindre end 20 bogstaver efter findestedet? Man kan forestille sig funktionen brugt af politiet der leder efter sider med børnepornografi. I skal dernæst lave et nyt modul der importerer jeres modul og anvender dets services. F.eks. således: from ordfindermodul import * thepage = getwebpage('www.python.org', '/psf/') #print thepage linkliste = findtags(thepage,'<a', '</a>')#finder alle hyperlinks for link in linkliste: print link citations = findwords(thepage, ['python','website'])#leder efter ordene python og website for citation in citations: print citation