HI1024 Programmering, grundkurs TEN2 2014-10-27 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King helt utan anteckningar Tomma papper och penna. Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha tålamod! Logga inte ut förrän ni är klara med hela tentan. Svaren på uppgifterna ska vara program bestående av en fil som kallas uppg1.c, uppg2.c, uppg3.c och uppg4.c. Dessa ska sparas direkt under H:. Även om ni inte löser hela uppgiften så kan ni få delpoäng men ni måste se till att koden kompilerar och kan köras. Både output och koden bedöms och det är viktigt att denna är välskriven och uppfyller uppgiftens instruktioner. Välj bra variabelnamn och struktur men lägg inte så stor vikt vid kommentarer. Kom ihåg ert tentamenskonto. Resultaten kommer att presenteras kopplade till dessa. Lycka till Betygsgränser (Max 18p): 8p - Fx, 9p E, 11p D, 12p C, 14p B, 16p A Examinator: Nicklas Brandefelt C99 Vill du kunna använda C99 i Code::Blocks måste du göra följande: Settings Compiler Other options Lägg till: -std=c99 i fönstret och tryck OK
1. Gissa talet (4p) Du ska skriva ett program som låter användaren gissa fram ett tal från 1-100. Efter varje gissning får användaren veta om denne gissat för högt eller för lågt. När användaren till slut gissat rätt presenterar programmet hur många gissningar som behövdes och avslutar sedan. Helst ska programmet slumpa fram det tal som användaren skall gissa. Får du inte till det kan du hårdkoda talet men får då en poäng mindre. Försök att få dialogen att efterlikna dialogen nedan. Fet stil är inmatningar. Gissa ett tal fran 1-100:40 For lagt. Gissa igen:70 For hogt. Gissa igen:55 For hogt. Gissa igen:46 Du gissade ratt pa gissning 4.
2. Använda struct för att representera lådor (4p) I den här uppgiften skall du använda en struct för att representera lådor. En låda skall ha egenskaperna längd, bredd och höjd, alla representerade med decimaltal. Dessutom ska varje låda ha en färg representerat med en sträng. Skriv en struct-definition överst i ditt program. a) Skriv en funktion skrivut( ) som tar en låda som in-parameter och skriver ut den till standard ut. Deklarera i main en variabel med hjälp av din struct. Initiera den med längd 3.5, bredd 7.0, höjd 3.0 och färgen gul. Deklarera en ny låd-variabel och initiera den med längd 4.0, bredd 5.5, höjd 9.0, och färgen vit. Använd din funktion skrivut två gånger för att skriva ut lådorna. Utskriften bör bli: langd: 3.500 bredd: 7.000 hojd: 3.000 farg: gul b) Skriv en funktion volym( ) som tar en låda som inparameter och beräknar och returnerar lådans volym. Anropa funktionen i main efter utskrifterna ovan med din gula låda och skriv ut resultatet. Observera att denna funktion precis som funktionerna nedan inte skall skriva ut något eller läsa in något från användaren. Utskriften nu bör bli: langd: 3.500 bredd: 7.000 hojd: 3.000 farg: gul Volym: 73.500 c) Skriv en funktion dubblavolym( ) som tar en pekare till en låda som inparameter och som dubblar lådans längd (den låda som pekaren pekar på). Använd funktionen för att dubbla den gula lådans volym innan du skriver ut den i programmet ovan. Utskriften nu bör bli: langd: 7.000 bredd: 7.000 hojd: 3.000 farg: gul Volym: 147.000 d) Skriv en funktion storlada( ) som tar två lådor som in-parametrar och skapar en ny låda som garanterat har plats för båda de inskickade lådorna och är svart. Funktionen returnerar sedan denna nya låda. Deklarera en ny variabel i main med hjälp av din struct och använd din nya funktion storlada för att tilldela variabeln en låda med plats för båda de två tidigare lådorna (efter dubblingen). Använd sedan skrivut för att skriva ut din nya låda. Observera att din funktion skall fungera för vilka 2 lådor som helst och inte bara för de i exemplet. Utskriften nu kan bli (den nya lådans dimensioner kan variera bara det går att lägga i de två lådorna ovan i den nya lådan): langd: 7.000 bredd: 7.000 hojd: 3.000 farg: gul Volym: 147.000 langd: 12.000 bredd: 13.500 hojd: 13.000 farg: svart
3. Kasta tre tärningar (6p) Om man kastar tre tärningar och summerar antalet prickar kan man få alla resultat från 3 till 18 dock med olika sannolikhet. Gör ett program som gör n st sådana försök och presenterar resultatet i en frekvenstabell. Användaren ska kunna välja n. Programmet skall använda arrayer och funktioner på ett bra sätt men inga globala variabler. Sist ska programmet skriva ut median och typvärde. Försök att få programmets utskrift att efterlikna nedanstående (fetstil är inmatning). Hur manga tarningar vill du kasta?100 Summa Frekvens 3 0 4 2 5 2 6 5 7 7 8 14 9 8 10 11 11 12 12 14 13 10 14 3 15 7 16 3 17 1 18 1 Median:11.0 Typvarde:8 Median Om alla resultat ordnas i storleksordning är medianen det mittersta resultatet. Vid jämt antal tal är medianen medelvärdet av de 2 mittersta talen Ex: 2,4,4,7,7,9,9,9,10,12,12,13,15,16,17,18 har medianen 9.5 Typvärde Det tal som förekommer flest gånger i ett material är typvärdet. Om två eller fler tal förekommer lika ofta är alla typvärden. I dessa fall räcker det här om ditt program anger ett av dessa. Obs att beräkna medianen korrekt i alla fall kan bli svårt beroende på val av lösning. Speciellt märks det när man väljer få antal tärningar. Om ditt program räknar ut rätt median i de flesta fall med många tärningskast ger det ett delpoäng. Om ditt program räknar rätt i alla fall ger det 2 delpoäng. Lägg inte allt för mycket tid på detta innan du är klar med tentan i övrigt.
4. 21-spel (4p) 21 är ett kortspel som finns i lite olika varianter. I denna variant turas spelarna om att dra ett kort var. En spelare får välja att passa och får då inga fler kort (man ska alltså inte kunna passa för att sedan dra fler kort). Om en spelare får en kortsumma över 21 förlorar denna direkt. Om en spelare får exakt 21 vinner denne direkt. Om båda valt att passa vinner den som har en kortsumma som är närmast 21 (vid lika vinner datorn). I ditt program skall användaren få spela 21 mot datorn en gång. Datorn börjar med att dra ett kort och därefter är det spelarens tur. Programmet slutar när någon vunnit enligt ovan och gratulerar användaren om denne vunnit. Datorspelaren väljer att dra kort till dess att datorn har 17 eller högre då den alltid passar. En kortlek består av korten 1-13 i hjärter (H), ruter (R), klöver (K) och spader (S). Till att börja med kan du låta programmet slumpa fritt mellan alla 52 kort så att samma kort kan komma flera gånger. För full poäng ska slutversionen säkerställa att varje kort endast kan dras en gång. En körning bör kunna se ut så här: 21 spel Datorn drar R8 och har summan 8. Du drar S6 och har summan 6. Datorn drar H11 och har summan 19. Du drar H1 och har summan 7. Datorn har passat och har summan 19. Du drar R5 och har summan 12. Datorn har passat och har summan 19. Du drar K13 och har summan 25. Datorn vann.