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: 2014-12-13 Tid: 09.30 13.30 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) En dator består av huvuddelarna? A. CPU, Bildskärm, Periferienhet Processor, Minne, In/Ut Moderkort, Primärminne, Sekundärminne D. Tangentbord, Processor, Bildskärm (b) En processor följer vanligtvis en instruktionscykel med stegen? A. Memory, Decode, och Datapath Cycle Fetch, Execute, och Interrupt Cycle Register, Prefetch, och Arithmethic Cycle D. Bus, Data, och Control Cycle (c) Trenden för framtidens datorer kommer främst att vara att? A. Öka databussens bredd Öka antalet register Öka klockans hastighet D. Öka antalet kärnor (d) Informationen som ingår i ett virtuellt minne, lagras normalt sett i en? A. Cache Hårddisk MMU D. DMA (e) I säkerhetssyfte så växlar processorn i princip sin exekvering regelbundet mellan? A. Control och Execute mode. Safe och Alert mode. Basic och Advanced mode. D. Kernel och User mode. (5p) 1
2. Svara med något av de angivna alternativen på följande frågor. (a) Processorn i en C64 avgör i vilken riktning som villkorliga hopp skall ta via? A. Programräknaren (PC) Ackumulatorn (A) Stackpekaren (SP) D. Flaggor i Statusregistret (SR) (b) Översättningsprocessen från källkod till exekverbar kod kan indelas i de tre huvudstegen? A. Exekvering, Interpretering, Kodgenerering Tolkning (eng. Parsing), Grammatikanalys, Kodgenerering Interpretering, Kodgenerering, Syntaxanalys D. Lexikalanalys, Tolkning (eng. Parsing), Kodgenerering (c) Programspråket BASIC är ett programspråk? A. Logiskt Objektorienterad Imperativt D. Funktionellt (d) Hastigheten på exekveringen av ett program kan ordnas i minskande ordning enligt? A. Interpretator, JIT-kompilator, Assembler, Kompilator JIT-kompilator, Kompilator, Interpretator, Assembler Assembler, Kompilator, JIT-kompilator, Interpretator D. Kompilator, Assembler, Interpretator, JIT-kompilator (e) Ett huvudproblem med parallella program är att samtidig åtkomst till gemensam data kan innebära risk för? A. Felaktig exekvering Felaktig information Överhettning av processorn D. Långsamma program (5p) 2
3. Svara med något av de angivna alternativen på följande frågor. (a) En funktion med typen [Integer] -> Bool -> Bool? A. Tar in en lista av heltal och ett booleskt värde som argument och returnerar ett booleskt värde som resultat. Tar in en lista av heltal och två booleska värden som argument. Tar in en funktion av typen lista av heltal till booleskt värde som argument och returnerar ett booleskt värde som resultat. D. Tar in en mängd (Set) och ett booleskt värde som argument. (b) Funktionen map som tar in en funktion, som tar ett argument av godtycklig typ, och en lista med element av samma typ som argument och returnerar resultatet av att applicera funktionen på vart och ett av elementen i listan har typen? A. a -> b -> [a] -> [b] (a -> [a]) -> [a] (a -> b) -> [a] -> [b] D. (a -> a) -> [a] -> [a] (c) Vad är sant om programspråket Haskell? A. Det som skrivs i.hs källkodsfilen är definitioner, d.v.s. namngivna uttryck. Alla funktioner är antingen sanna eller falska. Listor och par är de enda sammansatta datatyperna i Haskell. D. Ett Haskell program består av en sekvens av kommandon. (d) Funktionen foo är definierad enligt följande foo x y = if y == [] then x else foo (tail y) x Vilket av följande påståenden gäller för f? A. Funktionens typ är a -> [b] -> b. Funktionen tar in en lista och ett värde som argument och producerar en lista vars element är värdet ihopsatt med elementen från listan. Funktionens första argument måste vara av listtyp. D. Funktionen är felaktigt formulerad och kan därför inte laddas in (p.g.a. syntax- eller typfel). (e) Vad är sant om funktionen filter :: (a -> Bool) -> [a] -> [a]? A. Funktionen tar en funktion som tar ett argument av typen a och returnerar ett booleskt värde som sitt första argument. Funktionen tar ett värde av typen a, ett värde av typen Bool och en lista med element av typen a som argument. Funktionens första argument är en funktion som används för att göra om varje element i dess andra argument till ett element i resultatet. D. Funktionens första argument är en funktion som tar ett värde av typen a och ett värde av typen Bool som argument och returnerar ett värde av typen [a]. (5p) 3
4. Svara med något av de angivna alternativen på följande frågor. (a) Vilket av följande påståenden om programspråket Prolog är sant? A. Rekursion används ofta i Prolog. Prolog är speciellt lämpat för numeriska beräkningar. Prolog använder lat evaluering. D. En fråga i Prolog kan inte ha flera svar. (b) Ett predikat p(a,b,c) i Prolog? A. Är en lista eller ett heltal. Definierar en relation över sina 3 argument. Kan beräknas till ett värde av vilken typ som helst. D. Är alltid en funktion med 2 argument som beräknar ett returvärde i (c) Vad är sant om predikatet fob( ) nedan? fob(0). fob(x) :- X > 0, NX is X-1, fob(nx). A. Predikatet är deklarativt. Predikatet är sant för alla positiva och negativa heltal. Predikatet är syntaktiskt felaktigt och kan inte laddas in eller köras. D. Predikatet använder inte rekursion. (d) Vad blir svaret på följande Prolog-fråga ingredient(rice,3)=ingredient(i,2)? A. true. false. I=rice. D. rice=i. (e) Listan [1,2,3] och mönstret [A, _, B] matchar? A. Aldrig. Om A instansieras till 1 och B till [2,3]. Om A instansieras till 1 och B till 3. D. Om A instansieras till 1 och B till [3]. (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 LDA $2000,1008 CMP #$02,100A BEQ $100E,100C LDA #$02 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 #$02,1002 STA $2000,1005 INC $2000,1008 CMP #$02,100A BEQ $100E,100C LDA #$03 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 DEC $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 #$05,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 ANNA=2 20 ANITA=3 30 PRINT ANITA+ANNA*4 (b) Vad blir utskriften från nedanstående program om användaren matar in talen 3 och 2? 10 B=4 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 4 och 3? 10 INPUT B 20 INPUT A 30 IF ((B<4) OR (A>2)) AND NOT (A>8) THEN B=B-1 40 IF (A>4) OR ((B>2) AND NOT (B<8)) THEN A=A+1 50 PRINT A+B 7
(d) Vad blir utskriften från nedanstående program? 10 FOR X=5 TO 6 20 FOR Y=2 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=9 TO 1 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,1,1] givet nedanstående definition av sm? sm [_] = 1 sm (x:xs) = 2*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 (-) 2 givet nedanstående definition av f? f x y = y x y D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (c) Vad blir värdet på uttrycket fob 3 givet nedanstående definition av funktionen fob? fob 0 = 2 fob 1 = 3 fob n = fob (n-1) + fob (n-2) D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning 9
(d) Vad blir värdet på uttrycket foldr f 1 [1,2,3] givet nedanstående definition av funktionerna f och foldr? foldr op init [] = init foldr op init (x:xs) = op x (foldr op init xs) f x y = x * y D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (e) Vad blir värdet på uttrycket length (gen 3) givet nedanstående definition av funktionerna gen och length? gen x = x:gen (x-1) length [] = 0 length (_:xs) = 1 + length xs 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(7,[1,2,3,4]). givet definitionen av predikatet mm() nedan? mm(_, []). mm(x, [Y YS]) :- X \= Y, mm(x, YS). A. true false (b) Vad blir svaret på frågan f(4, 0, N). givet definitionen av predikatet f() nedan? f(0, A, A). f(1, _, 0). f(n, B, A) :- N1 is N-2, B1 is N+B, f(n1, B1, A). A. true false <Ange det eller de värden på N som Prolog svarar med> (c) Vad blir svaret på frågan lt([1,2]). givet definitionen av predikatet lt() nedan? lt([_ _]). A. true false 11
(d) Vad blir svaret på frågan small(x),dark(x). givet faktan och reglerna nedan? large(pumpkin). large(melon). small(apple). small(orange). orange(pumpkin). yellow(melon). green(apple). red(apple). orange(orange). dark(z) :- orange(z). dark(z) :- red(z). A. true false <Ange det eller de värden på X som Prolog svarar med> (e) Vad blir svaret på frågan px(z,[1,2,3]). givet definitionen av predikatet px() nedan? px([],[]). px([x Xs],[X Ys]) :- px(ys,xs). A. true false <Ange det eller de värden på 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