Programmering grundkurs och Programmering C
för D1 m fl, även distanskursen
lördag 19 januari 2008 kl 8:00 - 13:00
Gäller som tentamen för:
DT1016 Datateknik A, Programmering grundkurs, provkod 0100
DT1007 Datateknik A, Tillämpad datavetenskap, provkod 0410
DT1006 Datateknik A, Programmering C, distans, provkod 0100
PRG045 Programmering C, provkod 0110 (och 0100, och 0101)
TDD121 Tillämpad datavetenskap A, provkod 0700 (och 0400)
TDP118 Programmering C, distans, provkod 0110 (och 0100)
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 40.
För godkänt betyg (3 respektive G) krävs 23 poäng. För den som följt campuskursen hösten 2007 ger varje i tid inlämnad inlämningsuppgift med deadline en extra poäng. Den som inte gått campuskursen hösten 2007, får dessa (tre) extrapoäng ändå. |
Resultat och lösningar: | Meddelas på kursens hemsida, http://www.aass.oru.se/~tpy/c/2007-2008-p2/, senast lördag 9 februari 2008. |
Visning och frågestund: |
Måndag 11 februari 2008 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentorna hämtas på institutionen. Man kan också få sin rättade tenta hemskickad. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 070-73 47 013. |
Prioritet | Kategori | Operator | Associativitet |
---|---|---|---|
Högsta | Unära postfixoperatorer | (), [], ->, ., ++, -- | vänster |
Unära prefixoperatorer | !, ++, --, +, -, *, &, sizeof, (typ) | höger | |
Multiplikation mm | *, /, % | vänster | |
Addition mm | +, - | vänster | |
Jämförelser | <, <=, >=, > | vänster | |
Likhetsjämförelser | ==, != | vänster | |
Logiskt OCH | && | vänster | |
Logiskt ELLER | || | vänster | |
Lägsta | Tilldelning | =, +=, -=, *=, /=, %= | höger |
a) 1 / 2 + 3 + 4
b) 1 + 2 % 3 + 4
a = 1; b = 1; c = 10; while (a < c) { if (a % 2 == 0) a++; else c--; b++; }
Funktionen ska ta de tre flyttalen x, y och z som argument, och returnera uttryckets värde.
b) (2p) Skriv en main-funktion som läser in värden på x, y och z, beräknar uttryckets värde genom att anropa funktionen ovan, och sen skriver ut detta värde.
I den här och alla andra uppgifter på tentan gäller: Om du ska anropa en funktion från en tidigare uppgift eller deluppgift, behöver du inte skriva koden för den funktionen på nytt. Du får också anropa funktionen även om du inte gjort uppgiften där man skulle skriva den. |
Vi ska skriva ett tågspel, där man tävlar med tåg på järnvägen. Tågspelet innehåller följande tre typer av saker:
Vi behöver en posttyp (med C-terminologi struct) för var och en av dessa saker.
a) (1p) Definiera posttypen som ska användas för att lagra data om ett lok. Den ska heta struct Lok.
b) (1p) Definiera posttypen som ska användas för att lagra data om ett vagn. Den ska heta struct Vagn.
c) (2p) Definiera posttypen som ska användas för att lagra data om ett tåg. Den ska heta struct Tag. Tips: Denna posttyp ska innehålla tre fält, nämligen ett lok, en array av 100 vagnar, och en heltalsvariabel som anger hur många av dessa vagnar som vi verkligen använder.
a) (1p) Skriv en funktion som heter visa_lok, som skriver ut ett lok (som i uppgift 4) på skärmen. Funktionen ska ta lokposten som parameter. Exempel på hur en utskrift kan se ut:
Lok nummer 100, som väger 110 ton.
b) (1p) Skriv en funktion som heter visa_vagn, som skriver ut en vagn på skärmen. Funktionen ska ta vagnposten som parameter. Exempel på hur en utskrift kan se ut:
En vagn som själv väger 4 ton, och har 10 ton last.
c) (2p) Skriv en funktion som heter visa_tag, som skriver ut ett helt tåg på skärmen. Funktionen ska ta tågposten som parameter. Den ska anropa funktionerna visa_lok och visa_vagn. Exempel på hur en utskrift kan se ut:
Här börjar tåget. Lok nummer 100, som väger 110 ton. En vagn som själv väger 4 ton, och har 10 ton last. En vagn som själv väger 4 ton, och har 20 ton last. En vagn som själv väger 5 ton, och har 3 ton last. Här slutar tåget.
Eftersom vi ska stoppa in tre operatorer, och för varje operator har fem olika att välja på, blir det 5*5*5, dvs 125, olika uttryck.
Exempel på uttryck som ska skrivas ut:
1 + 2 + 3 + 4
1 % 2 + 3 * 4
Exempel på uttryck som inte ska skrivas ut:
1 + 2 + (3 + 4)
1 + 2 + 3 + 3
1 + 2 + 3 ^ 4
1 + 2 + 3
1 + 2 + 4 + 3
Notera att uttrycken alltså bara ska skrivas ut, som text. De ska inte beräknas.