Programmering och Programspråk Provmoment: Ladokkod: Tentamen ges för: Tentamen NPL011 Systemarkitektprogrammet 7,5 högskolepoäng Anonym student-id: Tentamensdatum: 2015-11-03 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 (Gideon Mbiydzenyuy, Jens Holgersson) Telefonnummer: 033 435 4426 (4227, 4219)
Svarsblankett Anonym student-id: 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 von Neumann och detta beror bland annat på att A. von Neumans dator möjliggör ett programkoncept där instruktioner kan lagras, hämtas och exekveras från ett gemensamt minne. von Neumans datorkoncept bygger på en avancerad processorteknik. von Neumans datorkoncept tillåter olika typer av beräkningar. D. von Neumans datorkoncept möjliggör ett programkoncept som är lätt för människor att förstå. (b) En processor huvudsakligen har som uppgift att? A. Skydda operativsystemet Hantera kommunikation med periferienheter Hantera lagring av data med hjälp av register D. Hantera ändring av värden med hjälp av ALU (c) Alla processorer exekverar enligt följande ordning? A. Avhämtning, exekvering och avkodning Avkodning, exekvering, programräknare Avhämtning, avkodning, ALU och programräknare D. Programräknare, Avkodning, Register (d) MMU möjliggör ett virtuellt minne genom att? A. Skydda program från oönskade intrång. Att ändra vilket minne som är åtkomligt vid schedulering Upptäcka program som har gått sönder, och som t.ex. skriver i minne som är avsett för kod. D. Hålla reda på vilka delar av programmet som finns i minnet. (e) Din granne köpte två likadana HP bärbara datorer med 14 tums skärm från Elgiganten till sina två barn som börjar på gymnasiet. Bland specifikationerna för varje dator är: RAM 1600MHz. Efter att ha använt datorerna i endast en vecka visade sig att den ena var snabbare än den andra. Eftersom din granne vet att du pluggar datorutbildning på HB, bestämmer de för att söka din hjälp att förklara varför. Vilken av följande skulle du kunna rekommendera till din granne? A. Det är tillverkningsfel, lämna tillbaka datorn till Elgiganten Datorerna kan behöva olika klockcykler för att exekvera varje instruktion Det kan vara fel som uppstod under transport D. Hastighet på datorerna är inte samma 1
2. Svara med något av de angivna alternativen på följande frågor. (a) När processorn i en C64 har slutfört en instruktion, för att ta reda på nästa instruktion som ska exekveras använder processorn? A. Programräknaren (PC) Ackumulatorn (A) Stackpekaren (SP) D. Flaggor i Statusregistret (SR) (b) För att köra källkodprogram på en dator måste följande processer exekveras? A. Tolkning (eng. Parsing), Grammatikanalys, Kodgenerering Interpretering, Kodgenerering, Syntaxanalys Lexikalanalys, Tolkning (eng. Parsing), Kodgenerering D. Exekvering, Interpretering, Kodgenerering (c) Hur skiljer sig ett programspråk i tredje generation som BASIC från ett annat programmeringsspråk i fjärde generation som Java? A. För att tredje generations programmeringsspråk kan använda sig av högnivåprimitiver För att tredje generations programmeringsspråk kör på alla datorer men inte fjärde generations programmeringsspråk För att tredje generations programmeringsspråk klassas som imperativ medan fjärde generations programmeringsspråk kan vara imperativ men också objektorienterad D. För att tredje generations programmeringsspråk kan använda sig av lågnivåprimitiver (d) Interpretator kan göra ett program långsammare. Detta beror på att? A. Den behöver själv kompilera till maskinkod Den kräver en del resurser under kompilering Nej, inte om den använder JIT-interpretator D. Det beror på vilken processor finns i datorn (e) Ett program som implementeras med hänsyn till parallellisering har förmåga att? A. Använda flera processorer samtidigt Förkorta klockcykeln för varje instruktion Spara minnet på bästa sätt D. Köra flera programdelar samtidigt (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 en lista av booleska värden som argument. Tar in en funktion av typen lista av heltal till lista av booleska värden som argument och returnerar ett booleskt värde som resultat. D. Tar in en mängd (Set) och en lista av booleska värden som argument. (b) Funktionen foldr som tar in en funktion, som tar två argument av två godtyckliga typer och returnerar ett resultat av den senare typen; ett värde av samma typ som funktionens andra argument; och en lista med element av samma typ som funktionens första argument och returnerar resultatet (av samma typ som funktionens andra argument) av att applicera funktionen mellan vart och ett av elementen i listan har typen? A. a -> b -> [a] -> [b] (a -> b -> b) -> b -> [a] -> b a -> b -> b -> b -> [a] -> b D. (a -> b) -> b -> [a] -> b (c) Vad är sant om programspråket Haskell? A. Det som skrivs i.hs källkodsfilen är definitioner, d.v.s. namngivna uttryck. Listor och par är de enda sammansatta datatyperna i Haskell. Ett Haskell program består av en sekvens av kommandon. D. Alla funktioner är antingen sanna eller falska. (d) Funktionen foo är definierad enligt följande foo x = if x == 0 then [] else x:foo (x-1) Vilket av följande påståenden gäller för f? A. Funktionens typ är a -> [b]. Funktionens första argument måste vara av listtyp. Funktionen tar in ett numeriskt värde som argument och producerar en lista av numeriska värden. 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 map :: (a -> b) -> [a] -> [b]? 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 b 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 aldrig i Prolog. Prolog är speciellt lämpat för numeriska beräkningar. Prolog använder lat evaluering. D. En fråga i Prolog kan 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 vara sant för listvärden med 3 element. D. Är alltid en funktion med 2 argument som beräknar ett returvärde i (c) Vad är sant om predikatet fob( ) nedan? fob([_]). fob([x XS]) :- fob(xs). A. Predikatet är syntaktiskt felaktigt och kan inte laddas in eller köras. Predikatet är sant för alla list-värden. Predikatet är inte deklarativt. D. Predikatet använder inte rekursion. (d) Vad blir svaret på följande Prolog-fråga ingredient(rice,3)=ingredient(i,_).? 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 2. D. Om A instansieras till 1 och B till [2]. (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 #$04,1002 STA $2000,1005 JSR $2000,1008 CMP #$03,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 #$05,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?,1009 LDA $2000,100C CLC,100D JSR $FFD2,100F ADC #$01,1012 STA $2000,1014 CMP #$09,1016 BNE $1009 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 CLC,1005 INC $2000,1006 ADC #$03,1008 CMP #$05,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 DEC $2000,1006 CMP #$01,1008 BEQ $1010,100A ADC #$02,100C CMP #$04,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 JAN=3 20 NILS = JAN 30 NISSE = 4 40 JAN = NILS + NISSE 50 PRINT NISSE+NILS*2-JAN (b) Vad blir utskriften från nedanstående program om användaren matar in talen 3 och 4? 10 B=2 20 INPUT A 30 B = A 40 INPUT C 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) AND (A>4)) AND NOT (A>9) THEN B=B-1 40 IF (A>4) OR ((B>2) AND NOT (B<9)) THEN A=A+1 50 PRINT A+B 7
(d) Vad blir utskriften från nedanstående program? 10 FOR X=0 TO 3 20 FOR Y=1 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 11 STEP 3 20 GOSUB 100 30 NEXT X 40 PRINT S 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 f [3,2,1] givet nedanstående definition av f? f [_] = 1 f (x:xs) = x*x + f xs D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (b) Vad blir värdet på uttrycket g 3 (+) givet nedanstående definition av g? g x y = y x x D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (c) Vad blir värdet på uttrycket fun 3 givet nedanstående definition av funktionen fun? fun 0 = [] fun 1 = [1] fun n = fun (n-1) ++ fun (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 filter f [3,2,1] givet nedanstående definition av funktionerna filter och f? filter p [] = [] filter p (x:xs) = if p x then x : filter p xs else filter p xs f x = x+x == x*x D. Inget, funktionsdefinitionerna eller uttrycket är felaktigt och ger typfel eller kraschar vid körning (e) Vad blir värdet på uttrycket take 3 (gen 3) givet nedanstående definition av funktionerna gen och length? gen x = x:gen (x+1) take 0 xs = [] take n [] = error "taking too many elements" take n (x:xs) = x : take (n-1) 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(5,[1,2,3,4,5,6,7]). givet definitionen av predikatet mm() nedan? mm(_, [Y,YS]). mm(x, [Y YS]) :- X \= Y, mm(x, YS). A. true false (b) Vad blir svaret på frågan f(s(s(0)), B, s(s(s(0)))). givet definitionen av predikatet f() nedan? f(0, B, B). f(s(a), B, N) :- f(a, s(b), N). 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]). A. true false 11
(d) Vad blir svaret på frågan dark(y),large(y). 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å Y som Prolog svarar med> (e) Vad blir svaret på frågan px(z,[3,2,1]). givet definitionen av predikatet px() nedan? px([],[]). px([x,x Xs],[X Ys]) :- px(xs,ys). 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