Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4: 28 Betyg 5: 36 (samt efter frivilligt godkänt praktiskt prov 2012-01-18) Hjälpmedel: Ingenting förutom papper och penna Instruktioner: Samtliga uppgifter i denna tentamen är utformade så att du skall svara om ett påstående är sant eller falskt, svaren lämnas på sista sidan, markera ditt svar med ett S för Sant eller F för Falskt eller avstå. Till varje uppgift finns ett antal påståenden, varje påstående är antingen sant eller falskt. Varje korrekt svar på en delfråga (a-h) ger +1 poäng, varje felaktigt svar ger -1 poäng och varje utelämnat svar ger 0 poäng. För varje uppgift 1-6, kan du få maximalt 8 poäng och minst 0 poäng. Du kan aldrig få minuspoäng på en uppgift. Väg dina svar noggrant för att få bästa möjliga resultat! Lycka till! 2012-06-11 Tentamen DVA103 1/8
1) Grundläggande syntax och semantik a) Följande variabelnamn är korrekt i Ada Min, _M1000, Minus ( ) b) Ett reserverat ord får användas som namn på en typ men inte för en variabel ( ) c) Följande loop genomförs exakt två gånger (variabeln Last är deklarerad som Integer): Last := 0; for I in reverse 1..Last loop Last := Last + 2; end loop; ( ) d) Alternativet others i en case-sats används för att fånga upp eventuella fall som inte täcks av andra alternativ ( ) e) En function kan returna en access-variabel ( ) f) Följande är OK att skriva Nr : constant :=42; ( ) g) Följande kod är given: N := 0; for K in -4..4 loop for J in 1..K loop N := N + 1; end loop; end loop; Värdet på N efter genomgången kod är ett udda tal ( ) h) Följande kod är given N := 3; if N > 2 then N := 5; elsif N = 5 then N := 10; end if; Värdet på N är lika med 10 efter genomgången kod ( ) 2012-06-11 Tentamen DVA103 2/8
2) Följande program är givet: with Ada.Text_IO; procedure Test_2 is type Index is range 1..10; type Value is range 1..10; type Dimension is array (Index range 1..5) of Value; Data : Dimension := (5,2,6,4,3); begin for I in Data Range loop Data (I) := Data (I) + Value (I); end loop; Ada.Text_IO.Put_Line ("2a =>"&Data (Index'First)'img); Ada.Text_IO.Put_Line ("2b =>"&Data (5)'img); end Test_2; a) programmet skriver bland annat ut 2a => 1 ( ) b) programmet skriver bland annat ut 2b => 3 ( ) c) Data length är lika med 10 ( ) d) Man kan skriva Data := (others => 7); ( ) e) Satsen i loopen kan också ha skrivits som Data (I) := Data (I) + I; ( ) f) Typen Index är en s.k. access-typ ( ) g) Typen Value är en heltals-typ ( ) h) range och length är s.k. attribut ( ) 2012-06-11 Tentamen DVA103 3/8
3) Följande program är givet: procedure Test_3 is type Token is ('1','3','5','7','9','0','2','4','6','8'); type Message_Type is array (1..4) of Token; Null_Message : constant Message_Type := "0000"; Mess : Message_Type := Null_Message; begin Mess (1) := Token'Val (7); Mess (2) := Token'Val (1); Mess(3..4) := Mess(1..2); if Mess (3) = '2' then Mess (3) := '1'; end if; end Test_3; a) Token Last är lika med 8 ( ) b) I slutet av programmet har Mess(1) värdet 1 ( ) c) I slutet av programmet har Mess(1) värdet 2 ( ) d) I slutet av programmet har Mess(3) värdet 4 ( ) e) Givet att C är en Character kan man skriva C := Mess(1); ( ) f) Det är OK att göra följande tilldelning Null_Message (1..3) := Null_Message (2..4); ( ) g) Genom att använda Ada.Text_IO kan man skriva Put (Mess); ( ) h) Storleken på variabler av typen Message_Type kan få plats i 16 bitar genom att man använder pragma Pack (Message_Type); ( ) 2012-06-11 Tentamen DVA103 4/8
4) Följande program är givet: I Ada.Integer_Text_IO Finns procedure Put (Item : Num; Width : Field := Default_Width; Base : Number_Base := Default_Base); För Integer är Default_Width lika med 11, och Default_Base har värdet 10 a) Skriver man put (42); skrivs 11 tecken ut ( ) b) Att skriva Put (42,Base=>10,Width=>11); ger samma resultat ( ) c) Man kan skriva ut talet med 16 tecken genom att skriva Put (42,Base => 16); ( ) d) Man kan även skriva ut som Put (Item=> 42,11,10); ( ) e) En function kan ha in, out och in out parametrar ( ) f) En parameter till en procedure som är en access-typ måste alltid vara av typen in ( ) g) En function måste ha minst en parameter ( ) h) Man kan skapa följande function function abs (X : Float) return Integer; ( ) 2012-06-11 Tentamen DVA103 5/8
5) Givet att vi har följande variabler i språken Ada och C Ada: C: A, B : Boolean; char a,b; N,M : Integer; int n,m,vector[3]; a) A and B motsvaras av a && b ( ) b) n := n + m; motsvaras av n +=m; ( ) c) not A motsvaras av /a ( ) d) Ada och C är båda case-sensitive ( ) e) Ett huvudprogram i Ada är en procedure utan argument (i en fil) ( ) f) En array i C med längden n har element från 0 till n-1 ( ) g) Variabeln vector är en pekare ( ) h) &vector[0] är samma sak som vector ( ) 2012-06-11 Tentamen DVA103 6/8
6) Följande kod är given generic type Item is private; type Pointer is access Item; package Stack_Handler is type Stack is private; procedure Add (L : in out Stack; X : Item); procedure Get (L : in out Stack; X : out Item); function Empty (L : Stack) return Boolean; private type Stack_Array is array (1..100) of Item; type Stack is record Data : Stack_Array; Len : Integer := 0; end record; end Stack_Handler; a) Paketet Stack_Handler är exempel på ett generiskt paket ( ) b) Paketet kan exempelvis instantieras enligt type Person is record Age : Integer; Man : Boolean := False; Address : String (1..40); end record; type Person_Access is access Person; package Stackad_Person is new Stack_Handler (Person_Access,Person); ( ) c) En användare kan öka storleken på typen Stack_Array genom att speca en ny typ ( ) d) Funktionen Empty kan ändra på saker i sin variabel L, eftersom typen Stack är private ( ) e) Den formella parametern X i proceduren Add är av typen in ( ) f) En möjlig implementering av Empty är function Empty (L:Stack) return Boolean is begin return L.Len = 0; end Empty; ( ) g) En användare av en instantiering av paketet kan lagra upp till hundra element av den typ som är den aktuella parametern för den formella parametern Item ( ) h) Programmeringsspråket Ada har fått sitt namn från American Drug Association ( ) 2012-06-11 Tentamen DVA103 7/8
Namn/ID : Det är bara denna sida som ska lämnas in! 1 a b c d e f g h Summa 2 3 4 5 6 Total 2012-06-11 Tentamen DVA103 8/8