Göm menyn

TDDE71 Programmering och datastrukturer

Pluggtips


Fallgropar

På duggan ska du visa att du själv, självständigt, kan använda det som ingår i kursen för att komma fram till lösningen på uppgifterna. Det är lätt att invagga sig i en känsla av trygghet inför duggan eftersom:

  1. Jag tycker jag förstod allt jag kom på själv och allt min kompis kom på under arbetet med laborationerna.
  2. Jag tycker jag förstår allt när jag läser igenom föreläsningsbilder, anteckningar och lösningsförslag.
  3. Jag får ha med mig bok till duggan, jag kan slå upp det jag behöver.
  4. Jag får ha med mig anteckningar till duggan, jag kan ha med de lösningar jag behöver.
  5. Jag kan ställa frågor under duggan, jag får hjälp lösa allt jag fastnar på.
  6. Jag har tillgång till cppreference, jag kan hitta alla exempel jag behöver.

Men:

  1. Kan du självständigt återkalla eller resonera dig fram till det din kompis bidrog med, och kan du självständigt översätta det till programkod?
  2. Det är skillnad på att förstå en färdig lösning och att komma fram till lösningen, uppgiften på dugga är "komma fram till", inte "förklara hur det funkar".
  3. Att slå upp i en bok tar tid, om du inte är väl förtrogen med boken och var du hittar information om olika koncept i boken, så hinner du inte använda den.
  4. Duggan gör stickprov på ett smalt urval av innehållet i labserien, du behöver ha precis de saker du har svårt för i anteckningarna, allt får inte plats.
  5. Vi svarar bara på frågor som förtydligar uppgiften, inte hur du ska lösa den.
  6. Endast referensdelen är tillgänglig, informationen under "language" kommer inte vara tillgänglig. Referensdelen är företrädesvis användbar att slå upp funktioner och parametrar till saker i "std::" (vector, string, iostream, sstream). Är du inte förtrogen med hur du hittar vad så är det av begränsad nytta.

Öva som du examineras

Att öva genom att läsa uppgiften och sedan läsa igenom lösningen har begränsat värde. Det är inte det du kommer att göra på duggan. På duggan gäller det att komma fram till lösningen. Då är det så klart en fördel att ha sett en lösning på just det, eller snarlikt, problem. Men det är av ännu mer värde om du kan identifiera vilka metoder du och din kompis använde för att komma vidare när ni körde fast på något, vilka metoder och strategier ni har när ni kommer fram till lösning på problem. Metoder kan du använda på vilket problem som helst. Minne kan du bara använda om du får exakt rätt fråga/uppgift.

Att öva genom att försätta dig i samma situation (så nära du kan komma) som på dugga är av mer värde. Om du med enbart uppgiften, blankt papper, penna, emacs och kompilator övar på att komma fram till lösningen kan du få insikt i vad du tycker är lätt att komma fram till och vad du tycker är svårt att komma fram till. Då kan du öva på det som är svårt. Du kan identifiera vilka metoder och strategier du använder du för att komma vidare eller debugga. Du får mer erfarenhet av arbetsprocessen, språkets syntax och kompileringsfel du kan råka ut för. Pluggar du tillsammans med någon kan ni utbyta erfarenheter av strategier ni använder för att komma framåt eller debugga, ni kan själva göra varianter på uppgifter och fundera på om er lösning är korrekt, och ni kan tillsammans försöka förstå vad som ligger bakom de problem ni råkar ut för. Valda delar av det du behöver kolla upp (som har svårt sätta sig i minnet), det du uppfattar som svårt, och det som du fastnar på kan du även se till få med på anteckningsbladet.

Ingående och prioriterade ämnen

I duggan ingår allt som vi berört på föreläsning och lab i kursen. I varje lab hittar du en lista på koncept som ingår. Detta är det vi väntar du kan använda för att komma fram till lösningar. På duggan kommer vi göra stickprov på ett smalt urval av detta. Allt kan dyka upp, men varje uppgift kommer att fokusera på en avgränsad mängd koncept, och ett ännu smalare urval har hög sannolikhet att dyka upp:

  1. Uppgift 1: Dynamiskt minne (new/delete), minnesläcka, rita och förstå ritad pekarstruktur, pekare och pekarmanipulation, speciella medlemsfunktioner
  2. Uppgift 2: Arv, polymorfi, klasskonstruktion, rita och tolka UML klassdiagram, klassrelationer, delegerande konstruktor, protected, pure virtual, abstrakt klass, slicing, virual destruktor, krav för att polymorfi ska uppstå
  3. Uppgift 3: Klasskonstruktion, datamedlemmar, datamedlemsinitieringslista, skydd med public/private/const, funktioner/parametrar/argument, medlemsfunktioner, medlemsoperator, fri operator, komposition/aggregation

Exempel på tänkbara uppgifter (att använda för att själv hitta på alternativa uppgifter, eller identifiera relevanta uppgifter i andra tentor):

  1. Uppgift 1: Givet ett exempel på länkad struktur (lista/träd): skriv kod som allokerar, kopierar eller avallokerar hela strukturen, skriv kod som gör insättning, borttagning eller annan beskriven förändring av strukturen med enbart pekaroperationer. Ofta avgränsat till just exakt given struktur/situation, inte generell lösning.
  2. Uppgift 2: Givet UML klassdiagram och/eller textuell beskrivning av klasshierarki: implementera enligt diagram och beskrivning och visa hur det används. Ofta avgränsat till 2-3 små härledda klasser med basklass.
  3. Uppgift 3: Givet textuell beskrivning eller klassdiagram: kom fram till en klass och hjälpklass och implementera enligt beskrivning, givna krav och goda konventioner.

Bok- och lästtips generellt

Två rekommenderade böcker anges i kursplanen:

  • Bjarne Stroustrup, (2013) The C++ Programming Language, 4/E Addison-Wesley
  • Stanley B. Lippman, Josée Lajoie, Barbara E. Moo, (2012) C++ Primer, 5/E Addison-Wesley

Utgå från listan på koncept i laborationsinstruktioner och dugga för att via bokens index och innehållsförteckning hitta relevanta kapitel att läsa. Samma metod kan användas om ni föredrar en annan bok, revision eller alternativ källa. OBS! Välj alternativ litteratur som behandlar åtminstone C++-11 eller helst C++-17 (dvs den C++-standard som publicerades 2011 resp. 2017).

Är du generellt intresserad kodkvalité, tekniker och strategier för att göra välkonstruerade program och lättläst kod, kika på Code Complete. Den av mest intresse i samband med projektet:

  • McConnell, Code Complete

Fler uppgifter utanför kursen

Kursen TDIU20 har tentor där det går att hitta uppgifter liknande de som kan dyka upp på dugga. I TDIU20-tentor:

  1. är uppgift 1-2 generellt lite mindre och med lite mer fokus på felkontroll än TDDE71 uppgift 3, men absolut uppgifter vi förväntar ni löser snabbt.
  2. kan uppgift 3 jämföras med TDDE71 uppgift 1.
  3. kan uppgift 4 jämföras med TDDE71 uppgift 2.
  4. är uppgift 5 lite större och besvärligare än TDDE71 uppgift 3, men absolut uppgifter vi förväntar ni kan lösa med aningen mer tid.
  5. är uppgift 6 en lite större uppgift grundad i ett mer avancerat koncept och kan oftast inte jämföras med något i TDDE71 dugga. Dock dock ingår allt som behövs för att kunna lösa dessa i TDDE71.

De senare TDIU20-uppgifterna är lite mer representativa i nivå än de tidigare.


Sidansvarig: Eric Ekström
Senast uppdaterad: 2025-10-14