• No results found

HI1024 Programmering, grundkurs TEN

N/A
N/A
Protected

Academic year: 2022

Share "HI1024 Programmering, grundkurs TEN"

Copied!
6
0
0

Loading.... (view fulltext now)

Full text

(1)

HI1024 Programmering, grundkurs TEN2 2020-12-16

(HI1200 TENB)

KTH CBH Flemingsberg Examinator: Nicklas Brandefelt Sista ordinarie insläpp: 14.00 – dörren stängs.

Tentavakterna delar ut konton. Logga in i tentasystemet så fort som möjligt.

När alla loggat in (förhoppningsvis 14.15) börjar tentamen och pågår i 4h 45min (tex 14.15-19.00).

14.30 Insläpp för försenade.

Extra skrivtid 50%: 7h 10min (tex 14.15-21.25) (endast 1h extra skrivtid för A eller B) Skrivvakter: Anteckna start- och inlämningstid.

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!

Väl inne hittar ni programmeringsmiljöerna under applications - Programming

Logga inte ut förrän ni är klara med hela tentan. Svaren på uppgifterna ska vara program bestående av filer som kallas uppg1.c, uppg2a.c, uppg2b.c, uppg3.c, och uppg5.c. Dessa ska sparas direkt under H. Om ni använder projekt i tex CodeLite. Se till att dessa ligger på H. När ni är klara med tentan kopiera källkodsfilerna och lägg kopian 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.

Lycka till!

Betygsgränser C-delen:(Max 15p):

9p (varav minst 3 på uppgift 2) – Fx 10p – E, 11p – D, 12p – C

A-delen bedöms endast om man uppnått betyg C på C-delen. Den bedöms då med betyget A, B eller C. För er med extra skrivtid: För att kunna få betyget A eller B måste ni lämna in tentamen senast 1 timme efter ordinarie skrivtid slutat.

För att läsa in en hel rad med scanf: scanf("%[^\n]%*c",s);

I terminalfönstret kom ihåg att när ni ska köra koden måste skriva ./ innan ni skriver namnet på den körbara filen som heter .out.

Om ni använder math.h behöver ni kompilera med flaggan –lm (lilla L lilla M):

gcc –lm test.c ./a.out

(2)

Del C

Om du deltagit i årets undervisning för TIELA och TIDAA och fått bonus godkänt kan du hoppa över första uppgiften. Detta är sista tentan då du kan göra detta.

1. Längder (4p)

I detta program får användaren ange en längd i famn, aln, eller fot och ange vilken enhet det är för att sedan få veta vad det motsvarar i famn, aln, fot och meter med två decimalers noggrannhet. Därefter får användaren en ny chans att ange en längd ända till dess att användaren anger en längd mindre än 0.0001. Då avslutar programmet direkt.

En körning ska kunna se ut enligt följande:

Ange en langd: 3.5

Ange enhet (1) famn, (2) aln, (3) fot: 1 Det motsvarar:

3.50 famn, 10.49 aln, 20.98 fot, 6.23 meter Ange en langd: 3.5

Ange enhet (1) famn, (2) aln, (3) fot: 3 Det motsvarar:

0.58 famn, 1.75 aln, 3.50 fot, 1.04 meter Ange en langd: 0

Avslutar

Fetstil är inmatningar

1 famn motsvarar 1,78 meter 1 aln motsvarar 0,594 meter 1 fot motsvarar 0,2969 meter

(3)

2. Tärningslek (6p)

För full poäng använd funktioner och arrayer på ett bra sätt. Använd inga globala variabler.

a) (4p)

Ett tärningsspel fungerar enligt detta. Kasta tre tärningar (sex-sidiga). Välj två räknesätt så att du får ett resultat som ligger från 1 till 49. Får du 2, 4, 1 och väljer + och – får du 5. Man får nu upprepa detta så länge man vill men om man inte lyckas få ett tal från 1-49 som man inte fått tidigare så har man förlorat och får 0 poäng. Ju längre man håller på ju svårare blir det att lyckas få ett unikt tal. Man kan när man vill välja att avsluta och får då som poäng summan av alla tal man lyckats få. Studera de tre exempelkörningarna nedan noggrant för att få en bra bild av hur det fungerar.

Du kan utgå ifrån att användaren bara ger korrekt input för att spara tid.

Observera att beräkningarna inte skall ske med normala prioriteringsregler. Först utföres operation ett på tärning 1 och 2. Sedan utföres operation 2 på resultatet och tärning 3. Det betyder att 3+2*5 tolkas som (3+2)*5 och blir 25.

En körning ska kunna se ut enligt:

Foljande tal 1-49 ar upptagna:

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 2, 4, 1,

Vilka tva raknesatt vill du anvanda? (+, -, *, /): * + Resultat: 9

Foljande tal 1-49 ar upptagna: 9,

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 6, 5, 2,

Vilka tva raknesatt vill du anvanda? (+, -, *, /): / - Resultat: -1

Du misslyckades och far 0p

eller:

Foljande tal 1-49 ar upptagna:

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 1, 3, 3,

Vilka tva raknesatt vill du anvanda? (+, -, *, /): + * Resultat: 12

Foljande tal 1-49 ar upptagna: 12,

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 4, 2, 5,

Vilka tva raknesatt vill du anvanda? (+, -, *, /): * - Resultat: 3

Foljande tal 1-49 ar upptagna: 3, 12,

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 3, 2, 3,

Vilka tva raknesatt vill du anvanda? (+, -, *, /): * - Resultat: 3

(4)

eller:

Foljande tal 1-49 ar upptagna:

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 3, 2, 5,

Vilka tva raknesatt vill du anvanda? (+, -, *, /): * * Resultat: 30

Foljande tal 1-49 ar upptagna: 30,

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 4, 6, 4,

Vilka tva raknesatt vill du anvanda? (+, -, *, /): + * Resultat: 40

Foljande tal 1-49 ar upptagna: 30, 40,

Vill du kasta tarningar (k) eller avsluta (a): a Du fick 70p

Fetstil är inmatningar.

b) (2p)

Du ska nu skapa en ny version av spelet i en ny fil. I denna version får man välja i vilken ordning man räknar med siffrorna. Användaren anger detta genom att ge input med siffror, tex 4+6*2 (obs resultatet ska bli 20!). Ditt program kan räkna med att användaren anger input i rätt format men måste kontrollera att användaren anger rätt siffror. Om användaren anger fel siffror får denna en ny chans.

En körning ska kunna se ut enligt:

Foljande tal 1-49 ar upptagna:

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 5, 2, 6,

Ange uttryck: 2+6*5 Resultat: 40

Foljande tal 1-49 ar upptagna: 40,

Vill du kasta tarningar (k) eller avsluta (a): k Du fick 1, 2, 5,

Ange uttryck: 5+5*2

Felaktigt uttryck, forsok igen.

Ange uttryck: 5+1*2 Resultat: 12

Foljande tal 1-49 ar upptagna: 12, 40,

Vill du kasta tarningar (k) eller avsluta (a): a Du fick 52p

Fetstil är inmatningar.

(5)

3. Bankkonton (4p)

I den här uppgiften ska vi hantera bankkonton. Ett bankkonto skall representeras av en struct och innehålla efternamn (räkna med max femton tecken), kontonummer och saldo.

a) Deklarera en struct som ska representera ett bankkonto enligt ovan. Välj lämpliga fält.

Deklarera nu en variabel account1. Initiera account1 med namn: Shevek, kontonummer: 123, och saldo: 230 kr (du skall alltså använda C’s stöd för initiering vid skapandet inte tilldela efter skapandet). Skriv nu en funktion printAccount(…) som tar en bankkonto-struct som in-parameter och skriver ut kontots data. Anropa funktionen från main med account1. Resultatet av en körning ska då bli enligt nedan. (1p)

Shevek, 123, 230kr

b) Skriv en funktion createAccount(…) som tar lämpliga in-parametrar och utifrån dem skapar och returnerar ett bankkonto. Använd sedan din funktion för att skapa ett konto account2 i main med namn: Ketho, kontonummer: 124, saldo: 300kr. Anropa nu

printAccount med ditt nya konto. Resultatet av en körning ska då bli enligt nedan. (1p) Shevek, 123, 230kr

Ketho, 124, 300kr

Observera att funktionen createAccount(…) inte ska skriva ut något till terminalen och inte läsa in något från terminalen.

c) Skriv nu en funktion transfer(…) som tar två pekare till bankkonto-structar som in- parametrar och för över alla pengar från det första kontot till det andra. Den skall returnera void. Anropa transfer med pekare till account1 och account2 så att alla pengar flyttas över till account2. Skriv avslutningsvis ut båda kontona mha printAccount.

Resultatet av en körning ska då bli enligt nedan. (1p) Shevek, 123, 230kr

Ketho, 124, 300kr Shevek, 123, 0kr Ketho, 124, 530kr

Observera att funktionen transfer(…) inte ska skriva ut något till terminalen och inte läsa in något från terminalen.

d) Skriv nu en funktion som tar en array av bankkonton och ett heltal som in-parametrar och skriver ut alla konton. Heltalet skall då vara antalet konton. Skapa en array med två

bankkonton (du kan använda de vi skapat ovan) och anropa funktionen så att de skrivs ut.

(1p)

(6)

4. Filhantering (1p)

Dina inlämnade filer ligger alla direkt under H med korrekta namn enligt instruktionen.

Del A

5. Luffarschack

I luffarschack turas man om att sätta X eller O i ett rutnät. Den spelare som först får fem i rad har vunnit. Man kan få fem i rad horisontellt eller vertikalt (men inte diagonalt i denna version). Du ska göra ett spel där man två spelare kan spela mot varandra. Första spelaren använder X och andra spelaren O. Spelet ska avslutas när någon får fem i rad eller då brädet är fullt och eventuellt utropa vinnare. Brädet ska vara 9*9 rutor stort. Spelarna anger position genom att ange rad och kolumn. Tomma rutor markeras med punkt . En körning skall kunna se ut enligt nedan:

References

Related documents

Syftet med planändringen är att skapa förutsätt- ningar för en byggnad som för kontor, bilhandel och service på den del av fastigheten Terminalen 2 som inte är bebyggd och som

Eftersom detta också kan omfatta verksamheter som ryms beteckningen Z, Verksamheter, bör det förtydligas i detaljplanen att arbetsplatser för heltidsarbete inte är lämpligt inom

Ytan för föreslagen byggnad har idag byggrätt för byggnad för kontors- och lättare industriändamål i tre till fyra våningar.. Byggrätten för denna del av fastigheten har

Humlegården Fastigheter AB ansökte 2011-02-02 om ändring av detaljplan för norra delen av fastigheten Terminalen 2 med syfte att möjliggöra en bilhall för bilförsäljning. Plan-

– Vatten, släck elden för elden vill inte bränna riset och riset vill inte slå pojken och pojken vill inte gå till skolan... Sagan om pojken som inte ville gå

Begrepp: klass, instans (objekt), instansvariabler, metoder Syntax: skapa klasser, använda instanser.. Funktioner

Kvarvarande investeringsmedel för kombiterminalen uppgår till ca 9 500 tkr utifrån avsatta 23 000 tkr.

Att tillföra någon ny kunskap är avgörande för resultatets värde anser Larsson (1986), vilket jag hoppas kunna göra. Eftersom intervjuerna gjordes i olika gruppkonstellationer,