203-03-9 203-03-9 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6 poäng Denna tentamen är inte betygsgrundande Övrigt Om du fastnar på en uppgift, gå vidare. Det är bättre att svara med ett halvt svar än inget alls. Källkoden du skriver skall följa god stil. Läs igenom varje uppgift och se till att svara på alla delmoment i frågan. - Svar_Lösning.docx Page of 7
203-03-9 203-03-9 Uppgift Vad innebär pascal case och camel case (p)? PascalCase - camelcase På vilken eller vilka av följande medlemstyper i en klass används pascal case (p): a) Metoder PascalCase b) Properites PascalCase c) Fält camelcase Uppgift 2 Uppgift 3 När är automatiska properties motiverade att använda, och när bör vanliga properties användas? Idet fall då man vill ha möjlighetetn att bådet läsa och skriva till en property är det motiverat att använda automatiska propterties, och i de fall då man vill begränsa tillgängliheten eller verifiera in-/utmatiningen så är vanliga properties bra att använda Vad skrivs ut när nedanstående kod körs, och varför? Using System; Class Program static void Main() int x = 5, y = 2; Pow(x, y); Console.WriteLine( 0 gånger blir 2, x, y, x); static void Multiply(int x, int y) x = x * y; Utskriften blir : 5 gånger 2 blir 5 Därför att vi sparar inte resultatet från metoden Pow någon stans och vi använder oss inte av metoden Multiply - Svar_Lösning.docx Page 2 of 7
203-03-9 203-03-9 Uppgift 4 Uppgift 5 Uppgift 6 ( poäng) Varför går det att typomvandla en instans av String till Object, dvs. varför kan en Objectreferens användas för att referera till en String-instans? Det går att göra denna konvertering på grunda av att Object är en grundklass som string ärver från. Därför går det att konvertera till objekt, och av samman andledning kan man använda det för att referera till en String-instans. (4 poäng) Implementera enligt uml-schema nedan. Ingen extra logik skall skrivas, det räcker att ni följer schemat och att koden kan tänkas kompileras utan fel. Inga namespace-angivelser behövs, endas kod för klasser och interface. class Note «interface» IPlayable public string Name get;set; public float Hz get;set; +Play() Note WindInstrument +LowRange : Note +Name : string +Hz : float Skriv kod för hur du skapar en vektor som innehåller talen 6, 2, -5 och 42. Du får själv fundera ut en lämplig datatyp. int myarray = int[] 6, 2, -5, 42; Interface IPlayable Void Play(); class WindInstrument : IPlayable public Note LowRange get; set; public void Play() - Svar_Lösning.docx Page 3 of 7
203-03-9 203-03-9 Uppgift 7 (7 poäng) Skriv ett komplett program som läser in två heltal och skriver ut det största av dem. Utskriften skall göras med en format string. För att avgöra vilket tal som är störst ska villkorsoperatorn användas. Allt ska utföras i Main-metoden. All kod skall ingå, dvs. det skall räcka att skriva in din kod för att kunna kompilera ett komplett program. Tänk på att följa god kodstandard. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DiagnostisktProv_uppgift7 class Program static void Main(string[] args) Console.WriteLine("Detta program kommer att jämföra två tal."); Console.WriteLine("Mata in det första talet:"); int tal = Convert.ToInt32(Console.ReadLine(); Console.WriteLine("Mata in det andra talet:"); int tal2 = Convert.ToInt32(Console.ReadLine(); if( ta > tal2) Console.WriteLine("Det första talet (0) är störst", tal); else Console.WriteLine("Det andra talet (0) ör det största", tal2); Console.ReadLine(); - Svar_Lösning.docx Page 4 of 7
203-03-9 203-03-9 Uppgift 8 (5 poäng) Typen double har metoden Parse(String) som används för att göra om en sträng till double. Exempel på användning: double pi = double.parse( 3.4 ); Om inparametern inte kan göras om till en double så kastar metoden ett undantag. Din uppgift: Skapa en statisk metod som läser in en sträng som användaren matar in på tangentbordet, och returnerar strängen omvandlad som en double. För omvandlingen skall metoden double.parse användas. Din metod ska hantera undantaget som eventuellt kastas genom att skriva ett meddelande och fråga användaren igen, ända tills korrekt inläsning gjorts. Metoden behöver inte omges av en klass. Din metod kan användas så här: Static void Main() Conslole.Write( Mata in ett decimaltal: ); Double d = LaesInDouble(); Console.WriteLine( Du matade in + d); Exempel på körning (inmatning i fetstil): Mata in ett decimaltal: kalle Felaktig inmatning, försök igen: olle Felaktig inmatning, försök igen:.23 Du matade in,23 public static Double LaesInDouble() bool bfortsättattlaesain = true; string sinlaesttal = Console.ReadLine(); Double dsvar = 0; while (bfortsättattlaesain) try dsvar = Convert.ToDouble(sInlaestTal); bfortsättattlaesain = false; catch Console.Write("Felaktig inmatining, försök igen: "); sinlaesttal = Console.ReadLine(); return dsvar; - Svar_Lösning.docx Page 5 of 7
203-03-9 203-03-9 Uppgift 9 (3 poäng) Skapa och initiera en variabel av typen System.Collections.Generic.Dictionary där nycklar är en String och värdet en DateTime. Anta att namespace:t är importerat redan, skriv endast kod som skapar och initierar variablen. Dictionary<string, DateTime> mydic; Uppgift 0 (4 poäng) Skriv en klass enligt UML-diagrammet nedan. Du får själv räkna ut vilka privata medlemmar som behövs. Metoden Uttag skall kasta ett undantag av typen ArgumentException med förklarande felmeddelande om amount är större än tillgängligt saldo. Inga namespace-angivelser behövs, men all övrig kod ska ingå. Tänk på att följa god objektorienterad stil, dvs. kapsla datamedlemmar osv. Konto +Kontonr : int +Saldo : double +Konto(in kontonr : int) +Insättning(in amount : double) +Uttag(in amount : double) Detta är den enda konstruktorn i klassen class Konto private double mysaldo; private int myaccountnumber; public int Kontonr get return myaccountnumber; public double Saldo get return mysaldo; public Konto(int kontonr) myaccountnumber = kontonr; mysaldo = 0; public void Insättning(double amount) mysaldo = mysaldo + amount; public void Uttag(double amount) if (amount > mysaldo) throw new ArgumentException("Du kan inte ta ut mer än vad som finns tillgänglig på kontot"); mysaldo = mysaldo - amount; - Svar_Lösning.docx Page 6 of 7
203-03-9 203-03-9 Uppgift Uppgift 2 (7 poäng) Förklara skillnaden mellan att gömma en metod i basklassen och att överlagra den. I vilket av fallen talar man om polymorfism? Vilka nyckelord används var och när? När man gömmer en metod så gör man den till privat i basklassen. Den kommer då inte att synas i subklasserna. Överlagring: då skapar man flera metoder med samma namn men med olika signatur. Förklara i ordalag hur en kortlek sorteras med hjälp av insertion sort. För enkelhetens skull kan vi utgå från att endast färgen klöver finns i leken. Insättning Sortera itererar, konsumerar en ingång inslag varje repetition, och växande en sortera resultatet lista. På en upprepning, avlägsnar insättning Sortera en del av indata, finner plats den hör i den sorterade listan och infogar det där. Det upprepas tills inga inmatningselement kvar. - Svar_Lösning.docx Page 7 of 7