Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 DE16, IMIT16, SYST16 och ITEK15 samt öppen för alla TentamensKod: Tentamensdatum: 170323 Tid: 09.00 13.00 Hjälpmedel: Inga hjälpmedel Totalt antal poäng på tentamen: 45 poäng För att få respektive betyg krävs: G >= 22 poäng, VG >= 33 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: 170511 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: Anna Palmquist samt Petter Dessne Telefonnummer: 0734-612003
Högskolan i Borås 2017-03-23 sida 2 (av 16) Uppgift 1 (15 p) Ge korta men tydliga svar på följande frågor: a) Vilket/vilka variabelnamn är inte korrekta samt ange varför de inte är korrekta? (1p) 1. myvariableisgood 2. 99Flake 3 _floor 4. time2getjiggywidit 5. wrox.co b) Är följande villkor sant eller falskt? Antag att a = 2 och c = 6. (1p) 6 <= c && a > 3 c) Betrakta följande kodrader: int nbra = 2; int nbrb = nbra + 3; int nbrc = 2 * (nbra + nbrb) + 1; nbra = nbrc / 3; nbrc = 0; Gör upp en tabell över variablerna och notera variablernas värden när tilldelningssatserna exekveras. (2p)
Högskolan i Borås 2017-03-23 sida 3 (av 16) d) Ange en nackdel med att använda generella catch-hanterare? (1p) e) Givet följande deklaration av en heltalsvektor : int[] values = 4, 7, 6, 8, 2 ; Vad kommer vart och ett av nedanstående kodrader att visa? (3p) Console.WriteLine(values[4]); int x = values[2] + values[3]; Console.WriteLine(x); x = ++values[1]; Console.WriteLine(x); f) Inom objektorientering pratar man om privata och publika attribut. Vad är skillnaden? (2p) g) Skriv kodraderna för att ta emot två heltal från en användare och avsluta med att visa de två heltalen samt summan av dem. (5 p)
Högskolan i Borås 2017-03-23 sida 4 (av 16) Uppgift 2 (7 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. using System; namespace Uppg_2_T170323 class Program static void main(string[] args) double sum = 0, number = 0; int count = 0; double min = double.maxvalue; //Konstant som representerar det största möjliga värdet. double max = double.minvalue; //Konstant som representerar det minsta möjliga värdet. while ((number = Enter()) == 0) sum += number; ++count; if (min > number) min = number; if (max < number) max = number; Print(count, sum, min, max); static double Enter(); Console.Write("Enter a number (enter 0 to stop): "); double d = 0; while (!double.tryparse(console.readline(), out d)) Console.WriteLine(Must be a numeric value); static void Print(double count, double sum, double min, double max) if (count > 0) Console.WriteLine("Number of entered numbers: 0, 10:D", count); Console.WriteLine("The sum of the numbers: 0, 10:f", sum); Console.WriteLine("The smallest number: 0, 10:F", min); Console.WriteLine("The highest number: 0, 10:F", max); Console.WriteLine("Average: 0, 10:F", sum * count); else Console.WriteLine("There are no numbers entered...");
Högskolan i Borås 2017-03-23 sida 5 (av 16) Uppgift 2. Motiveringar/förklaringar till felen i koden på föregående sida:
Högskolan i Borås 2017-03-23 sida 6 (av 16) Uppgift 3 (6 p) Programfel och felhantering Vilka tre huvudtyper av fel kan uppstå när man konstruerar ett program? Beskriv respektive feltyp och ange hur de kan åtgärdas.
Högskolan i Borås 2017-03-23 sida 7 (av 16) Uppgift 4 (4 p) En av de mest användbara algoritmerna inom programmering är Swap. Beskriv vad swapmetoden är till för och hur den fungerar. Beskriv gärna genom att använda ett exempel (rita gärna). Skriv också koden för själva swap-algoritmen (du behöver inte skriva kod för metodhuvudet).
Högskolan i Borås 2017-03-23 sida 8 (av 16) Uppgift 5 (13 p) Världens länder har väldigt olika många invånare. Din uppgift är att skapa stora delar av ett program som beräknar den genomsnittliga folkmängden i länder som har fler invånare än ett visst värde. Om användaren skriver in siffran femtio miljoner kommer alltså programmet att beräkna medelvärdet för de länder i listan som har fler invånare än just femtio miljoner. Annorlunda uttryckt: de länder som har färre än femtio miljoner invånare kommer inte att tas med i beräkningen. I bilderna nedan ser du hur det ska se ut. Utskriftraderna i början av programmet behöver du inte skriva (de raderna finns utskrivna härunder) och inte heller klassen med länder och deras folkmängder. Här beräknas genomsnittet för alla länder i listan som har fler än 100.000.000 invånare. Här visas resultatet. Här syns också namn och folkmängd för de länder som ingår i beräkningen. Observera att listan inte är sorterad (och heller inte behöver vara det).
Högskolan i Borås 2017-03-23 sida 9 (av 16) På bilden ovan har en till sökning gjorts, denna gång med värdet 50.000. Därmed syns alla länder i listan. (Bry dig inte om folkmängderna i respektive land de är påhittade.) Din uppgift består i att: 1. Skriva färdigt metoden Main 2. Skapa och skriva all kod för metoden HittaLänderMedVissFolkmängd 3. Skapa och skriva all kod för metoden BeräknaOchSkrivUt. Nedan beskrivs vad de olika metoderna ska göra. Main Skapa en loop som gör att användaren kan testa med flera värden, ända tills han eller hon skriver något annat än bokstaven F (eller f). Värdet som användaren skriver ska göras om till ett tal. Du kan i det här fallet utgå från att användaren skriver ett heltal utan blanksteg och att värdet är mellan noll och två miljarder. När användaren angett ett värde så ska det skickas till metoden HittaLänderMedVissFolkmängd. (Därefter är du klar med Main-metoden.) HittaLänderMedVissFolkmängd Metoden ska ta emot värdet från Main. Sedan ska det skriva ut namn och folkmängd för varje land som har fler invånare än värdet som skickats in i metoden. Slutligen ska metoden anropa en annan metod, BeräknaOchSkrivUt, med värdet från användaren, summa antal människor för alla länder som uppfyllde villkoret och slutligen antal länder.
Högskolan i Borås 2017-03-23 sida 10 (av 16) BeräknaOchSkrivUt Här beräknas medelvärdet för de länder som har fler invånare än det värde som skrevs in av användaren. Obs att du inte behöver bry dig om hur man dividerar heltal. För att utföra sin beräkning tar metoden emot lämpliga variabler från metoden HittaLänderMedVissFolkmängd. Det här är en ganska omfattande uppgift. Ifall du inte vet hur delar av den ska lösas så skriv den kod du kan. Skriv då i klartext ifall det är något steg du hoppar över, så att det går att följa ditt resonemang. [Här kommer programkoden] using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Folkmängd class Program static Land[] länder = new Land[10]; static void Main(string[] args) FyllLänder(); Console.WriteLine("*********************************"); Console.WriteLine("******* F O L K M Ä N G D *******"); Console.WriteLine("*********************************"); Console.WriteLine("Programmet räknar ut den genomsnittliga folkmängden " + "för alla länder som har en viss folkmängd."); Console.WriteLine(); [DIN KOD HÄR (skriv den på lösblad)] /// <summary> /// Länderna får sina värden /// </summary> static void FyllLänder() länder[0] = new Land("Danmark", 3500000); länder[1] = new Land("Indien", 720400000); länder[2] = new Land("Laos", 6200000); länder[3] = new Land("USA", 310000000); länder[4] = new Land("Japan", 185000000); länder[5] = new Land("Mexico", 255000000); länder[6] = new Land("Island", 400000); länder[7] = new Land("Nigeria", 140000000); länder[8] = new Land("Holland", 8700000); länder[9] = new Land("Polen", 9500000); [DIN KOD HÄR (skriv den på lösblad)]
Högskolan i Borås 2017-03-23 sida 11 (av 16) Här är tentamensuppgifterna slut.
Högskolan i Borås 2017-03-23 sida 12 (av 16) Sammanställning flödesdiagram Utökning av vektor Minskning av vektor
Högskolan i Borås 2017-03-23 sida 13 (av 16) Swap BubbleSort
Högskolan i Borås 2017-03-23 sida 14 (av 16) ExchangeSort Linjär sökning
Högskolan i Borås 2017-03-23 sida 15 (av 16) Binär sökning