TDIU01 / 725G67 2011-12-16 08-13 Inloggning Börja med att logga in i tentasystemet genom att logga in med användare examx som har lösenordet kluring1. Verifiera att dina uppgifter stämmer och förbered din tentaplats. Som vanligt är det inte tillåtet att ha väskor eller jackor vid sin skrivplats och mobiltelefoner ska ligga avstängda i jacka eller väska. Ta fram ditt LiU-kort och invänta tentavakt för att få ett engångslösenord. När du loggat in är det viktigt att du startar tentaklienten. Gör detta genom att högerklicka på bakgrunden och välja tentaklient i den meny som kommer fram. I denna meny har du även genvägar till terminal och emacs. Hjälpmedel Följande får tas med på tentan: En bok om c++ (t.ex. c++ direkt). För boken gäller följande regler: Kommentarer/noteringar som direkt rör text och exempel på sidan i fråga får finnas i sidmarginalen. Egna sidflikar för att enkelt kunna hitta t.ex. de olika kapitlen är tillåtna. Inga extra ark eller lappar, lösa eller fastsatta, får finnas. Tomma sidor, insidan av pärmarna, försättsblad, etc., får inte innehålla programkod. Maximalt tio (10) sidor med egna, handskrivna anteckningar Penna för att anteckna under tentan. Ni kommer förses med blanka papper Följande får INTE tas med: Elektroniska hjälpmedel såsom miniräknare och mobiltelefon Utloggning När du är nöjd med ditt betyg (som står i tentaklienten) kan du avsluta och logga ut. Klicka på knappen märkt exit i nedre menyn. Klicka sedan på ok följt av knappen avsluta tentan. Observera att du när du gjort detta inte kan logga in igen.
Tentaregler Tentan består av tre uppgifter. Uppgift ett är något mer omfattande än övriga och måste lösas för att få godkänt betyg. På en uppgift kan man få betygen G (godkänd), VG (väl godkänd), K (komplettering) eller U (underkänd). En lösning med betyg G eller K kan kompletteras till högre betyg. Vid betygsättning på tentan ger en uppgift med betyg G ett poäng och VG ger två poäng. För betyg 3 på tentan måste studenten fått sammanlagt tre skrivningspoäng. För betyg 4 eller 5 krävs dels att uppgift ett löses med betyg VG och dels 4 respektive 5 poäng. Dessutom krävs det att sista lösta uppgiften är inskickad senast inom fyra timmar (12.00). Denna tidsgräns modifieras med intjänad bonustid från labserien. Frågor om uppgifter Frågor om tentan i stort eller uppgiftspecifika frågor ska ställas via tentaklienten. Detta för att vi ska ha en historik av konversationen samt för att vi ska kunna ge samma hjälp till olika studenter. Systemfrågor Om du har systemfrågor som t.ex. problem med tentaklienten eller terminalen räcker du upp handen så kommer en assistent och hjälper till.
Uppgift 1 Inom statistiken används ofta programmering för att analysera och visualisera data. I denna uppgift ska du räkna förekomsten av siffrorna 0-9 i en fil given av användaren på kommandoraden. När du gjort detta ska resultatet visualiseras i ett liggande stapeldiagram enligt körexemplet nedan. Om användaren inte ger ett filnamn på kommandoraden ska programmet skriva ut en feltext och avslutas och om en viss siffra inte förekommer ska ingen stapel skrivas ut för denna. Körexempel 1: zaza1 <1> bargraph given_files/example_1.1 --- 0 13 --- -- 1 62 -- ------ 2 16 ------ --------- 3 9 --------- -- 4 12 -- ------- 6 17 ------- - 7 11-8 10 9 10 TIPS: En vektor kan vara bra att ha.
Uppgift 2 Binära träd används väldigt ofta inom programmering då det är en väldigt effektiv datastruktur. Ett binärt sökträd fungerar så att en nod med värde k har ett delträd till vänster med värden som är mindre och ett delträd till höger med värden som är större än k (se figur 1). Figur 1: Binärt sökträd På filen given files/tree.h finns en klass för att representera ett binärt sökträd definierad. På filen given files/tree.cc finns de deklarerade metoderna implementerade och på filen given files/tree main.cc finns ett kort testprogram för att testa trädklassen. Din uppgift är att skapa metoden remove root som ska kunna ta bort roten i trädet. Kopiera de tre filerna till din hemkatalog och modifiera dessa. Krav: Borttagningen ska endast ske med pekarhantering, d.v.s. du får endast ändra på pekarvariabler. Du får heller inte allokera någon ny nod. Krav 2: Din kod får inte ha minnesläckor. TIPS: Det är alltid bra att rita mycket när man håller på med pekare. TIPS 2: Du kommer troligen komma till ett läge då du har ett delträd för mycket. Fundera ordentligt på vart det trädet (eller roten för det trädet) bör läggas (eller vart noden skulle hamna om den sattes in i det nya trädet).
Uppgift 3 En annan väl använd datastruktur är stacken. I en stack lagras data enligt principen Last In First Out. Det betyder att när man tar ut ett data från stacken får man det värde som senast stoppades in. Din uppgift är att implementera en stack för att lagra heltal med hjälp av en vector. På filen given files/stack.cc har du ett givet testprogram som saknar tre funktioner som ska implementeras enligt följande beskrivning: push pop top Lägger ett data på stacken Tar ut och returnerar det översta värdet på stacken Returnerar det översta värdet på stacken KRAV: Överst i filen finns konstanten MAX HEIGHT definierad. Den ska beskriva hur många värden som får lagras i stacken. Det betyder att du inte får lagra fler värden än vad denna konstant specifierar.