Ändringar mellan två versioner
Här visas ändringar i "Laboration 2" mellan 2015-08-28 18:41 av Linda Kann och 2015-08-28 19:58 av Linda Kann.
Visa < föregående | nästa > ändring.
Laboration 2
https://youtu.be/Y0zEQ3tU8mo
Laboration 2 - Kortkonst ¶
"Trollkarlen tar ut de tretton spaderna ur leken, håller dem som en kortlek med baksidan upp och lägger ut dem på följande sätt: Översta kortet stoppas underst, nästa kort läggs ut med framsidan upp, nästa kort stoppas underst, nästa kort läggs ut osv. Till publikens häpnad kommer korten upp i ordning ess, tvåa, trea... Utförande: Man ordnar i hemlighet korten enligt följande."
Ja, här bryter vi citatet ur Liberg: Trolleri för alla. I labbuppgiften ingår nämligen att ta reda på kortkonstens hemlighet! Du ska därför göra ett program där man kan simulera korttricket så här:
Vilken ordning ligger korten i? 3 1 4 2 5 De kommer ut i denna ordning: 1 2 3 5 4 Uppgifter I denna labb ska du implementera en kö på två olika sätt. Med den abstrakta datastrukturen kö kan man göra tre saker:¶
* ListQ - en kö med Pythons lista
* enqueue(x) # stoppa in något sist,
* x = dequeue() #plocka ut det som står först och
* isEmpty() #kolla om kön är tom. Det motsvarar anropen
* put(x)
* x = get()
* isEmpty()
S
Uppgifter
* ArrayQ - en kö med Pythons array I första uppgiften ska du skriva en egen klass ListArrayQ där du implementerar en kö med hjälp av pythons inbyggda lista. Till din hjälp har du Pythons listarray.¶
* Börja med att importera modulen array med from array import array
* Bestäm vilken typ av data du vill lagra.
* Skapa en array och experimentera med array-metoderna append, insert, remove och pop. Vilka vill du använda i din enqueue respektive dequeue?
* Nu är du redo att skriva din egen klass ArrayQ.
* Attribut: En array (och ev andra attribut som du vill ha med). Alla attribut ska vara privata.
* Metoder: __init__, enqueue, dequeue och isEmpty (men inga andra metoder¶).
* Testa ListArrayQ Prova din kö med följande testprogram: q = ListArrayQ() q.put(1) q.putenqueue(1) q.enqueue(2) x = q.getdequeue() y = q.getdequeue() print(x,y) # 1 2 ska komma ut
* Skriv Trollkarlsprogrammet Skriv ett program som simulerar korttricket (se exemplet överst i labben). Inmatningstips är att använda input() för att läsa in hela raden, och sensplit() för att dela upp den och int() för att konvertera till heltal. Experimentera sedan med olika inmatade ordningar och se om du kan lista ut i vilken ordning korten ska ligga innan man börjar trolla för att man ska få ut alla tretton i rätt ordning!¶ Programmet konverserar också intelligent. Mata till exempel in meningen JAG GILLAR NÄR DU KRAMAR MEJ.
* Skapa en ListArrayQ-modul Gör nu så här: klipp ut klassen från ditt program och klistra in i en ny fil listarrayQFile.py Importera klassen till huvudprogrammet med raden from listarrayQFile import ListArrayQ Nu går det att använda klassen utan att den syns i programmet.
* LinkedQ - en kö av noder (länkad lista) Nu ska du istället implementera kön som en länkad lista. Då behövs två nya klasser: Node och LinkedQ, som kan ligga i samma fil. Skriv in bägge klasserna i samma fil: linkedQFile.py. Noderna i listan är objekt som vardera innehåller två (privata) attribut: ett värde (value) och en referens till nästa objekt (next). Själva LinkedQ-klassen ska har två attribut: first som håller reda på den första noden i kön och last som pekar ut den sista. Här är en del av koden - resten får du fylla i själv. Använd samma gränssnitt som i uppgift 1:
* putenqueue(x)
* x = getdequeue()
* isEmpty()
Som inspiration kan du titta på stack.py från Övning 1.¶ Det är extra knepigt att programmera putenqueue(x) eftersom det blir två fall, beroende på om kön är tom eller inte. Rita upp bägge fallen (lådor med pilar) innan du skriver koden!
* Trollkarlsprogrammet med LinkedQ Ändra import-satsen i trollkarlsprogrammet så att du importerar klassen LinkedQ istället förList ArrayQ. Provkör. Fungerade det? Då har du lyckats implementera den abstrakta datastrukturen kö på två olika sätt. Testa också att rita en blomma.Programmet konverserar också intelligent. Mata till exempel in meningen JAG GILLAR NÄR DU KRAMAR MEJ.¶
När allt fungerar som det ska bör du ta en extra titt på koden. Är den kommenterad och begriplig? Hur har du testat programmet för att se att det fungerar?
Betyg Denna labb kan endast ge betyg E. Du måste lämna in den och redovisa den i tid för att få göra labbarna för högre betyg i period 2.
Redovisning Labben lämnas in på kurswebbsidan (se Inlämningsuppgifter i vänstermenyn) och redovisas muntligt av bägge gruppmedlemmarna.