Mästarprov i Paradigm
- Inlämningsdatum 8 mar 2024 av 18:00
- Poäng 1
- Lämnar in en filuppladdning
Mästarprovet ska lösas individuellt och redovisas både skriftligt och muntligt. Inget samarbete är tillåtet, se vidare hederskodexen. Du ska alltså inte diskutera lösningar med någon annan fram till dess att alla muntliga redovisningar är avklarade. Inlämningarna plagiatgranskas. Det är inte tillåtet att använda verktyg baserade på AI/maskininlärning i arbetet med lösningarna. Exempel på förbjudna verktyg är ChatGPT, Github Copilot och Google Gemini.
Skriftliga lösningar ska lämnas in i Canvas.
Det bästa formatet för inlämningar är litterär programmering (literate programming) i en stil som liknar Physically Based Rendering. Bokens tredje utgåva finns gratis på nätet här. Skriv i så fall koden och texten som en akademisk uppsats och illustrera elegant och begripligt. Använd till exempel noweb.Lämna in resultatet som pdf.
Det näst bästa formatet (och fortfarande kanonbra) är att använda LaTeX för att skapa texten. De flesta som använder LaTeX gör det via ett webbgränssnitt som till exempel Overleaf. Om du bygger lokalt, tänk på att använda pdflatex så att resultatet blir en pdf-fil. Assistenterna ska inte behöva bygga LaTeXfiler själva och framför allt inte installera externa bibliotek.
Det tredje bästa är att använda Markdown som är enklare än LaTeX och ger nästan lika bra resultat.
Resterande: Om ni använder Microsoft Word eller liknande - tänk på att spara som pdf så att alla kan läsa texten som det är tänkt utan att ha Word installerat.
Skicka inte in nedpackade arkivfiler utan använd Ctrl-klick för att lägga till var och en av filerna i inlämningen.
Krav på kod:
Skriv ditt namn och KTH-mailadress överst på framsidan av varje pdf, markdownfil och/eller kodfil i lösningarna.
För att en uppgift ska godkännas ska du kunna förklara och motivera dina implementationer och vilka skillnader du gör på olika paradigm.
Krav på text:
Dokumentera (1) din lösningsprocess, (2) dina antaganden utöver det som står i uppgiften och (3) dina källor.
Läs på dina lösningar inför den individuella muntliga redovisningen som kommer att ske kort efter deadline i Zoom, eller på plats för någon i lärarlaget. Tidsbokningen kommer att komma upp nära uppgiftens deadline och det kommer att anslås på Canvas när de har kommit upp. Den muntliga redovisningen tar 10 minuter för dig, men de som bedömer dig har 5 minuters paus mellan varje par av redovisningar.
Läs uppgifterna mycket noga så att du inte råkar basera dina lösningar på en missuppfattning. Fråga en lärare på kursen om någon formulering är oklar.
Generella regler för mästarprov såsom vad som krävs för godkänt finns i kurs-PM. Tänk på att mästarprovet bedöms efter sin sämst lösta uppgift så överarbeta inte en uppgift förräns alla är OK.
Som exempel på hur kod-delen av en inlämningsuppgift kan se ut, se facit och rättningsmallar från Tentaarkivet i DD1361, till exempel 2017-09-18. Det finns också lösningsförslag på gamla mästarprov. Titta under uppgifter i vänstermarginalen och längst ner finns en länk till ett Gitubrepo. Som exempel på hur en teorifråga kan besvaras, se facit och rättningsmallar från tentaarkivet i DD1362 till exempel juni 2021.
Mästarproven behöver redovisas både skriftligt och muntligt. Om du har lämnat in den skriftliga biten i tid så behöver du för att få godkänt även boka in dig på en muntlig redovisning. Muntliga redovisningstider kommer att anslås på Canvas i nära anslutning till deadline.
Lycka till!
1. Paradigm och paradigmskifte.
I den här kursen har vi studerat olika programmeringsparadigm. Ett paradigm är en grundläggande filosofi eller syn på hur program bör utformas och exekveras. I denna fråga fokuserar vi på imperativa språk och paradigmskiftet från assembler till högnivåspråk. I den här kursen skiljer vi på den imperativa familjen (som är ett samlingsnamn som innefattar bland andra det imperativa, strukturerade, procedurella och objektorienterade paradigmet) och specifika imperativa språk som assembler och assemblerliknande språk. När övergången skedde från assembler och assemblerliknande språk till högnivåspråk i det strukturerade paradigmet (exempelspråk: Algol, ADA), vad var de viktigaste skillnaderna specifikt för flödeskontroll?
2. Visa att du har förstått beräkningsmodeller.
Jämför Turingmaskinen med Von Neumannmaskinen. Redogör för viktiga skillnader och likheter mellan modellerna och deras antaganden. För godkänt behöver du ha minst 5 likheter eller skillnader mellan modellerna. Dessa behöver innefatta minst 2 likheter och minst 2 skillnader.
3. Balanserade parentesuttryck.
a) Skriv en funktion i det procedurella paradigmet för att kontrollera att en sträng som endast innehåller vänsterparenteser och högerparenteser är balanserad. Python eller Java går bra för denna uppgift, men din lösning på a) får inte använda rekursion.
Exempelkörningar:
>>> balance("((()))")
True
>>> balance("((())(")
False
>>> balance("")
True
>>> balance("(()()()())")
True
>>>
b) Implementera samma funktionalitet i det funktionella paradigmet (Haskell eller valfritt funktionellt språk går bra). Din lösning behöver vara rekursiv och får inte använda högre ordningens funktioner.
c) Redogör för skillnaden mellan de båda paradigmen i implementationen.
4. Redogör för likheterna och skillanderna mellan dessa två paradigm i den deklarativa familjen:
Det funktionella paradigmet (exempelspråk Haskell, Lisp) och det Logiska paradigmet (exempelspråk Prolog). Nämn minst 3 likheter eller skillnader varav minst en likhet och minst en skillnad.