Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla TentamensKod: Tentamensdatum: 180322 Tid: 09.00 13.00 Hjälpmedel: Inga hjälpmedel Totalt antal poäng på tentamen: 43 poäng För att få respektive betyg krävs: G >= 21 poäng, VG >= 32 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 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! Nästkommande tentamenstillfälle: 180509 Rättningstiden är i normalfall 15 arbetsdagar, till detta tillkommer upp till 5 arbetsdagar för administration, annars är det detta datum som gäller: Viktigt! Glöm inte att skriva Tentamenskod på alla blad du lämnar in. Lycka till! Ansvarig lärare: Telefonnummer:
Högskolan i Borås 2018-03-22 sida 2 (av 17) Uppgift 1 (14 p) Ge korta men tydliga svar på följande frågor: a) Vilket av nedanstående alternativ är namnet på en namnrymd som behövs för konsolapplikationer? (1p) 1) using 2) Console 3) System.Console 4) Write 5) System b) Vilken typ av loop är det bästa alternativet om vill att loopen ska iterera mints en gång? (1p) 1) foreach 2) for 3) while 4) do while 5) ingen av ovanstående c) Vilket värde kommer variabeln inputvalue att ha efter exekvering av följande kodrader? (1p) int inputvalue = 0; if (inputvalue > 5) inputvalue = inputvalue + 5; else if (inputvalue > 2) inputvalue = inputvalue + 10; else inputvalue = inputvalue + 15;
Högskolan i Borås 2018-03-22 sida 3 (av 17) d) Använd nedanstående deklaration: int [] vector = {34,55,67,89,99}; Vad blir resultatet av följande utskriftssatser? (2p) - Console.WriteLine(vektor.Length); - Console.WriteLine(vektor[2]); e) Skapa en klass Fastighet för att hålla reda på fastighetsobjekt. Varje fastighetsobjekt ska ha en gatuadress, ett byggnadsår, ett inköpspris, en månadskostnad och en hyresinkomst. Ange lämpliga datatyper för attributen. (2p) f) Ge ett exempel på vad som kan orsaka ett IndexOutOfRangeException undantag? (2p)
Högskolan i Borås 2018-03-22 sida 4 (av 17) g) Utforma en for-loop som skriver ut vart tionde tal med början på 10 och som fortsätter till och med 100. (3p) h) Fyll i orden som saknas! (2p) a) En vanlig hund har namn och ras, medan en arbetshund har namn, ras och arbetsområde. En arbetshund är alltså en hund, men den har också några egna egenskaper. Inom OO är detta exempel på.. b) Ett objekt är en.. av en klass.
Högskolan i Borås 2018-03-22 sida 5 (av 17) Uppgift 2 (8 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 din motivering till respektive fel. 1 poäng per korrekt motiverat fel. Markerade fel utan korrekt motivering ger inga poäng. using System; namespace T180322_Upp_2 { class Error { static void Main() { int VAL1; string avalue; val1 = GETVal1(aValue); Console.WriteLine("value entered, plus one is {0}", ++val1); Console.ReadKey(); } static GETVal1() { Console.Write("Enter a value: "); avalue = Console.readline(); val1 = int.parse(avalue); return int VAL1; } } }
Högskolan i Borås 2018-03-22 sida 6 (av 17) Motiveringar/förklaringar till felen i koden på föregående sida:
Högskolan i Borås 2018-03-22 sida 7 (av 17) Uppgift 3 (4 p) Felhantering Din uppgift här är att skriva om koden för metoden Main till att hantera fel genom att fånga ett undantag. static void Main(string[] args) { Console.WriteLine("Mata in ett heltal: "); string s = Console.ReadLine(); int i; i = int.parse(s); } static void Main(string[] args) { }
Högskolan i Borås 2018-03-22 sida 8 (av 17) Uppgift 4 (5 p) Några vanliga typer av sökalgoritmer är linjärsökning och binärsökning. De används på helt olika sätt och eftersom de har väldigt olika förutsättningar används de därför också i helt olika sammanhang. Beskriv översiktligt hur de fungerar och ge ett exempel för respektive algoritm på när de används. Beskriv gärna också genom att rita. Du behöver inte skriva någon kod eller rita något flödesdiagram.
Högskolan i Borås 2018-03-22 sida 9 (av 17) Uppgift 5 (12 p) Här nedan ser du ett enkelt register för att registrera fortkörningar. Först anges maxhastigheten för den sträcka som ska studeras, t.ex. 70 eller 90. Därefter skrivs registreringsnummer och hastighet in för varje bil som passerar. Programmet kan lista alla fordon som passerat och även beräkna medelhastigheten för dem som har kört för fort. Din uppgift består i att bygga delar av programmet, nämligen: 1. Skapa och skriva all kod för loopen i Main-metoden 2. Skapa och skriva all kod för metoden BeräknaMedelhastighet, som alltså räknar ut snitthastigheten för dem som kört för fort 3. Skapa och skriva all kod för metoden BeräknaAntal, som tar fram antal personer som har kört för fort. (Skälet till att denna beräkning ligger som en egen metod är att den anropas från flera håll, i det här fallet dels varje gång programloopen gås igenom och dels från metoden BeräknaMedelhastighet.) Nedan beskrivs vad de olika metoderna ska göra. Att notera: Programmet innehåller en vektor (array) kallad registreringar, som är en global variabel i klassen Program, det vill säga den nås från alla metoder i klassen (så du behöver inte skicka runt den mellan metoderna). Vektorn innehåller ett antal objekt av typen Registrering. En registrering innehåller i sin tur ett regnr (string) och en hastighet (double). Programfilen innehåller också en variabel kallad hastighetsgräns, som även den nås av alla metoder i klassen. Alla metoder ligger i klassen Program. Därför behöver du ange nyckelordet static framför metodnamnen. Du behöver inte kommentera din kod. Början av programkoden syns nedan (och är med för att visa de globala variablerna). using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Fortkörningsregistret { class Program { static Registrering[] registreringar = new Registrering[0]; static int hastighetsgräns = 0;
Högskolan i Borås 2018-03-22 sida 10 (av 17) Loopen i Mainmetoden Loopen ska, precis som i era projekt, anropa olika metoder: NyRegistrering, BeräknaMedelhastighet och BeräknaAntal. BeräknaAntal är den enda metod som tar emot eller returnerar några värden. Om man trycker A så ska man gå ur loopen (därmed avslutas programmet). För varje gång man går igenom listan ska det skrivas ut hur många som har kört för fort. Därför ska du anropa metoden BeräknaAntal i slutet av loopen. Se även bilden nedan! Här visas först ett exempel på när en registrering läggs till och sedan beräknas hur många som kört för fort. (Du behöver alltså bara skriva koden för själva loopen, det vill säga där det står Tryck N för att ) Metoden BeräknaAntal Metoden kontrollerar hur många resultat i listan som överskrider maxgränsen, t.ex. 70. Antalet fortkörningar returneras. Metoden BeräknaMedelhastighet Först anropas metoden BeräknaAntal för att hitta antalet fortkörare (detta hade också kunnat göras med en räknare inne i denna metod). Ifall ingen har kört för fort så skriv ut ett meddelande (se nästa rubrik). Avsluta sedan metoden, annars skulle den krascha (när du försöker dela med noll). Beräkna sedan medelhastigheten för dem som kört för fort och skriv ut ett meddelande, som bilden visar, på nästa sida
Högskolan i Borås 2018-03-22 sida 11 (av 17) Om listan är tom Om listan är tom så ges ett meddelande från BeräknaMedelhastighet. I bilden nedan ser du vad som händer om man först trycker M (för att beräkna medelhastigheten) om listan är tom.
Högskolan i Borås 2018-03-22 sida 12 (av 17) Svar fråga 5
Högskolan i Borås 2018-03-22 sida 13 (av 17) Här är tentamensuppgifterna slut.
Högskolan i Borås 2018-03-22 sida 14 (av 17) Sammanställning flödesdiagram Utökning av vektor Minskning av vektor
Högskolan i Borås 2018-03-22 sida 15 (av 17) Swap BubbleSort
Högskolan i Borås 2018-03-22 sida 16 (av 17) ExchangeSort Linjär sökning