HI1024 Programmering, grundkurs TEN2 2016-12-22

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.