UMEÅ UNIVERSITET Datavetenskap 030219 PRAKTISKT DELPROV Objektorienterad programmering, Java, 5p TDBA63 Datum : 030205 Tid : 9 13 Hjälpmedel : Allt. Kommunikation med andra personer (direkt eller indirekt) är dock inte tillåten, som t ex via mail, mobiltelefon, gemensamma kataloger etc. Antal uppgifter : 4 Totalpoäng : 34 (halva poängtalet TP+PP krävs normalt för godkänt) Kryssa för de uppgifter du lämnar in. Tankegången skall vara lätt att följa. Alla antaganden som inte är uppenbara skall redovisas. Namn, personnummer, användarnamn och sökvägen till filen/filerna skall finnas på all källkod. Källkod skrivs ut i ett ickeproportionellt typsnitt (t.ex. courier). Tips! Försök lösa alla uppgifter! Observera att uppgifterna inte är ordnade efter svårighetsgrad. Det är ditt ansvar att övertyga om att du besitter den kunskap som efterfrågas. Uppgifter kan vara felformulerade, fråga om du är osäker eller tycker att något verkar konstigt. Redovisa dina resonemang så är det lättare att bortse från skrivfel. Det är viktigt att du löser den givna uppgiften! OBS! Kontrollera att din dator fungerar innan du börjar på allvar. Lycka till! UMEÅ UNIVERSITET 901 87 UMEÅ Johan Eliasson Tel.: 070-2378695 e-mail: johane@cs.umu.se
Innan du börjar skall du göra följande: Logga in på Unix-systemet (peppar) med hjälp av putty Gå till din katalog edu/java *: cd edu/java Skapa en ny katalog mkdir pp030219 Skydda katalogen chmod 700 pp030219 I katalogen pp030219 sparar du sedan alla filer som du skriver under denna tenta *) Har du inte dessa kataloger så skapa dem: mkdir edu cd edu mkdir java Efter provet, tidigast klockan 13.00 Logga in på Unix-systemet (peppar) med hjälp av putty Gå till din katalog edu/java: cd edu/java Ändra filskyddet chmod R 705 pp030219 Provet är uppdelat i två delar Del 1 (uppgift 1-3): Här skall alla uppgifter göras Del 2 (uppgift 4 & 5): Här skall ni göra en av de två uppgifterna Totalt skall ni alltså göra fyra uppgifter tre från del ett och en från del två Regler för det praktiska provet Detta är en del av examinationen och skall alltså ske under tentamensliknande förhållanden. Examinationen är individuell och betygsgrundande. Detta får följande konsekvenser : o Man är personligt ansvarig för de lösningar som lämnas in o Om man hittar lösningar eller delar av lösningar på nätet eller i litteraturen bör detta tydligt anges. Du är fortfarande skyldig att själv vara fullständigt insatt i den lösning du redovisar och på uppmaning ska du kunna svara för innehåll och funktion i hela eller delar av lösningen. o Självklart får man inte söka eller hämta kod från någon av de övriga tentanderna, detta betraktas som fusk och handläggs som sådant Några riktlinjer för hur lösningarna bedöms : o Koden skall följa god programmeringsmetodik, vilket t.ex. innebär konsekvent indenterad och lämpligt kommenterad källkod. o Lösningen behöver inte gå att kompilera för att ge full poäng, så låt inte troliga syntaxfel ta för mycket tid i anspråk om du känner dig övertygad om att du löst det givna problemet. o Det räcker därför inte att en lösning fungerar för att ge full poäng, även här måste man på ett rimligt sätt underordna sig kravet på god programmeringsmetodik 2
Del 1 Uppgift 1. (8 poäng) Skriv en metod substitutestring. Funktionen skall ta tre stycken strängar och i den första av dessa tre leta efter den andra. Alla förekomster av denna sträng skall bytas ut mot den tredje strängen i resultatet. Förekommer inte den andra strängen som en delsträng i den första ska funktionen bara returnera den första utan några förändringar. Exempel: replacesubstring( Jag kan svaret. Jag är bra, Jag, Du ) Resultat: Du kan svaret. Du är bra replacesubstring( Jag kan inte detta, inte, ) Resultat: Jag kan detta Uppgift 2. (8 poäng) I denna uppgift så ska du givet en textfil med heltal (ett tal per rad). Din uppgift är att skriva ett program som läser in talen och beräknar medelvärdet av dem. Ett exempel på en fil finns på websidan för det praktiska provet (om ni inte vill skriva ihop en egen) Uppgift 3. (8 poäng) I denna uppgift ska du skriva en enkel klass för att hantera rationella tal. Rationella tal är tal som kan skrivas på formen p/q där p och q är heltal. Klassen skall ha metoder för att ändra värdet på täljaren (p), ändra värdet på nämnaren (q) samt en metod för att omvandla det till ett värde av typen double. Förutom dessa metoder ska klassen implementera interfacet java.lang.comparable (se API beskrivningen för beskrivning av detta interface) Del 2 (Ni får välja att göra en (max) av uppgifterna i denna del) Uppgift 4. (10 poäng) Konsum på Ålidhem behöver hjälp. De skulle behöva införskaffa ett automatiskt system som hanterar växelpengarna som kunderna ska få tillbaka (liknande det som ICA har). I denna uppgift så ska du implementera en grund till detta system. Systemet skall ju hantera pengar så ni kommer att behöva implementera enkla klasser för att hantera dessa. För att underlätta uppgiften lite så behöver ni i detta skede bara bry er om följande valörer på sedlar 100 och 20; respektive mynt 5 och 1 kr. Mynt/sedlar av andra valörer ska inte få förekomma. 3
Krav på Systemet: Det kan lagra max 20 st. sedlar och max 20 st. mynt vid varje tillfälle. Man skall kunna lägga till pengar i systemet (givetvis endast i de godkända valörerna). Givetvis ska man också kunna plocka ut pengar ur systemet. För att det ska fungera så måste det givetvis finnas en/ett sedel/mynt av motsvarande valör instoppad (annars skall ett felmeddelande ges till användaren). Skriv också en enkel klass som testar/demonstrerar hur ditt system fungerar genom att sätta in och ta ut lite pengar av olika valörer. För full poäng så krävs att ni har gjort en vettig klassuppdelning utifrån de principer som vi gått igenom på kursen. Samt att ni konstruerat era klasser (metoder osv.) på ett sådant sätt så att de blir lätta att använda t.ex. då man i ett senare skede skulle vilja vidareutveckla systemet. Uppgift 5 (10 poäng) I denna uppgift ska ni skriva ihop klasser som tillsammans ska kunna bli en sifferdisplay. Sifferdisplayen ska kunna visa alla siffror från 0 till 999. Till er hjälp så ni en klass Display som man kan använda för att rita upp siffrorna. Denna behöver också klasserna Rectangle, Figure och DrawingPaper för att fungera. Alla dessa klasser finns på websidan för det praktiska provet. De klasser ni ska skriva är DigitDisplay Denna klass skall representera en enskild siffra i er sifferdisplay. Lämpligen ärver klassen den givna Display. Förutom de metoder som finns i Display skall det enkelt genom er klass gå att visa upp en godtyckligsiffra mellan 0-9 NumberDisplay I denna klass ska ni skapa er taldisplay. Den ska ha minst en metod som visar ett godtyckligt tal mellan 0 och 999. Anropar man denna metod med ett tal utanför detta intervall skall ett undantag kastas. Nedan har ni en bild av hur de olika siffrorna ser ut (Ett objekt av typen NumberDisplay skall alltså bestå av tre siffror som de nedan) 4
5