Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Tentamen DE14, IMIT14 och SYST14 samt öppen för alla (Ifylles av student) (Ifylles av student) Tentamensdatum: 2015-03-27 Tid: 09:00 13:00 Hjälpmedel: Inga hjälpmedel. Totalt antal poäng på tentamen: 46 poäng För att få respektive betyg krävs: Preliminärt: G >= 23 poäng, VG >= 34 poäng Allmänna anvisningar: OBS!! Den som skriver en tentamen måste visa att han/hon behärskar problemområdet. Många gånger är det möjligt att exemplifiera och illustrera. I dessa fall är det oftast det bästa sättet - ibland även det enda sättet - och kan i högsta grad påverka poängsättningen vid bedömningen av svaret. Om du tycker att uppgifterna i tentamenstexten är ofullständiga skall du göra egna antaganden för de uppgifter som du saknar. OBS! Redovisa dina egna antaganden. Skriv in dina lösningar direkt i tentamenshäftet. Om du behöver mer utrymme än vad som finns i häftet måste du tydligt ange på tilläggsbladen vilken uppgift de tillhör. Skriv namn och personnummer på varje inlämnat blad. Skriv tydligt på endast en sida av pappersarket. Påbörja nytt blad för varje ny uppgift. Lämna uppgifterna i nummerordning. Markera (på omslagsbladet) vilka uppgifter du lämnat lösning på Svårlästa lösningar kan inte bedömas! Glöm inte att läsa frågorna mycket noga! Rättningstiden är normalt tjugo arbetsdagar, det vill säga resultatet kommer att anslås senast fredag den 24 april 2015 Viktigt! Glöm inte att skriva namn och personnummer på alla blad du lämnar in. Lycka till! Ansvarig lärare: Telefonnummer: Anna Palmquist och Petter Dessne
Högskolan i Borås 2015-03-27 sida 2 (av 16) Uppgift 1 (15 p) Ge korta men tydliga svar på följande frågor: a). Var i arbetsminnet/primärminnet lagras värdet för variabler av värdetyp? (1p) b) Vilket nyckelord (keyword) gör så att ett objekt skapas i datorns arbetsminne? (1p) c) Skriv en typdefinition för en sammansatt strukturtyp (av referenstyp) med namnet Anställd. Posten skall innehålla namnet på den anställde, anställningsnummer, avdelning samt befattning. Använd lämpliga datatyper. (2p) d) Givet att en vektor deklareras enligt följande: double[, ]försäljning = new double[8, 10]; Hur många kolumner har vektorn? (1p) Hur många element har vektorn? (1p)
Högskolan i Borås 2015-03-27 sida 3 (av 16) e) Givet följande kodrader: int counter = 0; while (counter < 100) Console.WriteLine(counter); counter++; Vilket är det första värdet som kommer att skrivas ut och vilket är det värde som kommer att skrivas ut allra sist? (2p) f) Givet att en vektor deklarerats som int anarray [1000], vilket av nedanstående metodanrop är ett giltigt anrop till metoden DisplayContents(), när man vill skicka hela vektorn som ett argument. (1p) 1) DisplayContents(int anarray[1000]); 2) DisplayContents(anArray[1000]); 3) DispalyContents(anArray[]); 4) DisplayContents(anArray); g) Utforma en metod som skriver ut siffrorna 1-10 med hjälp av en while-loop. (4 p)
Högskolan i Borås 2015-03-27 sida 4 (av 16) h) Fyll i nedanstående de saknade orden som alla har med objektorientering att göra. (Termerna är hämtade från föreläsningen i objektorientering.) Ser du inte med en gång vad det ska vara så gissa! (2p) Ett är en instans (ett exemplar) av en klass. En ärver attribut, properties och metoder från sin basklass. attribut och metoder kan kommas åt genom att skapa en instans och använda punktoperatorn, t.ex. dog.printdog( Rufus, Tax, true); För att kunna skriva metoder i Program-klassen används nyckelordet.
Högskolan i Borås 2015-03-27 sida 5 (av 16) Uppgift 2 (9 p) I källkoden nedan har ett antal fel smugit sig in. Din uppgift är att ringa in de felaktiga koddelarna och numrera ställena. Skriv sedan i den heldragna rutan på nästa sida motivering/förklaring till respektive fel. Markerade fel utan korrekt motivering/förklaring ger inga poäng. namespace T150327_Felsök class Program static void Meny() Console.WriteLine("\n\n***** MENY *****"); Console.WriteLine("################"); Console.WriteLine(" 1 beräkna medelvärde"); Console.WriteLine(" 2 beräkna maxvärde"); Console.WriteLine(" 0 AVSLUTA \n"); static int Las_in_alternativ() int svar; Console.WriteLine("\n Ange alternativ: "); svar = Console.ReadLine(); static double Medelvarde() double tal1, tal2; Console.WriteLine(" Ange två tal: "); tal1 = int.parse(console.readline()); tal2 = int.parse(console.readline()); Console.WriteLine(); return (tal1 + tal2) / 2.0; static double Max(tal1, tal2) if (tal1 > tal2) return tal1 else return tal2; //****************************************************** static void main(string[] args) double tal1, tal2, resultat; int svar = 1; while (svar!= 0) meny(); svar = Las_in_alternativ(); Console.Clear(); if (svar = = 1) resultat = Medelvarde(tal1, tal2); Console.WriteLine("Medelvarde : " + resultat); else if (svar = = 2) Console.WriteLine(" Ange två tal: "); tal1 = int.parse(console.readline()); tal2 = int.parse(console.readline()); resultat = Max(tal1, tal2); Console.WriteLine("\nMaxvarde : " + resultat); else if (svar!= 0); Console.WriteLine("\n Felaktigt val! \n"); Console.WriteLine( HEJ DÅ );
Högskolan i Borås 2015-03-27 sida 6 (av 16) Motiveringar/förklaringar till uppgift 2: (1 poäng per korrekt motivering.)
Högskolan i Borås 2015-03-27 sida 7 (av 16) Uppgift 3 (6 p) Förutsättningar Golfklubben Marks GK har planer på att ersätta sina manuella resultatkort med en enkel konsolapplikation för handdator. Med hjälp av applikationen vill man kunna hålla reda på en spelomgångs samtliga spelare och antal slag per hål. För att hålla ordning på spelarna har man skapat en sammansatt typ, Spelare, som håller reda på hur många slag respektive spelare har slagit under en spelomgång. namespace MarksGK public class Spelare public string namn; public string klubb; public int[] resultat; //Ett element/fack per hål. Inläsning från fil Din uppgift är att komplettera koden till metoden Ladda, som skall läsa in innehållet från filen spelare.txt till vektorn spelare. Vid inläsningen, från fil, skapar du således en Spelare-post per rad, varefter den, när posten initierats korrekt, skall läggas till vektorn spelare via metoden LäggTillSpelare. Komplettera koden i den heldragna rutan på nästa sida.
Högskolan i Borås 2015-03-27 sida 8 (av 16) public static void Ladda() StreamReader infil = new StreamReader("spelare.txt"); string rad; while ((rad = infil.readline())!= null) string[] fält = rad.split('\t'); LäggTillSpelare(m); infil.close();
Högskolan i Borås 2015-03-27 sida 9 (av 16) Uppgift 4 (6 p) Redogör för hur man utökar en vektor med en post. Du kan välja vilken datatyp du vill för vektorn. Skriv vad algoritmen för att utöka en vektor gör, alltså ungefär så här: Rita gärna! 1. Från början skickas den gamla vektorn in i metoden. 2. Därefter Skriv också lämplig programkod för detta (alltså kod som gör det du skriver ovan).
Högskolan i Borås 2015-03-27 sida 10 (av 16) Uppgift 5 (10 p) Här nedan ser du ett fullständigt program för att skapa hemliga koder till FBI. Tyvärr har programmeraren (Penelope) varit mycket slarvig med både kommentarer och namngivning och därför är det upp till dig att förstå vad koden gör. Din uppgift består i att 1) skriva vad varje metod i Program.cs gör och hur den arbetar och att 2) skriva ned vad utskriften från programmet blir, när man skriver in följande värden: XXX Laban yyy zzz Skriv dina svar i den heldragna rutan på sidan 12. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SecretKey class Program static void Main(string[] args) Console.WriteLine("*****************************************"); Console.WriteLine("*****************************************"); Console.WriteLine("******* WELCOME TO THE FEDS :) ********"); Console.WriteLine("*****************************************"); Console.WriteLine("*****************************************"); Console.WriteLine(); Console.WriteLine("Enter your password."); string pw = ""; bool ok = false; while (!ok) pw = Console.ReadLine().ToUpper(); if ((pw == "XXX") (pw == "YYY") (pw == "ZZZ")) ok = true; if (!ok) Console.WriteLine(); Console.WriteLine("Not a valid password."); Console.WriteLine("Enter your password."); string[] arr = Method1(pw); int keycode = Method3(arr); Console.WriteLine("The keycode is " + keycode); Console.ReadLine();
Högskolan i Borås 2015-03-27 sida 11 (av 16) private static string[] Method1(string selection) string[] arr = "", "", "" ; PasswordPhrase pwp = new PasswordPhrase(); if (selection == "XXX") arr = Method2(pwp.arr1); if (selection == "YYY") arr = Method2(pwp.arr2); if (selection == "ZZZ") arr = Method2(pwp.arr3); return arr; private static string[] Method2(string[] verysecretphrase) string[] arr = "", "", "" ; for (int i = 0; i < verysecretphrase.length; i++) bool found = false; if (verysecretphrase[i].contains("f")) found = true; if (verysecretphrase[i].contains("b")) found = true; if (verysecretphrase[i].contains("i")) found = true; if (found == true) arr[i] = verysecretphrase[i]; return arr; private static int Method3(string[] phrase) int sum = 0; for (int i = 0; i < phrase.length; i++) if (phrase[i]!= "") sum += phrase[i].length; return sum * 42; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SecretKey public class PasswordPhrase public string[] arr1 = "We", "fight", "crime" ; public string[] arr2 = "Really", "cool", "badge" ; public string[] arr3 = "Don't", "be", "evil" ;
Högskolan i Borås 2015-03-27 sida 12 (av 16) Svar till uppgift 5: Här är tentamensuppgifterna slut.
Högskolan i Borås 2015-03-27 sida 13 (av 16) Sammanställning flödesdiagram Utökning av vektor Minskning av vektor
Högskolan i Borås 2015-03-27 sida 14 (av 16) Swap BubbleSort
Högskolan i Borås 2015-03-27 sida 15 (av 16) ExchangeSort Linjär sökning
Högskolan i Borås 2015-03-27 sida 16 (av 16) Binär sökning