Linköpings universitet Institutionen för datavetenskap, IDA Olle Willén mars 2003 Tentamen TDDB53 KOMPLETTERANDE HEMTENTAMEN TDDB53 Programmering i Ada för MI (MI-ADA) i mars 2003 Tentan lämnas ut 24/3 efter kl 12.00 och skall lämnas in senast 26/3 kl 13.00 i Olle Willéns arbetsrum. Hjälpmedel: Godkännande: Försäkran: Procedur: Egna anteckningar och texter i tryck är tillåtna! Datorer och andra personers assistans är otilllåtna! Tentamen ger godkänt eller inte godkänt. För godkänt krävs 10 godkända uppgifter på den ordinarie och denna tentamen tillsammans. En sådan skall fyllas i och lämnas tillsammans med tentasvaren. Den finns i slutet av detta häfte. Redovisningen skall vara inlämnad till mig, i handen, senast onsdag 26 mars kl 13.00. Jag vill ha bara dina nya svar, och försättsblad, först, inget annat!
Hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) 2(5) Varje uppgift ger godkänt (G) eller underkänt (U). OBS! Det antal G du fått på ordinarie hemtentan har du naturligtvis till godo. Kompletteringen innebär därmed att du skall skaffa dig så många G till att du totalt når upp till minst 10. Kompletteringstentan är mycket lik den ordinarie hemtentan; vissa frågor är desamma, men somliga har modifierats en aning. Du måste se upp med det; det är de nya frågorna som nu gäller! Numreringen av uppgifterna är dock densamma nu vid kompletteringen som tidigare. Det är alltså uppgifter med nummer du fick underkänt på vid ordinarie hemtentan som du ska redovisa denna gång. 1. Beskriv Adas tilldelningssats. 2. Jämför begreppen variabel och konstant. 3. Betrakta satsen X := (-0.5, 2.5, 1.0); Vad kallar man i Adas terminologi konstruktionen till höger om :=? Vad finns det att säga om X? 4. Vad för slags delkonstruktion, i allmänna termer, skall finnas mellan orden loop och end loop i Ada-konstruktionen while... loop... end loop? 5. Förklara - och exemplifiera - utsagan variabler har begränsad livslängd! 6. Uttrycket A mod 3 > 0 avgör en speciell egenskap hos A. Hur vill du i allmänna, mer vardagliga termer beskriva den egenskapen? 7. Givet är följande lilla bit kod: for i in 2.. 3 loop s := 0; for j in reverse 1.. i loop s := s + j;... För vilken följd av värden på s kommer avsnittet... att genomlöpas? 8. Använd vanlig svenska för att beskriva under vilka omständigheter den Booleska variabeln q nedan kommer att få värdet false. if p then if x < y and y < z then q := not p; else q := p; else q := x < y or x < z;
Hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) 3(5) 9. ArrType nedan är typnamnet för en arraystruktur med plats för ett antal heltal. Funktionen GetLastIndex(a, v) skall försöka hitta sista förekomsten av värdet v i a, och ge tillbaka index för detta. Vad är fel med funktionen, fast den går att kompilera? function GetLastIndex(arr : ArrType; val : Integer) return Integer is pos : Integer := arr Last; while arr(pos) /= val loop pos := pos - 1; return pos; 10. Vilken uppgift fyller funktionen Q nedan? Gör den beskrivningen i mycket allmänna och övergripande termer (t ex: funktionen ger medelvärdet av sina två parametrar ), och inte i form av de detaljerade beräkningsstegen! Använd alltså ett utanförperspektiv! function Q(n : Integer) return Integer is r : Integer := 1; if n <= 0 then return 0; else while r * r < n loop r := r + 1; return r; 11. Beskriv på motsvarande sätt som i uppgift 10 vad ändamålet med funktionen R nedan är. Parametrarna ska här betraktas som koordinaterna för en punkt i planet, och din tolkning ska relatera till motsvarande begreppsvärld. function R(x, y : Float) return Integer is p : Integer := 1; if x * y /= 0.0 then return 3; if x = y then p := p - 1; elsif y /= 0.0 then p := p + 1; return p;
Hemtentamen i TDDB53 Programmering i Ada för MI (MI-ADA) 4(5) 12. En variabel DATA deklareras som nedan. Rita och förklara hur den strukturellt är uppbyggd, så att någon som inte är initierad ändå förstår. type T is record y : integer; m : integer; d : integer; type M is array(1.. 12) of Boolean; type R is record dat : T; sum : Float; mrk : M; DATA : R; 13. Nedan förekommer några deklarationer. Skriv de sammanhängande adakonstruktioner som behövs för att beräkna årsarbetstid - absolut och relativt - för variabeln empl, givet att hans/hennes arbetade timmar per månad är kända och att 100% årsarbetstid motsvarar 1750 timmar. type month is (jan, feb, mar, apr, maj, jun, jul, aug, sep, okt, nov, dec); type month_work is array(month) of Float; type employee_account is record work : month_work; -- arbetade timmar per månad sum : Float; -- årssumma arb.timmar percent : Float; -- proc av årsarbetstid empl : employee_account; 14. I en repetition över en följd av godtyckliga satser... skall variablerna p och c anta de successiva värden som schemat nedan visar. Variablerna antas deklarerade. Skriv denna repetition, och markera var satssekvensen... skall finnas i förhållande till din kod. varv 1 2... p: 1 1 2 3 5 8 13... 610 c: 1 2 3 5 8 13 21... 987 15. En funktion Floor är avsedd att ta emot en Float-parameter, och den ska ge tillbaka det största heltal som är mindre än eller lika med parametern. Exempel: Floor(3.2) -> 3, Floor(-1.25) -> -2, Floor(12.0) -> 12. Skriv funktionen Floor. Minns att typkonverteringen Integer(f), där f är ett Float-värde, avrundar detta korrekt till närmaste Integer!
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.) [textat namn] [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: Godkänd Underkänd Saknas Antal G Tentan är godkänd Tentan skall kompletteras