Linköpings universitet Institutionen för datavetenskap, IDA Olle Willén mars 2009 Tentamen TDDB53 KOMPLETTERANDE HEMTENTAMEN 2 TDDB53 Programmering i Ada för MI i mars 2009 Tentan publiceras 19/3 vid ca kl 13.00 Svaren skall lämnas in senast 23/3 kl 13.00 till Johan Thapper. Hjälpmedel: Godkännande: Försäkran: Andra personers assistans och datorer är otilllåtna hjälpmedel! Allt annat är tillåtet. Tentamen ger godkänt eller inte godkänt. För godkänt krävs 10 godkända uppgifter, inklusive eventuell bonus. Godkända uppgifter från senaste två hemtentor räknas tillgodo. En sådan skall fyllas i och lämnas tillsammans med tentasvaren. Den finns sist i detta häfte.
Kompl. hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) 2(6) Varje uppgift ger godkänt (G) eller underkänt (U). 1. Redogör för den sats i Ada som startar med ordet exit. Beskriv först själva konstruktionen (skrivsättet) på ett generellt och fullständigt sätt, och sedan hur utförandet går till. 2. Jämför de två företeelserna funktion och procedur vad det gäller användningen (anropet) av dem. Det finns både likheter och skillnader. 3. Förklara fenomenet heltalsdivision. 4. En form av deklaration kan formellt skrivas så här: type A is array(α) of β; Vad är det för slags konstruktioner som, allmänt sett, ska finnas på de platser där de formella symbolerna α resp β nu står? 5. Vad är syftet med en deklaration, i allmänhet? Det gäller då varje form av deklaration - av variabler, typer, subrutiner och allt annat. 6. Float-variabeln X har vilket värde som helst. Beskriv, utan beräkningsdetaljer och på vanlig svenska, vilken kunskap om det värdet som nedanstående uttryck ger: Integer(Float Truncation(abs(X) * 10.0)) mod 10 Ett konkret exempel som hjälp: Värdet av Float Truncation(56.78) är 56.0 7. Nedan är S och T Integer-variabler. Vilka värden, i tur och ordning, kommer T att ha vid markeringen... när den här koden utförs: for i in reverse 0.. 2 loop S := 2 + i * 3; for j in -1.. 1 loop T := S - j;...
Kompl. hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) 3(6) 8. I satsen här intill är X och Y heltalsvariabler. Tolka satsen och ange på ett förenklat vardagligt - eller hellre matematiskt - sätt under vilken omständighet den Booleska variabeln P blir true. if X <= Y then if X = Y then P := true; else P := X + 3 > Y; elsif 1 = X - Y then P := true; else P := X - 2 <= y; 9. Vi har deklarationerna nedan. Avsikten med Is_Asc är att den ska avgöra om komponenterna i den List som skickas dit förekommer i strikt stigande ordning eller ej. Vilket är felet med Is_Asc? type List is array(1.. 50) of Integer; function Is_Asc(v : List) return Boolean is begin for i in v range loop if v(i) >= v(i+1) then return false; return true; end Is_Asc; 10. Här har vi samma typ List som ovan. Från ett användande programs synvinkel, vilken effekt har uppnåtts efter att ett anrop av Q fullbordats? procedure Q(lst : in out List; cmp : Integer) is p : Integer := 0; begin for i in lst Range loop if lst(i) = cmp then p := p + 1; lst(i) := lst(p); lst(p) := cmp; end Q;
Kompl. hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) 4(6) 11. Matematiskt betraktat har värdet Foo(x) nedan en bestämd relation till x, för vissa x. Beskriv denna relation! function Foo(N : Integer) return Integer is P : Integer := 1; i : integer := 1; begin if N > 0 then loop if P = N then return i; elsif P > N then exit; i := i + 1; P := i * P; return -1; end Foo; 12. Man har installerat automatiska mätutrustningar på var och en av 10 apparater, vilka klarar av att registrera antalet fel per apparat under varje timme (0.. 23) i en hel vecka. Varje apparat är också försedd med en unik identitet. Variabeln FelRapport nedan innehåller denna datasamling i Ada. Rita och förklara hur variabeln strukturellt är uppbyggd, så att någon som inte är initierad ändå förstår. subtype ApparatId is String(1.. 4); subtype ApparatNummer is Integer range 1.. 10; type Dag is (Mån, Tis, Ons, Tor, Fre, Lör, Sön); type FelFrekvens is array(dag, 0.. 23) of Integer; type ApparatData is record -- Apparatid och felfrekvens för veckans alla timmar: Identitet : ApparatId; FelAntal : FelFrekvens; end record; type VeckoRapport is array(apparatnummer) of ApparatData; FelRapport : VeckoRapport; 13. Alla tentanders resultat på de enskilda uppgifterna på en tenta har samlats i variabeln Rapport nedan. Varje uppgift har givit Godkänt eller ej, och om totala antalet godkända uppgifter är 10 eller mer ska tentanden få godkänt på tentan som helhet. Skriv den bit lösryckta kod som för var och en av de tenterande beräknar antalet G och sätter godkänt eller ej. (Koden på nästa sida)
Kompl. hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) 5(6) (Uppgift 13, forsättning) type UppgiftsResultat is array(1.. 15) of Boolean; type Tentand is record IdKod : Integer; -- Identitetskod Utfall : UppgiftsResultat; -- Alla uppgifters utfall SummaG : Integer; -- Summa G Godkänd : Boolean; -- Godkänd eller ej end record; type ResultatTabell is array(1.. 100) of Tentand; AntalTentor : Integer; -- Verkligt antal tentander Rapport : ResultatTabell; -- Alla tentanders resultat 14. Anropet DrawX(I, L) skriver ut XXXXXXXXXXXXXXXX I stycken mellanslag följda av L XXXXXXX XXXXXXX stycken X-tecken, på samma XXXXXX XXXXXX rad. DrawX gör ingen radframmatning vare sig före eller efter XXXXX XXXXX dessa tecken. Använd DrawX för XXXX XXXX att skriva den kod som producerar XXX XXX figuren här ( gardinuppsätt- XX XX ningen ), längst till vänster i terminalfönstret. Gör detta med hjälp av en lämpligt styrd loop som i varje varv gör två anrop av X X DrawX. Men skriv inte DrawX själv, den antas redan finnas! 15. I ett program förekommer heltalsvariabler vars värde ska kunna växla från 1 till -1, eller tvärtom, men som inte antar andra värden. En växling ska ske med hjälp av ett subrutinanrop som skrivs Toggle(t), där t är en sådan variabel. Definiera subrutinen.
Kompl. hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) (Använd denna sida som försättsblad till det du lämnar in - häfta ihop.) [väl textat namn] [tydligt personnummer] FÖRSÄKRAN Härmed försäkrar jag på min heder att jag inte utnyttjat andra hjälpmedel än de tillåtna under denna tentamen, och att de svar jag redovisat är mina egna formuleringar. Linköping den [underskrift] För examinator 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: Bonus: Godkänd Underkänd Saknas Antal G Tentan är godkänd Tentan är underkänd