Gäller som tentamen för:
DT2011 Datateknik B, Programmeringsmetodik, provkod 0100
DT2006 Datateknik B, Tillämpad datavetenskap B, provkod 0110
Ansvarig lärare är Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), telefon 070-73 47 013.
Tillägg: Lösningsförslag till uppgift 1 och 2
Trafiken till Google ökar för varje år, och nu börjar det bli svårt för de anställda att hinna med. Dessutom har pärmarna blivit ganska slitna.
Därför vill Google nu bygga en datoriserad sökmotor.
Det man vill bygga är ett program som läser in en fil med sökord och webbadresser, till exempel dessa:
bil http://en.wiktionary.org/wiki/bil konceptteater http://www.unt.se/kultur/essa/klassiker-och-konceptteater-211678.aspx svampskog http://lt.se/asikter/debatt/1.1338633-odelagd-svampskog bil http://acronyms.thefreedictionary.com/BIL |
Varje rad innehåller ett sökord, ett mellanslag, och en adress till en webbsida. Inga sökord är längre än 100 tecken. Inga webbadresser är längre än 1000 tecken. Samma sökterm kan förekomma på många webbsidor. På riktigt kan filen ha många miljoner rader.
När filen med sökord och webbadresser är inläst, ska man kunna använda programmet för att slå upp ord och få reda på vilka webbsidor de finns på.
Ett körexempel som använder exempelfilen ovan, med användarens inmatning i rött:
Ange indatafilens namn: exempel4.txt Läser filen... Klar. 3 unika sökord. 4 webbadresser. Ange ett ord: svampskog Hittade 1 webbsida. http://lt.se/asikter/debatt/1.1338633-odelagd-svampskog Ange ett ord: bild Hittade 0 webbsidor. Ange ett ord: bil Hittade 2 webbsidor. http://en.wiktionary.org/wiki/bil http://acronyms.thefreedictionary.com/BIL Ange ett ord: |
Programmet måste kunna hantera miljoner sökord och webbadresser. Det finns inga krav på felhantering.
Använd en array eller en länkad lista. (Eller flera.) Det ska vara datastrukturer gjorda specifikt för detta ändamål, så använd inte någon generell datatyp som till exempel std::list. Man får, men behöver inte, dela upp programmet i flera filer.
Exempelfiler som man kan provköra med:
Lös först uppgift 1, och skicka in den. Därefter kan du lösa, och skicka in, den här uppgiften. Spara också själv en kopia, ifall det blir något fel med posten! Börja inte med uppgift 3 innan du är klar med denna, och har skickat in den. |
Programmet i uppgift 1 behöver bli snabbare. Gör därför en ny version av programmet, men med snabbare datastrukturer. Vi vill ha en enorm förbättring av prestanda.
Datastrukturerna som används ska vara skapade specifikt för detta ändamål, så använd inte någon generell datatyp. Man får, men behöver inte, dela upp programmet i flera filer.
Lös först uppgift 1 och 2, och skicka in dem. Därefter kan du lösa, och skicka in, den här uppgiften. Spara också själv en kopia, ifall det blir något fel med posten! |
Gör om uppgift 2 med hjälp av en generell datatyp.
Skapa först den generella datatypen (till exempel hashtabellen GenericHashTable). Välj själv metod för att skapa en generell datatyp. Dela upp på lämpliga filer. Det är inte förbjudet att inspireras av existerande lösningar, men du ska lämna in en som du gjort själv.
Använd den därefter i programmet.
Den här sista-uppgiften för betyget 5 kanske kan ta lite längre tid att lösa. Om den inte är helt klar när tentatiden tar slut, är det därför tillåtet att skicka in en preliminär lösning, som man sedan kan komplettera. Ange tydligt att det är en preliminär lösning. Kompletteringen ska skickas in senast en vecka efter tentan. |