Göm menyn

TDDD86 Datastrukturer, algoritmer och programmeringsparadigm

Laborationer


Laborationer

Laborationerna ska gennomföras i grupper av max två personer. De bör genomföras i par. Det är inte tillåtet att ge eller få hjälp i en laboration (om det inte tillåts explicit i kursen, e.g., att studenter inom samma par ska så klart samarbeta, eller att man ska använda STL biblioteket). Se även IDAs policy och regler för datorlaborationer. Fusk är ett försök att vilseleda. E.g., att lämna in kod och försöka att få det att se ut som att man har skrivit den själv när man har tagit den från en annan person, en hemsida eller ett AI-tjänst. Det är inte tillåtet att göra egna lösningar tillgängliga för andra (e.g., offentliga via GitHub), att kopiera kod från andra studenter/grupper/personer, från nätet (e.g., Stackoverflow eller andra hemsidor) eller verktyg (E.g., ChatGPT eller GitHubs copilot). Detta gäller även om ändringar gjordes.

Laborationsuppgifter

Laborationsuppgifterna är åtta till antalet och finns beskrivna nedan.

Anmälan via Webreg:

  • Obligatoriska labbar (LAB1): Laborationerna bör genomföras i par. Anmälan via denna länk. Deadline: 5:a september.
  • Extra uppgifter och labbar: Samma par som (LAB1) eller individuellt. Anmälan via denna länk. Deadline: senaste 1:a december, men innan demonstrationen.
  • Bonusproblem. Individuella. Anmälan via denna länk. Deadline 1:a january.

Allmänna anvisningar

Labbarna är avsedda att genomföras i IDE:n Qt Creator men det går bra att använda en text editor (vim/emacs/annat) i kombination med qmake (mer information).

Samtliga i labbgruppen skall bidra till lösningen av samtliga laborationer och förväntas också kunna motivera och förklara programkoden. För att bli godkänd krävs inte bara ett program som förefaller fungera på några testexempel utan koden skall vara rimligt effektiv och läsbar. Särskilt vill vi att ni beaktar vår stilguide.

Redovisning av labbar

Redovisning av labbar sker i två steg:

  • (i) Demonstration av labben för assistent under ett labbtillfälle.
  • (ii) Inlämning av kod till assistent enligt nedan.

Laborationer lämnas in via LiUs Gitlab (inte IDAs Gitlab!):

  • Använd era LiU ID.
  • Varje laborationspar ska skapa ett projekt som heter "TDDD86-HT23". Varje labbpartner ska vara minst en developer i projektet.
  • Glöm inte att lägga till alla åtta assistenter och kursledaren som "Reporter"-medlemmar i projektet. Om en assistent har flera LiU-ID, välj anställdkontot (det med två siffror i slutet). Så t ex andma54, inte något annat.
  • Skapa en folder för varje lab ni jobbar med: e.g., TDDD86-HT23/lab1, TDDD86-HT23/lab2 eller TDDD86-HT23/El1.
  • När ni får en ok från assistenten efter en demonstration ska ni lämna in koden genom att:
    • göra en commit med git commit -m "TDDD86 Lab [nummer] redovisning" och en push
    • meddela assistenten med ett mail.
  • När laborationen är rättad får ni ett e-postmeddelande till era studentkonton.
  • Vid komplettering använd Gitlab och gör en ny commit och push.

Det är viktigt att projektet är komplett:

  • se till att alla filer som utgör en del av laborationen är med i projektet
  • använd exakt de filnamn som är angivna i laborationsuppgiften.
Använd ditt LiU mail med ett ämne som börjar med "[TDDD86] ..." varje gång du skickar ett mail till en assistent eller en lärare.

Deadline

Laborationerna 1-4 ska vara redovisade och koden inlämnat innan slutet av första perioden (dvs. senaste vid slutet av vecka 41). Om resultatet är godkänt får ni 2 bonus poäng för att få högre betyg på LAB1 (Betyg LAB1 i ladok). Resten av laborationerna skall vara redovisade senast den 12e januari. Observera att detta är en strikt deadline och att det finns möjlighet att alla studenter som vill det hinner inte demonstrera då. Därför rekommenderar vi starkt att samtliga labbar ska demonstreras innan Jul (som brukar vara vår deadline). Dessutom ska ni har lämnat in koden via Gitlab (dvs, med en commit och en push) senaste detta datumet. Det brukar bli långa köer under vecka 41 eller vid slutet av kursen. Observera att man kan demonstrera bara under de bokade labbtillfällen. Väntar inte med att bli klar och med att demonstrera dina labbar! Se även IDAs policy och regler för datorlaborationer.

Betyg - LAB1

Godkänt på de åtta laborationsuppgifterna är ett krav för betyg 3 på momentet LAB1. För att få högre betyg kan man samla poäng genom att bli klar med laborationer 1-4 ska vara redovisade och koden inlämnat innan slutet av första perioden (dvs. senaste vid slutet av vecka 41) (och inte 1-3 innan vecka 41). göra extra labbuppgifter, eller genom att lösa bonusproblem. Högre betyg ges enligt följande poängsystem:
PoängBetyg på LAB1
0 till och med 73
8 till och med 154
16 och över5

Extra laborationsuppgifter

Ett sätt att samla poäng för att få högre betyg på kursen labbmoment är att göra extra laborationsuppgifter. De extra labbuppgifterna finns dels som åtta möjliga utökningar, E1-E6 samt E8, av de befintliga labbarna och dels som två helt fristående extra labbar, EL1 (som också ha en utäkning E7) och EL2. Dessa extra labbuppgifter bör genomföras i par och redovisning går till på samma sätt som för de ordinarie labbuppgifterna. Om du vill samla poäng genom att göra extra laborationsuppgifter behöver du vara anmäld till ett särskilt moment i webreg för att vi ska kunna bokföra dina resultat. Eftersom det kan hända att två personer i samma labbgrupp inte har samma ambitionsnivå är anmälan i webreg individuell, men vi hoppas förstås att ni ska arbeta tillsammans med er laborationspartner.

Deadline för de extra labbupgifterna är samma som för de ordinarie labbarna, förutom för uppgiften E5 där poängtilldelningen avgörs genom en tävling. För att vi ska hinna förbereda tävlingen är sista inlämningsdatum för E5 satt till 1 December 2023 kl 23:59.

  • E1 (@labb2) ger 1 poäng
  • E2 (@labb2) ger 3 poäng
  • E3 (@labb3) ger 3 poäng
  • E4 (@labb3) ger 3 poäng
  • E5 (@labb3) ger 4 poäng 1:an, 3 till 2:a och 2 till 3:a.
  • E6 (@labb4) ger 2 poäng
  • EL1 ger 6 poäng
  • E7 (@EL1) ger 3 poäng
  • E8 (@labb7) ger 2 poäng
  • EL2 ger 8 poäng

Bonusproblem

Bonusproblemen i kursen är ett frivilligt moment som innefattar lösandet av skojiga, intressanta och utmanande problem relaterade till innehållet på föreläsningarna om datastrukturer och algoritmer. Syftet med bonusproblemen är att öka förståelsen för kursens innehåll genom relevanta programmeringsuppgifter. Det kommer dels finnas uppgifter relaterade till föreläsningarna och dels till kursen i stort. De senare är mer av fördjupningskaraktär. Genom att lösa uppgifterna kan man samla poäng för att få högre betyg på labbmomentet i kursen.

Uppgifterna i årets bonusproblemsomgång kommer att finnas i onlinedomaren Kattis. Om en student löser tillräckligt många bonusproblem innan utgången av 10 Januari 2023 ger det poäng enligt nedan. För att tillgodogöra sig poängen måste studenten vara registrerad på kursen i Kattis, annars ser inte kursledningen resultaten och kan inte heller göra någon plagieringskontroll av inskickade uppgifter. Registrering görs genom att klicka på registreringslänken på kursens Kattis-sida. (Man behöver vara inloggad för att registreringslänken ska synas.) Dessutom behöver studenten vara anmäld till bonusproblemsomgången. Bokföring av resultaten sköts via ett särskilt moment i webreg, så om du tänkt samla poäng genom att lösa bonusproblem behöver du anmäla dig i webreg också. Maila din assistent en länk till inlämningen när du har löst en uppgift.

  • 0-1 lösta uppgifter ger 0 poäng.
  • 2-3 lösta uppgifter ger 1 poäng.
  • 4-7 lösta uppgifter ger 2 poäng.
  • 8-11 lösta uppgiter ger 3 poäng.
  • 12-14 lösta uppgifter ger 4 poäng.
  • 15 lösta uppgifter ger 5 poäng.

Bonusproblemen är individuella uppgifter. Som vanligt går det bra att föra informella diskussioner kring uppgifter i kursen, men i det här fallet måste varje student själv komma på och skriva sin lösning till problemen. Redovisning sker, efter att uppgiften fått "Accepted" i Kattis, genom att skicka ett mejl till respektive assistent med en länk till det submission-id i Kattis som blivit godkänt. Mejlet måste skickas från studentens @student.liu.se-adress.

Bra KATTIS-länkar

Laborationsuppgifter

Labb 1

Uppgiftsbeskrivning
Given kod
FAQ

Labb 2

Uppgiftsbeskrivning
Given kod
FAQ

Labb 3

Uppgiftsbeskrivning
Given kod
FAQ
Alternativa heuristiker
Glöm inte att använda valgrind (från terminalen eller från qtcreator) för att kolla upp om det är minnes problem i de filer DU HAR ÄNDRAT, inte i de övriga filer. I Valgrinds menyn välj bort "external errors". Du behöver INTE bry dig om rapporterade problem i de andra filer. Exempel på problem som ger en kompletering garbage-valgrind.pdf

Labb 4
Labb 5

Uppgiftsbeskrivning
Given kod

Labb 6

Uppgiftsbeskrivning
Given kod
Glöm inte att testa först din implementation av MyVector och sedan den av MyPriorityQueue:

  • MyVector: ersätt testen "main.c" med "test-harness-myvector.cpp" i konfigurationsfilen "fisher.pro". Filen finns med i mappen för labb6. Din implementation av MyVector ska klara alla tester (se till att ersätta 0 med 1 i början av test-harness-myvector.cpp för att kunna köra testerna). När du har klarat testerna, använd valgrind för att säkerställa att din kod resultera inte i memory-leakage.
  • MyPriorityQueue: ersätt texten "main.c" (och "test-harness-myvector.cpp") med "test-harness-myprio.cpp" i konfigurationsfilen "fisher.pro". Filen finns också med i mappen för labb6. Din implementation av MyPriorityQueue ska klara alla tester (se till ersätta 0 med 1 i början av "test-harness-myprio.cpp" för att kunna köra testerna). Du behöver inte använda valgrind eftersom MyPriorityQueue allokerar inte explicit i heapen och bygger istället på MyVector.

Labb 7

Uppgiftsbeskrivning
Given kod
FAQ

Labb 8

Uppgiftsbeskrivning
Given kod
Förväntat utdata
FAQ


Extra laborationsuppgifter

Extra labb 1

Uppgiftsbeskrivning
Given kod

Extra labb 2

Uppgiftsbeskrivning
Given kod



Sidansvarig: Ahmed Rezine
Senast uppdaterad: 2023-11-21