Lena Kallin Westin Institutionen för datavetenskap Umeå universitet 2005-06-06 TENTAMEN Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa Inlämnad Poäng Kurs : Programmeringsteknisk översiktskurs för yrkeshögskoleprogram, 5p. (TDBA75) Datum : 050606 Namn (texta) : Personnummer : : Epost @cs.umu.se Namnteckning Sida 1 av 5 TDBA75 Tentamen 2005-06-06 TENTAMEN Programmeringsteknisk översiktskurs för yrkeshögskoleprogram, 5p. (TDBA75) Datum : 050606 Tid : 9-15 Hjälpmedel : Inga (Ordbok tillåten) Antal Uppgifter : 9 Poäng : 40 • Kryssa för de uppgifter du lämnar in • Skriv lösningarna med en uppgift per sida! • Lösningarna skall vara snyggt och prydligt nedskrivna. Tankegången skall vara lätt att följa. Alla antaganden som inte är uppenbara skall redovisas. Tips! • Försök på alla uppgifter! Uppgifterna är ordnade efter poäng, inte svårighetsgrad. • Om du inte kan lösa en av flera deluppgifter, gör lämpliga antaganden och gå vidare till efterföljande deluppgifter. Skriv kommentarer i koden om du inte kommer på hur koden ska se ut. • Uppgifter kan vara felformulerade, fråga om du är osäker eller tycker att något verkar konstigt. Läraren kommer till salen ca 11.00 och kan även nås via telefon. • Det är ditt ansvar att övertyga om att du besitter den kunskap som efterfrågas. • Det är viktigt att du löser den givna uppgiften! Lycka till! Information om tentamensvisning kommer via mail när tentorna är rättade. Sida 2 av 5 TDBA75 Tentamen 2005-06-06 Uppgift 1 (2 poäng) Vad är ett virus i datorsammanhang? Uppgift 2 (3 poäng) Vad är en brandvägg och vilka skadliga ”gärningar” kan en sådan skydda från? Uppgift 3 (4 poäng) Välj två av de programmeringsparadigmer (familjer av programspråk) vi gått igenom på kursen och beskriv dem, jämför dem med varandra och visa på likheter och skillnader. Uppgift 4 (4 poäng) Vad kommer att skrivas ut när nedanstående program exekveras (körs)? Visa tydligt (tex genom en tabell) vad som händer i varje steg. Dim intNumber As Integer Dim intSum As Integer Dim intLimit As Integer intLimit = 10 intNumber = 0 intSum = 0 While intSum <= intLimit intNumber = intNumber +1 intSum = intSum + 2 * intNumber MsgBox(intNumber & ” ” & intSum) Wend Uppgift 5 (3 poäng) Skriv om loopen i uppgift 4 som en do until-loop istället. Uppgift 6 (4 poäng) Skriv en funktion evenSum som tar ett heltal n som parameter och returnerar summan av de jämna talen från 2 upp till n. Funktionen ska alltså ha följande huvud Public Function evenSum(n As Integer) As Integer Exempel: evenSum(8) ska bli 20 (= 2 + 4 + 6 + 8) medan evenSum(13) ska bli 42 (=2 + 4 + 6 + 8 + 10 + 12) Om du behöver det så får du anta att det finns en funktion Even som tar ett heltal och returnerar True om talet är udda och annars False. Sida 3 av 5 TDBA75 Tentamen 2005-06-06 Uppgift 7 (6 poäng) Utgå från följande värden: Dim x As Double Dim y As double Dim m As Integer Dim n As Integer Dim s As String Dim t As String x = 2.5 y = -1.5 m = 18 n = 4 s = "Hej" t = "hopp" Vilka värden har följande uttryck? 1) 2) 3) 4) 5) 6) x + 5 * s + Not s + 1 - n * y x – n / t (x < 0) n (1 - (1 (x + n) * y 5.0 And (n > 0) - (1 -(1 - n)))) Uppgift 8 (6 poäng) I Visual Basic kan man ha två olika slags parametrar, de som är ByRef och de som är ByVal. Vad innebär de olika typerna, vilken av dem är default och hur fungerar de? Beskriv och använd exempel för att förklara hur det fungerar. Uppgift 9 (8 poäng) Det finns en enkel (och ineffektiv) algoritm för att hitta alla primtal som är mindre än ett visst tal. (Ett primtal är ett tal som enbart är jämnt delbart med 1 och talet självt.) Algoritmen bygger på att man ”stryker” alla efterföljande multipler av ett primtal, eftersom dessa per definition inte kan vara primtal. Man startar med talet 2 som är ett primtal och stryker alla multipler av 2. Därefter går man vidare med nästa primtal, dvs. nästa ej ”strukna” tal osv. Exempel: undersök vilka tal som är primtal upp till 20. 1 2 3 4 ^ 5 6 ^ — 7 8 ^ 9 10 11 12 13 14 15 16 17 18 19 20 ^ ^ ^ ^ ^ ^ — — — — o o o Då talet 2 är ett primtal stryks alla tal som är multiplar av 2 , visas med ^ (uppåtpilen). Sen kommer vi till 3 (även det primtal), alla multiplar av 3 stryks, här markerat med — Sida 4 av 5 TDBA75 Tentamen 2005-06-06 (strecket). Nästa tal är 4 som inte är ett primtal (uppåtpilen visar att 2:an gjorde så att 4 ej kan vara ett primtal). Efter 4 kommer 5, som inte är struken och alltså ett primtal. Alla multiplar av 5 stryks, vilket markerats med o (den lilla cirkeln). Nästa tal, 6, är inte ett primtal då både 2 och 3 (uppåtpilen och strecket) strukit talet 6. På detta sätt behandlar algoritmen tal för tal till vi når 20. Algoritmen kan implementeras genom att man skapar en array bestående av boolska värden, vi kallar denna array för tal. Arrayens syfte är att hålla reda på om ett visst tal är ett primtal eller ej, om tal(i) har värdet true så är i ett primtal. Algoritm Initialisera arrayen genom att för alla tal i = 1..n: Sätt tal(i) = true För alla tal i=2..n: Om tal(i) är true Sätt tal(j) = false då j=k*i (k = 2, 3, ... så länge j mindre än n) Skriv ett programavsnitt som implementerar algoritmen ovan. Du behöver alltså inte bry dig om att skriva hur arrayen får sina värden. Sida 5 av 5