DD2350 HT25 (adk25)
Labb 1
Hoppa över till innehåll
Översikt
  • Logga in
  • Översikt
  • Kalender
  • Inkorg
  • Historik
  • Hjälp
Stäng
  1. Min översikt
  2. DD2350 HT25 (adk25)
  3. Uppgifter
  4. Labb 1
2025 HT
  • Startsida
  • Kursöversikt
  • Uppgifter
  • Quiz
  • KTH Course Evaluation

Labb 1

  • Inlämningsdatum 12 Sep 2025 av 17:00
  • Poäng 1

Beständig array

Om ni redovisar labben senast den 12 september får ni en labbleveranspoäng var, som kan ge högre betyg på labbmomentet. Till labben hör teoriuppgifter som kan redovisas för en teoripoäng till tentan, och detta görs på övningen den 2 september (ingen annan redovisningsmöjlighet finns). Det är frivilligt att redovisa teoriuppgifterna, men för att klara av att göra labben bör ni ha gjort dom.

Målen för labb 1 är att ni ska

  • öva att programmera efter en funktionsspecifikation,
  • implementera en beständig datastruktur som har låg tidskomplexitet och minneskomplexitet,
  • använda bitoperationer vid uppslagning i ett binärt träd,
  • testa och utvärdera parprogrammering.

En beständig datastruktur (persistent data structure) är en datastruktur som inte skriver över sig själv (muteras) när man gör en förändring i den. Det betyder att man alltid kan gå tillbaka till en tidigare version av datastrukturen. Se vidare föreläsning 3.

En array är en indexerad datastruktur där det går snabbt att slå upp och ändra vilket element som helst. Se vidare föreläsning 2. I denna uppgift har arrayen dynamisk storlek och kan vara gles, dvs inte alla möjliga element har tilldelats något värde.

Uppgift

Implementera (i valfritt programspråk som Kattis kan hantera) en beständig datastruktur för en dynamisk array (indexerad med naturliga tal) med heltal som har följande operationer:

newarray() Returnera en ny array.
set(a, i, value) Sätt a[i] till value och returnera den nya versionen av arrayen. i är ett ickenegativt heltal och value är ett heltal. Såväl i som value är 32-bitstal, dvs högst 231 − 1.
get(a, i) Returnera värdet a[i]. Om a[i] inte har tilldelats ett värde tidigare returneras 0.

En beskrivning av hur datastrukturen ska byggas finns på https://conjoin-it.se/#clojure/persistent-data-structures

Skriv sedan ett styrprogram som skapar en beständig array och sedan utför ovanstående operationer på den utifrån följande kommandon som läses från standard input:

get i Skriv ut värdet på index i på standard output på en egen rad. Om inget värde tilldelats ska 0 skrivas ut. Det ska vara ett mellanslag mellan get och indexet.
set i value Sätt värdet på index i till value. Det ska vara ett mellanslag mellan set och i och mellan i och value.
unset Backa tillbaka till läget en set-operation tidigare. Om ingen set-operation gjorts händer inget.

Exempel

Inmatningen: ska ge utskriften:
set 3 17
set 3 4711
get 3
set 3 1000
unset
get 3
unset
get 3
4711
4711
17

Parprogrammering

För att få labbleveranspoäng på denna labb måste ni (förutom att redovisa den senast ovanstående datum) genomföra den i tvåpersonsgrupper som arbetar enligt den agila programutvecklingstekniken parprogrammering. Läs här om parprogrammering.

Testning

Ni ska skriva ett par egna testfall för att testa ett program. När programmet passerar alla era egna testfall ska ni skicka det till Kattis för automatisk testning av funktionalitet, tidskomplexitet och minneskomplexitet.

Gå in i Kattis och registrera er på kursen adk25 i Kattis. Lägg in er labbgrupp i adk25, för då kommer ni inte råka ut att Kattis varnar för plagiat om båda två skickar in liknande lösningar. Från och med 5 september planeras problemet Beständig array att vara tillgängligt i Kattis. Läs gärna Kattis instruktioner för hur man skickar in sin lösning och Kattis hjälptexter.

Kattisproblemet Beständig array har tre publika testfall som också finns tillgängliga på /afs/kth.se/misc/info/kurser/DD2350/adk25/labb1/

Vid labbpassen och redovisningen

Labbpassen genomförs både i sal (se schemat) och på distans med hjälp av Zoom. Varje labbgrupp som vill delta i labbpasset i Zoom skapar ett eget Zoomrum att arbeta i under labbpasset. I kursen används (för både sal och Zoom) kön ADK i kösystemet Stay a while på queue.csc.kth.se för att hålla reda på hjälp- och redovisningskön vid hjälplabbpassen (tvåtimmarspassen, som huvudsakligen är till för hjälp men där redovisningar också tas emot). Skriv i rutan Location in länken till den Zoomsession som ni arbetar i (för Zoomlabb) och i kommentarsrutan vilken labb det gäller. Ange om ni vill redovisa eller få hjälp. Er labblösning ska redovisas för en labbhandledare vid något av kursens schemalagda labbpass. 

Vid redovisningslabbpassen (fyratimmarspassen, som huvudsakligen är till för redovisningar men då hjälp också ges) bokas redovisningstider med systemet Remores, men Stay-a-while-kön används för den som vill ha hjälp, tala om att man är klar med en komplettering eller berätta var man sitter/vilket Zoomrum man är i om det inte framgår av bokningslistan.

Länk till bokningslistor för labbredovisning 12 september publiceras här ett dygn före passets start.

Det finns tillräckligt med tider för alla som vill redovisa. Läs instruktionerna noga innan ni bokar er redovisningstid. Avboka den bokade tiden om ni inte är redo för redovisning.

Boka inte in er för redovisning för en assistent som ni känner väl, då blir det jäv.

Den som vill ha hjälp använder Stay A While på samma sätt som vid hjälppassen. 

Innan ni redovisar, gå igenom punktlistan med kraven på lösningen ovan och kontrollera att ert program uppfyller alla krav. Förbered själva redovisningen och ha program, testfall och skisser redo. Ni kommer då att få redovisa följande (med delad skärm om det är en Zoomredovisning):

  • Reflektera över er erfarenhet från parprogrammeringen vid denna labb (krävs endast för labbleveranspoäng).
  • Visa en uppsättning testfall som ni har tagit fram för att kolla att programmet gör rätt. Ni ska också kunna motivera varför ni valt just dessa testfall.
  • Visa att er lösning accepterats av Kattis.
  • Visa och förklara hur er lösning fungerar.
  • Visa programkoden och vara beredd att svara på frågor om den.

Båda studenterna i labbgruppen ska kunna redogöra för hela programmen (vilket blir en naturlig följd av att ni parprogrammerat).

1757689200 09/12/2025 05:00pm
Inkludera en beskrivning
Ytterligare kommentarer:
Maxresultat för gradering till > poäng
Inkludera en bedömningstitel

Matris

Hitta matris
Inkludera en titel
Hitta en matris
Titel
Du har redan bedömt studenter med den här matrisen. Större ändringar kan påverka resultaten för deras uppgifter.
 
 
 
 
 
 
 
     
Det går inte att ändra en matris efter att du börjat använda den.  
Titel
Kriterier Bedömningar Poäng
Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
tröskel: 5 poäng
Redigera beskrivning av kriterium Ta bort kriterium rad
5 till >0 poäng Full poäng blank
0 till >0 poäng Inga poäng blank_2
Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
poäng
  / 5 poäng
--
Ytterligare kommentarer
Poängsumma: 5 av 5