Linköpings universitet Institutionen för datavetenskap, IDA Olle Willén mars 2010 Tentamen TDDB53 TENTAMEN TDDB53 (provkod TEN2) den 7 april 2010 kl 8 12 Jour: Emil Nielsen, tel 070 499 89 88 Hjälpmedel: Poänggränser: Inga Följande poängkrav, med eventuell bonus inräknad, gäller i princip: för betyg 3: 7 p (av totalt 16) för betyg 4: 11 p för betyg 5: 14 p
2 1. (2 p) I dessa delfrågor förekommer vanligen någon slags utgångspunkt i deklarationer eller liknande, och den följs av några påståenden i) v). Du ska svara genom att för varje påstående helt enkelt ange om detta är sant (S) eller falskt (F), givet utgångspunkten. Antalet sanna/falska påståenden per delfråga kan variera från 0 och uppåt! Du behöver inte motivera ditt S eller F! 3 6 rätt ger 0,5 tentapoäng (tp), 7 9 rätt ger 1 tp, 10 12 rätt ger 1,5 tp, och 13 15 rätt ger 2 tp. 1.a Variablerna X och Y tillhör datatypen Float. Följande konstruktioner är då enligt språkreglerna korrekt formulerade Float värden: i) X mod 10 ii) Float Truncation(Y) iii) Get(Y) iv) Y or abs(x) v) X := Y * 2.0 1.b Dessa deklarationer gäller: type Point is record x, y : Float; end record; P1 : Point; C : Float; Nedanstående konstruktioner är då, enligt språkets regler, korrekt skrivna: i) C := Point.x ii) P1.y = C iii) Point First iv) P1 := (0.0, 1.0) v) P1(x) := C 1.c Här råder följande deklarationer: type Month is (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); M : Month := Aug; I : Integer; Nedanstående styrning av for satsen (dvs inledningen före ordet loop) är då konstruerad på korrekt sätt: i) for x in Jan.. May ii) for x in Month(I).. M iii) for M in Month iv) for I in M.. Jun v) for x in Month First.. Oct
3 2. (2 p) Du ska här tolka innebörden av ett par små Ada konstruktioner: 2.a Variablerna I och S har typen Integer, och båda har från början värdet 1. Vilka värden, i tur och ordning, kommer S att ha vid markeringen... när nedanstående kod utförs? while I <= 7 loop S := I; for J in reverse 1.. I 1 loop S := S * J; I := I + 1;... 2.b A, B och X är Float variabler. Beskriv på vanlig svenska och så kortfattat som möjligt vilket storleksförhållande som måste råda mellan dessa tre variabler för att uttrycket nedan ska vara sant (true). Float Max(A, B) abs(a B) / 2.0 = X 3. (3 p) I den här uppgiften ska du själv skriva lite Ada kod. 3.a En subrutin anropas som Incr(x, p), där x står för en Integervariabel och p för ett logiskt värde. Subrutinen ska åstadkomma följande: om p är sann ska x ökas med 1, annars minskas med 1. Skriv definitionen av Incr. 3.b I variabeln P1 nedan finns samlat all arbetstid för en person under ett år, veckovis, och såväl normal arbetstid som övertid. Skriv de lösryckta satser i Ada (nån subrutin behövs alltså inte) som krävs för att beräkna L_Faktor hos P1. Detta värde ska vara summan av alla arbetade timmar under året, där emellertid övertimmarna ska räknas dubbelt. type VeckoArbetsTid is record NormalTid : Float; -- Antal normala veckoarbetstimmar Övertid : Float; -- Antal övertimmar för veckan end record; type ÅrsLista is array(1.. 53) of VeckoArbetsTid; type ÅrsArbetsTid is record Ident : Integer; -- Personidentifikation Tid : ÅrsLista; -- Arbetade timmar L_Faktor : Float; -- Underlag för löneberäkning end record; P1 : ÅrsArbetsTid;
4 4. (2 p) Din uppgift här är att förstå den övergripande innebörden av ett par kodavsnitt, och tolka dessa till vardagligt språk (svenska). Det är inte detaljerna i beräkningsgången frågan gäller, utan kodens slutliga resultat eller verkan betraktad utifr ån. 4.a K är en Integer variabel. Vilket värde K än har beskriver uttrycket nedan en viss egenskap, eller ett karakteristiskt drag hos K. Vilken/vilket då? (Eller: vilken funktion av K utgör uttrycket?) K / Integer Max(Abs(K), 1) 4.b Givet är deklarationerna nedan. Ett huvudprogram har deklarerat variablerna L, T och X och gör anropet B(L, T, X). Du ska för var och en av huvudprogrammets tre variabler beskriva dels om dess värde ändrats efter anropet, dels vilken innebörd det nya värdet i så fall har (dvs vilket karakteristiskt drag det beskriver). type ARR is array(1.. 100) of Integer; procedure B(A : ARR; V, N : in out Integer) is C : Integer; begin N := 0; for I in 1.. ARR Last 1 loop C := 1; for J in I + 1.. ARR Last loop if A(J) = A(I) then C := C + 1; end if; if C > N then N := C; V := A(I); end if; end B; 5. (1 p) Här föreligger samma datatyp ARR som ovan, samt subrutinen nedan. Anropet IsAscending(A) är tänkt att returnera true bara om alla värden i A förekommer i strikt stigande ordning. Vad är det emellertid för fel med IsAscending? Till ledning: Koden är grammatiskt korrekt och orsakar inte kompileringsfel! function IsAscending(L : ARR) return Boolean is begin for i in 1.. 100 loop if L(i) >= L(i + 1) then return false; end if; return true; end IsAscending;
5 6. (2 p) Du har här nio begrepp a) i) och ett antal sm å kodexempel 1) 9), som alla är korrekta i sitt sammanhang. Uppgiften handlar om att försöka koppla vart och ett av begreppen till ett av exemplen. Somliga begrepp kan vara snävare än andra (dvs omfattas av andra). Samma exempel skulle kunna kopplas till flera begrepp, och tvärtom. Men det skulle också kunna saknas exempel på vissa begrepp, och omvänt. Du ska betrakta varje exempel som oberoende av alla andra. Vissa exempel har en utgångspunkt i given kod, men i övrigt har namn och konstruktioner den sedvanliga innebörden, eller ska kunna inses av sammanhanget. Du ska svara genom att för varje delfråga a) i) antingen ange att exempel saknas eller ange numret på ett exempel som i sin helhet utgör ett korrekt och fullständigt exempel på begreppet i fråga. Du får utnyttja varje exempel bara en enda gång. 2 3 rätt ger 0,5 tentapoäng (tp), 4 5 rätt ger 1 tp, 6 7 ger 1,5 tp och 8 9 rätt ger 2 tp. Utgångspunkt: type Direction is (North, East, South, West); Begrepp: Exempel: a) literal 1) Direction First b) Direction värde 2) 0.0 c) logiskt värde 3) X : Float := 3.0; d) deklaration 4) for D in North.. West loop e) sats Put(D); f) range g) funktionsanrop 5) "East" h) Float värde 6) abs(x 1.0) i) repetitionsstruktur 7) function One return Float is begin return 1.0; end One; 8) <= 9) Put(2.0, 2, 0, 0); 7. (1 p) Vad får det för konsekvenser att ett program inte gör use på ett paket vars innehåll det använder? 8. (3 p) Dessa frågor relaterar till Adas syntax ( grammatik ), dvs hur konstruktioner tillåts byggas upp, beskrivet med generella begrepp. 8.a Du har en variabel K av datatypen Float. Vilka slags Ada konstruktioner skall då finnas i nedanstående sats på de platser som betecknas med symbolerna α resp β? Du ska ange detta med precisa, kortfattade och heltäckande begrepp eller termer, inte med konkreta exempel. α := K / β;
6 8.b Beskriv uppbyggnaden av Adas exit sats. Du ska inte göra detta med hjälp av exempel. Du ska i stället använda kortfattade, formella och allmänna begrepp, så att alla tänkbara fall täcks in.