HI1024 Programmering, grundkurs TEN2 2016-12-22 KTH STH Flemingsberg 8.15-13.00 Tillåtna hjälpmedel: Kursboken ”C PROGRAMMING A Modern Approach” K. N. King – helt utan anteckningar Alternativt “C från början” Jan Skansholm – givetvis också 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, 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 (varav minst 3 på uppgift 2) – 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 här skriva ett program som låter användaren gissa ett heltal 1 till 10. Gissar användaren fel får denne en ny chans att gissa ända till dess att användaren gissar rätt (observera att det ska vara samma korrekta tal till alla försök). När användaren gissar rätt avslutar programmet och berättar hur många gissningar som behövdes. Det korrekta talet ska slumpas på sådant sätt att det blir olika tal varje gång programmet körs. En körning bör kunna se ut enligt följande: Gissa Fel! Gissa Fel! Gissa Fel! Gissa Fel! Gissa Ratt. ett tal (1-10):3 ett tal (1-10):10 ett tal (1-10):7 ett tal (1-10):2 ett tal (1-10):4 Det kravdes 5 gissningar Fetstil är inmatningar 2. Matematik (7p) För full poäng använd funktioner och arrayer på ett bra sätt. Använd inga globala variabler. Detta program skall simulera tärningskast och beräkna statistik för dessa. Programmet börjar med att användaren får bestämma hur många tärningar som ska kastas vid varje tillfälle. Sedan får användaren välja hur många gånger dessa tärningar ska kastas (max 1000 annars sätts antalet till 1000). Vid varje kasttillfälle är vi intresserad av summan av de kastade tärningarna. Därefter presenterar programmet summan av tärningarna för varje kasttillfälle om och endast om användaren valt att kasta tärningarna färre än 20 gånger. Därefter presenterar programmet medelvärdet och medianen med två decimaler. En typisk körning bör kunna se ut enligt: Ange antal tarningar som skall kastas:3 Ange antal ganger de skall kastas(max 1000):10 Resultaten blev: 9, 3, 13, 17, 21, 12, 5, 13, 7, 8 Medelvärdet: 10.80 Medianen: 10.50 Tips: Medianen är det mittersta värdet om värdena ordnas i följd och det finns ett udda antal värden. Om det finns ett jämt antal värden är medianen medelvärdet av de två mittersta värdena. 3. Struct (4p) I den här uppgiften ska vi arbeta med en struct som ska representera en glosa (dvs ett engelskt ord och den svenska översättningen). Den ska alltså innehålla två fält, ett för det engelska ordet och ett för det svenska ordet. Ni ska i uppgiften konstruera olika hjälpfunktioner till denna struct. a) Deklarera en struct i ditt program som representerar en glosa enligt ovan. Kalla structen för WordPair. Utgå ifrån att strängarna inte består av mer än 30 bokstäver. Använd structen för att deklarera en variabel i main och initiera den till att innehålla glosan: ”car” – ”bil”. (1p) b) Skriv en funktion writePair som tar en glosa som in-parameter och skriver ut dess engelska ord och svenska översättning på skärmen. Anropa funktionen med glosan skapad i a) från main. Obs att funktionen inte ska läsa in något från användaren. (1p) c) Skriv en funktion correct som tar en glosa och en sträng som in-parametrar. Den ska returnera sant om strängen är identisk med glosans svenska översättning och annars falskt. Anropa funktionen från main med vår glosa och ordet ”vagn”. Skriv i main ut resultatet till skärmen. Anropa funktionen igen med samma glosa men nu med ordet ”bil” och skriv ut även detta resultat i main. Obs att funktionen inte ska skriva ut något eller läsa in något från användaren. (1p) d) Skriv en funktion changeTranslation som tar en pekare till en glosa och en sträng som inparameter. Denna ska ändra den svenska översättningen till den nya strängen. Anropa funktionen i main med vår glosa och strängen ”automobil”. Skriv sedan ut glosan med funktionen från a). Resultatet ska då bli enligt exemplet nedan. Obs att funktionen inte ska skriva ut något eller läsa in något från användaren. (1p) En körning då man löst alla uppgifter bör se ut enligt nedan: car – bil Resultat med vagn:0 Resultat med bil:1 car - automobil 4. Flera typvärden (3p) Gör en kopia av uppgift 2 men kalla den nu uppgift4.c. Lägg nu till att den också presenterar typvärden. Du kan utgå ifrån att användaren maximalt kastar 10 tärningar per gång om du vill. En typisk körning bör kunna se ut enligt: Ange antal tarningar som skall kastas:1 Ange antal ganger de skall kastas:10 Resultaten blev: 2, 5, 1, 1, 2, 6, 5, 4, 6, 3 Medelvärdet: 3.50 Medianen: 3.50 Typvarde: 1, 2, 6, Om du presterar ett program som beräknar korrekt typvärde i de fall det finns endast ett typvärde men endast visar ett av typvärdena i de fall det finns flera kan du få en poäng. Tips: Typvärdet är det vanligaste förekommande värdet i ett dataset. Om flera värden förekommer lika många gånger och flest är de alla typvärden.