Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt förbjuden. Böcker och anteckningssidor kan komma att granskas av tentavakt i samband med tentans start samt under tentans gång. Frågor om specifika uppgifter eller om tentan i stort ska ställas via tentasystemet. Systemfrågor kan ställas till assistent i sal. Ingen uppgift rättas efter tentatidens slut. Så länge en uppgift inte har betyget Underkänd kan den kompletteras till godkänt. Ingen kompletteringsmöjlighet ges de sista tio minuterna. Inga elektroniska hjälpmedel får medtas. Mobiltelefon ska vara avstängd och ligga i jacka eller väska. Inga ytterkläder eller väskor får förvaras vid skrivplatsen. All kod som skickas in för rättning ska kompilera och vara väl testad. Kompilerande kod, fullständig kravuppfyllnad och god stil och goda konventioner enligt god programmeringssed är krav för att en uppgift ska bedömmas Godkänd VÄND! Antal uppgifter 5 Antal sidor (exklusive denna) 5 Hjälpmedel En bok om C++ Ett A4-ark med egna anteckningar
Betygssättning Tentan innehåller fem uppgifter. För godkänt betyg krävs minst två avklarade uppgifter. För gränser för högre betyg, se i tabell 1. Tid (timmar) Antal uppgifter Betyg 3 3 5 4 4 5 4 3 4 Tabell 1: Gränser för högre betyg Bonus från labserien Bonus ges endast vid första ordinarie tentamenstillfälle och är därmed inte aktuell vid detta tillfälle. Inloggning Information Logga in på ditt normala konto med session exam system Följ menyvalen så långt det går tills du ska mata in ett engångslösenord. Tag fram ditt LiU-kort och visa det för tentavakten för att få detta lösenord. Kompilering Det finns ett antal olika alias som kan förenkla vid kompilering: g++11 Kompilering med c++11-standarden w++11 Kompilering med c++11-standard samt varningsflaggor Avslutning Logga ut som vanligt ska du vänta ett tag och sedan trycka på knappen Avsluta tentamen när det är möjligt. När detta är gjort är det omöjligt att logga in igen.
Uppgift 1 Kim äger en spelbutik och står inför ett problem - det är dags att inventera igen! Kim har alltid haft ett problem med inventeringen då det är så jobbigt att räkna ihop alla priser och har därför bett dig om hjälp med att skapa ett program som ska beräkna värdet av inventarierna och presentera detta i en fin tabell. På filerna given_files/inventory.h och given_files/inventory.cc har någon redan börjat med delar som kan hjälpa dig på vägen med ditt program. Kopiera dessa till din hemkatalog och lägg till de funktioner du behöver för att slutföra programmet. Du ska även skapa en separat fil där din main-funktion finns. Ditt program ska läsa in inventarierna från en fil vars namn matas in av användaren. Om filen inte går att öppna ska programmet skriva ut ett felmeddelande och avslutas. Program ska fungera enligt nedanstående exempel: Körexempel 1 (Indatafilen är given) Mata in filnamn: given_files/lager.txt Vara Antal Pris Summa ==================================================== Boll 124 10.90 1351.60 Kortlek 2010 12.50 25125.00 LEGO-samling 5 589.00 2945.00 Rubiks kub 213 59.90 12758.70 Dice, D6 2313 3.39 7841.07 ==================================================== Totalsumma: 50021.37
Uppgift 2 Du ska skapa ett program som ber användaren mata in ett antal tal. Ditt program ska skriva ut samtliga inmatade tal som är unika och i stigande ordning mellan 1 och 150. Observera att vi här INTE kan anta att vi har en snäll användare utan inmatning av både andra tecken än siffror och konstiga värden kan ske. Ditt program ska inte lagra fler värden än vad som behövs för programmets funktion. Programmet ska läsa in nya värden tills användaren matar in talet 0. Ditt program ska fungera enligt följande körexempel: Körexempel 1 (Användarinmatning i fet stil) Mata in tal i stigande ordning (avsluta med 0): 3 2 5 7 7 4 9 51 0 OK> 3 OK> 5 OK> 7 OK> 9 OK> 51 Klar Körexempel 2 (Användarinmatning i fet stil) Mata in tal i stigande ordning (avsluta med 0): A dsx3 2 5 7 7 4 9 51 OK> 3 OK> 5 OK> 7 OK> 9 OK> 51 A123 F Sam OK> 123 201 0 Klar
Uppgift 3 I kortspelet Black Jack är målet att komma så nära summan 21 som möjligt utan att gå över. Alla klädda kort (knekt, dam och kung) är värda 10, ess är värda ett eller elva (valfritt) och övriga kort har sitt numeriska värde (2 till 10). Din uppgift är att skapa ett program som simulerar en omgång Black Jack. Detta genom att först slumpa två kort till användaren och skriva ut dessa och deras totalsumma. Därefter får användaren välja om hen vill ta fler kort eller stanna så länge totalsumman är under 21. Om det finns ess med ska samtliga alternativ med totalt värde under 22 skrivas ut. Då man vanligtvis spelar Black Jack med flera kortlekar är det inte ett krav på att korten som delas ut är unika. Du behöver inte heller göra skillnad på färg. Det ska däremot finnas en större chans att få värdet tio då det är totalt tolv kort per kortlek som ger detta. Användaren väljer att fortsätta genom att mata in ett t (för ta ett till) och avbryter med s (som i stanna). Körexempel 1 Dina kort: 8 1 Totalsumma: 9 / 19 Nytt kort: 2 Totalsumma: 11 / 21 Nytt kort: 5 Totalsumma: 16 Nytt kort: 8 Totalsumma: 24 Spelet slut, du förlorade! Körexempel 2 Dina kort: 10 2 Totalsumma: 12 Nytt kort: 2 Totalsumma: 14 Nytt kort: 1 Totalsumma: 15 Vad vill du göra? (s/t) s Spelet slut Körexempel 3 Dina kort: 6 5 Totalsumma: 11 Nytt kort: 10 Totalsumma: 21 Spelet slut
Uppgift 4 Det finns en serie av heltal som börjar med 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452. Denna serie kallas för Catalan numbers efter den belgiska matematikern Eugène Charles Catalan (1814-1894). Talserien växer väldigt fort så vi skall inte hantera alla tal, men du skall skriva ett program som beräknar det N:te numret i serien så gott det går. De tal som finns i serien följer denna formel (där n markerar det n:te talet i serien och det första talet i serien kallas C 0 ): C n = 4(n 1) + 2 n 1 + 2 C n 1 Det är givet att C 0 = 1 enligt den serie du har inledningen på ovan. Övriga tal i inledningen stämmer så klart också så testa ditt program (och kanske även räkna de första i huvudet) för att se hur det fungerar. Din uppgift är att skriva en rekursiv funktion som beräknar det N:e talet i talserien och ett huvudprogram som testar funktionen enligt nedanstående körexempel: Körexempel 1 Mata in vilket tal du vill finna (N=1 är det första): 1 Tal nummer 1 i serien är 1. Körexempel 2 Mata in vilket tal du vill finna (N=1 är det första): 2 Tal nummer 2 i serien är 1. Körexempel 3 Mata in vilket tal du vill finna (N=1 är det första): 7 Tal nummer 7 i serien är 132. Körexempel 4 Mata in vilket tal du vill finna (N=1 är det första): 10 Tal nummer 10 i serien är 4862. TIPS: Tänk på ordningen som du utför beräkningarna i, ibland blir heltal problematiska... TIPS2: På grund av begränsningar i heltalstypen kommer vi inte testa ditt program med allt för stora tal (N < 18). Ditt program ska ändå teoretiskt fungera för större värden.
Uppgift 5 Formatering av text är alltid ett intressant problem! I denna uppgift ska du skapa ett program som centrerar en text som användaren matar in. Ditt program ska låta användaren mata in en text som ska centreras samt ett heltal (härmed kallad N) som anger bredden på utskriften. Därefter ska ditt program skriva ut texten centrerad i ett fält om N tecken. Om N är mindre än textens längd ska de N mellersta tecknen av texten skrivas ut. Körexempel 1 Mata in text som ska centreras: En vacker text Mata in utskriftbredd: 40 En vacker text Körexempel 2 Mata in text som ska centreras: Hejsan Mata in utskriftbredd: 2 js Körexempel 3 Mata in text som ska centreras: Hej Mata in utskriftbredd: 2 He Körexempel 4 Mata in text som ska centreras: Hej Mata in utskriftbredd: 10 Hej