Programmering och Programspråk Provmoment: Ladokkod: Tentamen ges för: Tentamen NPL011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: 2013-08-30 Tid: 09.00 13.00 Hjälpmedel: Inga hjälpmedel Totalt antal poäng på tentamen: För att få respektive betyg krävs: G=22 VG=33 40 poäng Allmänna anvisningar: Skriv dina svar på svarsblanketten. Markera och ange alla svar tydligt och entydigt efter instruktionerna. Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvarig lärare: Håkan Sundell (Anders Gidenstam) Telefonnummer: 033 435 4426 (4214)
Svarsblankett Namn: (Ifylles av student) Personnummer: (Ifylles av student) Uppgift 1: A B C D a) b) c) d) e) Uppgift 4: A B C D a) b) c) d) e) Uppgift 2: A B C D a) b) c) d) e) Uppgift 5: A B C D a) Svar: b) Svar: c) d) Svar: e) Svar: Uppgift 3: A B C D a) b) c) d) e) Uppgift 6: A B C D a) Svar: b) Svar: c) Svar: d) Svar: e) Svar: Uppgift 7: Uppgift 8: A B C D a) Svar: b) Svar: c) Svar: d) Svar: e) Svar: A B C D a) Svar: b) Svar: c) Svar: d) Svar: e) Svar: 2
1. Svara med något av de angivna alternativen på följande frågor. (a) Moderna datorer bygger på en design av? A. Gordon Moore Von Neumann Bill Gates D. Gene Amdahl (b) En processor innehåller huvudsakligen enheter för? A. Cache, MMU, DMA Register, Avkodning, ALU Bus, Data, Interrupt D. Kontroll, Klocka, Address (c) Observationen om hur mycket ett programs prestanda kan öka på parallella datorer kallas för? A. Gates dilemma Moores lag Amdahls lag D. Von Neumanns teorem (d) Ett virtuellt minne kan främst möjliggöras med hjälp av? A. Hårddisk MMU DMA D. Cache (e) Vilken av följande processor (-familjer) används/användes i huvudsak för mobiltelefoner och inbyggda system? A. Z80 ARM 68000 D. x86 (5p) 1
2. Svara med något av de angivna alternativen på följande frågor. (a) Processorn i en C64 håller reda på vilken byte i minnet som härnäst skall läsas in för avkodning och exekvering via? A. Ackumulatorn (A) Stackpekaren (SP) Flaggor i Statusregistret (SR) D. Programräknaren (PC) (b) Översättningsprocessen från källkod till exekverbar kod kan indelas i de tre huvudstegen? A. Tolkning (eng. Parsing), Grammatikanalys, Kodgenerering Interpretering, Kodgenerering, Syntaxanalys Lexikalanalys, Tolkning (eng. Parsing), Kodgenerering D. Exekvering, Interpretering, Kodgenerering (c) Programspråket BASIC kan kategoriseras som ett språk av? A. Första graden Andra graden Tredje graden D. Fjärde graden (d) Hastigheten på exekveringen av ett program kan ordnas i ökande ordning enligt? A. Assembler, Interpretator, Kompilator, JIT-kompilator Interpretator, JIT-kompilator, Kompilator, Assembler JIT-kompilator, Assembler, Interpretator, Kompilator D. Kompilator, Assembler, JIT-kompilator, Interpretator (e) Parallella program innebär att? A. Datorn har flera processorer Flera program körs samtidigt Datorns processor är superskalär D. Flera delar av ett program körs samtidigt (5p) 2
3. Svara med något av de angivna alternativen på följande frågor. (a) En funktion med typen a -> [a]? A. Tar in ett argument av godtycklig typ som argument och returnerar en lista med element av samma typ som argumentet. Tar in en lista med element av en godtycklig typ som argument och returnerar en lista med element av en annan godtycklig typ som resultat. Tar in en lista med element av en godtycklig typ som argument och returnerar ett värde av samma typ som elementen som resultat. D. Tar in ett argument av godtycklig typ och returnerar en lista med element av en godtycklig typ som resultat. (b) Funktionen zip som tar in två listor som vardera innehåller värden av en godtycklig typ som argument och returnerar en lista med par av ett element, ett från vardera listan, som resultat har typen? A. ([a],[b]) -> [(a,b)] [(a,b)] -> ([a],[b]) [a] -> [b] -> [(a,b)] D. [(a -> b)] -> ([a] -> [b]) (c) Vad är sant om programspråket Haskell? A. Alla funktioner i Haskell kan beräknas till ett värde. Ett Haskell program består av en sekvens av kommandon. Alla funktioner är antingen sanna eller falska. D. Alla uttryck i Haskell har en given typ. (d) Funktionen foo är definierad enligt följande foo x = if x == 0 then x else foo (x-1) + x Vilket av följande påståenden gäller för f? A. Funktionens typ är [a] -> [a]. Funktionens argument måste vara av en numerisk typ (Num a). Funktionen tar in ett värde som argument och producerar en lista vars element är antingen värdet eller 0. D. Funktionen är felaktigt formulerad och kan därför inte laddas in (p.g.a. syntax- eller typfel). (e) Funktionen filter :: (a->bool)->[a]->[a] är en funktion som? A. Tar in en funktion som tar ett argument och en lista som argument och returnerar resultatet av att applicera funktionen på vart och ett av elementen i listan. Tar in en boolesk funktion som tar ett argument och en lista som argument och tar bort de element i listan som inte uppfyller den booleska funktionen. Tar in ett värde av en godtycklig typ och en lista med element av samma typ som argument och tar bort de element i listan som är lika med värdet. D. Tar in en funktion som tar två argument, ett initial värde och en lista som argument och returnerar resultatet av att med hjälp av funktionen vika ihop alla elementen i listan till ett värde. (5p) 3
4. Svara med något av de angivna alternativen på följande frågor. (a) Vad är sant om Prolog frågan predecessor(x, pam).? A. pam är en variabel. pam är ett predikat. X är en konstant. D. X är en variabel. (d) När Prolog får frågan b(x,y),a(x). kommer Prolog? A. Svara falskt. Generera alla värden på X1 som uppfyller predikatet a(x1) och alla värden på X2 och Y som uppfyller predikatet b(x2,y) och därefter kombinera ihop ett svar genom att kräva att X1 är lika med X2. Först undersöka predikatet a(x) för att hitta ett värde för X som gör predikatet sant, och därefter undersöka om det finns ett värde på Y så att predikatet b(x,y) är sant givet det tidigare funna värdet på X. D. Först undersöka predikatet b(x,y) för att hitta värden på X och Y så att predikatet är sant, och därefter undersöka om predikatet a(x) är sant för det tidigare funna värdet på X. (b) Kontrollstrategin i Prolog är? A. Höger-till-vänster, djupet först. Vänster-till-höger, djupet först. Höger-till-vänster, bredden först. D. Vänster-till-höger, bredden först. (e) Operatorn = används i Prolog för att? A. Testa om två objekt är identiska (lika utan instantiera fler obundna variabler). Testa om två objekt kan göras identiska och gör dem så, genom att om så krävs instantiera obundna variabler. Testa om två objekt har samma struktur. D. Framtvinga evaluering av och binda en variabel till värdet av ett av aritmetiskt uttryck. (e) Listan [1,2,3,4,5] och mönstret [A, B, C] matchar? A. Aldrig Om A instansieras till 1, B till 2 och C till [3,4,5]. Om A instansieras till 1, B till 2 och C till 3. D. Om A instansieras till 1, B till [2,3,4] och C till 5. (5p) 4
5. Studera följande givna ASSEMBLER-program för Commodore 64. Svara kortfattat på var och en av frågorna med ett av de givna alternativen, alternativt ett specifikt värde. (a) Vad har ackumulatorn för värde när programmet når adressen $100E?,1000 LDA #$03,1002 STA $2000,1005 DEC $2000,1008 CMP #$02,100A BEQ $100E,100C LDA #$04 D. Okänt, då programmet kraschar under körning (b) Vilket värde har minnet på adress $2000 när programmet antingen når adressen $100E eller kraschar?,1000 LDA #$03,1002 STA $2000,1005 DEC $2000,1008 CMP #$02,100A BEQ $100E,100C LDA #$01 D. Okänt, då programmet kraschar under körning (c) Vad blir utskriften från nedanstående program, om vi antar att minnet på adress $2000 har värdet $00?,1000 LDA $2000,1003 CLC,1004 ADC #$31,1006 JSR $FFD2,1009 LDA $2000,100C CLC,100D ADC #$01,100F STA $2000,1012 CMP #$09,1014 BNE $1000 A. Siffrorna 0 till och med 9 Siffrorna 1 till och med 9 Siffrorna 1 till och med 8 5
(d) Vilket värde har minnet på adress $2000 när programmet når adressen $100C, givet att minnet på adress $2000 har värdet $01 från början?,1000 LDA #$02,1002 INC $2000,1005 SEC,1006 ADC #$03,1008 CMP #$09,100A BNE $1002 (e) Vilket värde har minnet på adress $2000 när programmet når adressen $1010, givet att minnet på adress $2000 har värdet $01 från början?,1000 LDA #$02,1002 SEC,1003 INC $2000,1006 CMP #$01,1008 BEQ $1010,100A ADC #$02,100C CMP #$08,100E BNE $1002 (5p) 6
6. Studera följande givna BASIC-program för Commodore 64. Svara kortfattat på var och en av frågorna med ett av de givna alternativen, alternativt ett specifikt värde. (a) Vad blir utskriften från nedanstående program? 10 ARNE=2 20 ARNOLD=3 30 PRINT ARNOLD+ARNE*3 (b) Vad blir utskriften från nedanstående program om användaren matar in talen 3 och 4? 10 B=1 20 INPUT A : INPUT B 30 PRINT A+B+C (c) Vad blir utskriften från nedanstående program om användaren matar in talen 3 och 4? 10 INPUT B 20 INPUT A 30 IF ((B<4) OR (A>2)) AND NOT (A>10) THEN B=B-1 40 IF (A>4) OR ((B>2) AND NOT (B<10)) THEN A=A+1 50 PRINT A+B 7
(d) Vad blir utskriften från nedanstående program? 10 FOR X=1 TO 3 20 FOR Y=3 TO 5 30 S=S+1 40 NEXT Y : NEXT X 50 PRINT S (e) Vad blir utskriften från nedanstående program? 10 FOR X=2 TO 9 STEP 2 20 GOSUB 100 30 NEXT X 40 PRINT M 50 END 100 N=N+1 110 S=S+X 120 M=S/N 130 RETURN (5p) 8
7. Studera följande givna HASKELL-program noga. Svara kortfattat på var och en av frågorna med ett av de givna alternativen. (a) Vad blir värdet på uttrycket sm [1,2,3] givet nedanstående definition av sm? sm [] = 0 sm (x:xs) = x*x + sm xs D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (b) Vad blir värdet på uttrycket f == 12 givet nedanstående definition av f? f = head [0, f] D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (c) Vad blir värdet på uttrycket fob 5 givet nedanstående definition av funktionen fob? fob 0 = 1 fob n = fob (n-3) D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning 9
(d) Vad blir värdet på uttrycket map f [1,2,3] givet nedanstående definition av funktionerna f och map? map p [] = [] map p (x:xs) = p x : map p xs f 0 = True f 1 = False f n = f (n-2) D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (e) Vad blir värdet på uttrycket and (gen True) givet nedanstående definition av funktionerna gen och and och not? gen x = x:gen (not x) and [] = False and (x:xs) = if x then and xs else x not True = False not False = True D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (5p) 10
8. Studera följande givna PROLOG-program noga. Svara kortfattat på var och en av frågorna med ett av de givna alternativen. (a) Vad blir svaret på frågan mm(3, [1,2,3,4,5]). givet definitionen av predikatet mm() nedan? mm(x, []). mm(x, [Y YS]) :- X \= Y, mm(x, YS). A. true false <Ange det eller de värden på X som Prolog svarar med> (b) Vad blir svaret på frågan en(3). givet definitionen av predikatet en() nedan? en(0). en(n) :- N1 is N-1, en(n1). A. true false <Ange det eller de värden på N som Prolog svarar med> (c) Vad blir svaret på frågan lt([z]). givet definitionen av predikatet lt() nedan? lt([_ _]). A. true false <Ange det eller de värden på Z som Prolog svarar med> 11
(d) Vad blir svaret på frågan big(x),dark(x). givet faktan och reglerna nedan? big(bear). big(elephant). small(cat). small(rat). brown(bear). brown(rat). black(cat). gray(elephant). dark(z) :- black(z). dark(z) :- brown(z). A. true false <Ange det eller de värden på X som Prolog svarar med> (e) Vad blir svaret på frågan px([1,y], [Z,2]). givet definitionen av predikatet px() nedan? px([],[]). px([x Xs],[X Ys]) :- px(xs,ys). A. true false <Ange det eller de värden på Y och Z som Prolog svarar med> (5p) 12
Lathund 6502 Assembler Syntax Semantik LDA #<value> A value LDA <address> A memory STA <address> memory A CMP #<value> Z C V N (A value) CMP <address> Z C V N (A memory) BEQ <address> if Z=1 then PC address BNE <address> if Z=0 then PC address DEC <address> memory memory - 1 INC <address> memory memory + 1 CLC C 0 ADC <value> A A + value + C SBC <value> A A - value not C JMP <address> PC address JSR <address> save PC on stack. PC address RTS restore PC from stack. Kernal subrutin $FFE4 $FFD2 A key currently pressed on keyboard prints out ASCII-code in A as character on screen Maskinkodsmonitorns inbyggda hjälp visas med: F1 ASCII x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf 2x bla nk! " # $ % & ' ( ) * +, -. / 3x 0 1 2 3 4 5 6 7 8 9 : ; < = >? 4x @ A B C D E F G H I J K L M N O 5x P Q R S T U V W X Y Z [ \ ] ^ _ 13
Lathund BASIC Syntax Semantik <var> = <expr> variable var value of expr GOTO <nr> execute code with line nr IF <expr> THEN <nr> if boolean expr is true then execute code with line nr PRINT <expr> display value of expr PRINT string display character string INPUT <var> variable var value inputted from user FOR <var>=<start> TO <stop> STEP <step> var start. for every loop increase var with step until var is equal to stop. NEXT <var> execute next loop-lap of corresponding FOR END end execution RUN <nr> start execution at code line nr LIST display current program 14
LATHUND HASKELL Namn på identifierare för värden (funktioner är också värden) börjar med liten bokstav, exempel: map, filter Namn på typer börjar med stor bokstav, exempel: Int, Double Mönstret _ matchar vilket värde som helst Listvärden skrivs inom [ ], exempel [1,2,3] Vid mönstermatchning och konstruktion av listor används : för att skilja huvud från svans, exempel: (x:xs) Syntax Semantik x = 42 Identifieraren x har värdet 42 f x = x+2 f är en funktion som tar ett argument, x, och returnerar värdet x+2 Main> f 4 6 :: Integer Kör funktionen f i Hugs 15
LATHUND PROLOG Predikat, konstanter, strukturer börjar med liten bokstav, exempel: member, john, date Variabler börjar med stor bokstav, exempel: X, Head _ betecknar den anonyma variabeln Listor skrivs inom [ ] används för att skilja huvud från svans, exempel: [Head Tail] Tilldelning av aritmetiskt värde görs med is. Syntax Semantik man(john). faktum (eng. fact) likes(john,x) :- likes(x,wine). regel (eng. rule)?- likes(john, X). fråga (eng. question)?- Y is 5*6+7. fråga (eng. question) 16