08.09.2013 Views

Diagnostiskt Prov – Svar_Lösning

Diagnostiskt Prov – Svar_Lösning

Diagnostiskt Prov – Svar_Lösning

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Tid<br />

Author<br />

Martin Winstrand<br />

Approved by<br />

Klockan 09.00-12.00<br />

Hjälpmedel<br />

Inga<br />

Antaganden<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong><br />

Document tag<br />

For internal use only<br />

Document receiver<br />

DIAGNOSTISKT PROV<br />

Version Copies Appendices<br />

1.0.0 1 (none)<br />

Creation date Last saved<br />

2013-03-19 2013-03-19<br />

Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.<br />

Rättning<br />

Tentamen omfattar 61 poäng<br />

Denna tentamen är inte betygsgrundande<br />

Övrigt<br />

Om du fastnar på en uppgift, gå vidare. Det är bättre att svara med ett halvt svar än inget<br />

alls. Källkoden du skriver skall följa god stil. Läs igenom varje uppgift och se till att<br />

svara på alla delmoment i frågan.<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong> - <strong>Svar</strong>_<strong>Lösning</strong>.docx Page 1 of 7


Author<br />

Martin Winstrand<br />

Approved by<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong><br />

Document tag<br />

For internal use only<br />

Document receiver<br />

Uppgift 1 (2 poäng)<br />

Vad innebär pascal case och camel case (1p)?<br />

PascalCase - camelCase<br />

På vilken eller vilka av följande medlemstyper i en klass används pascal case (1p):<br />

a) Metoder PascalCase<br />

b) Properites PascalCase<br />

c) Fält camelCase<br />

Uppgift 2 (2 poäng)<br />

Version Copies Appendices<br />

1.0.0 1 (none)<br />

Creation date Last saved<br />

2013-03-19 2013-03-19<br />

När är automatiska properties motiverade att använda, och när bör ”vanliga” properties<br />

användas?<br />

Idet fall då man vill ha möjlighetetn att bådet läsa och skriva till en property är det<br />

motiverat att använda automatiska propterties, och i de fall då man vill begränsa<br />

tillgängliheten eller verifiera in-/utmatiningen så är vanliga properties bra att använda<br />

Uppgift 3 (2 poäng)<br />

Vad skrivs ut när nedanstående kod körs, och varför?<br />

Using System;<br />

Class Program<br />

{<br />

static void Main()<br />

{<br />

int x = 5, y = 2;<br />

Pow(x, y);<br />

Console.WriteLine(“{0} gånger {1} blir {2}”, x, y,<br />

x);<br />

}<br />

}<br />

static void Multiply(int x, int y)<br />

{<br />

x = x * y;<br />

}<br />

Utskriften blir :<br />

5 gånger 2 blir 5<br />

Därför att vi sparar inte resultatet från metoden Pow någon stans och vi använder oss inte<br />

av metoden Multiply<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong> - <strong>Svar</strong>_<strong>Lösning</strong>.docx Page 2 of 7


Author<br />

Martin Winstrand<br />

Approved by<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong><br />

Document tag<br />

For internal use only<br />

Document receiver<br />

Uppgift 4 (1 poäng)<br />

Version Copies Appendices<br />

1.0.0 1 (none)<br />

Creation date Last saved<br />

2013-03-19 2013-03-19<br />

Varför går det att typomvandla en instans av String till Object, dvs. varför kan en Objectreferens<br />

användas för att referera till en String-instans?<br />

Det går att göra denna konvertering på grunda av att Object är en grundklass som string<br />

ärver från. Därför går det att konvertera till objekt, och av samman andledning kan man<br />

använda det för att referera till en String-instans.<br />

Uppgift 5 (14 poäng)<br />

Implementera enligt uml-schema nedan. Ingen extra logik skall skrivas, det räcker att ni<br />

följer schemat och att koden kan tänkas kompileras utan fel. Inga namespace-angivelser<br />

behövs, endas kod för klasser och interface.<br />

«interface» IPlayable<br />

+Play()<br />

WindInstrument<br />

+LowRange : Note<br />

Note<br />

+Name : string<br />

+Hz : float<br />

Uppgift 6 (2 poäng)<br />

Skriv kod för hur du skapar en vektor som innehåller talen 6, 12, -5 och 42. Du får själv<br />

fundera ut en lämplig datatyp.<br />

int myArray = int[] {6, 12, -5, 42};<br />

class Note {<br />

public string Name {get;set;}<br />

public float Hz {get;set;}<br />

}<br />

Interface IPlayable {<br />

Void Play();<br />

}<br />

class WindInstrument : IPlayable {<br />

public Note LowRange {get; set;}<br />

public void Play() {<br />

}<br />

}<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong> - <strong>Svar</strong>_<strong>Lösning</strong>.docx Page 3 of 7


Author<br />

Martin Winstrand<br />

Approved by<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong><br />

Document tag<br />

For internal use only<br />

Document receiver<br />

Uppgift 7 (7 poäng)<br />

Version Copies Appendices<br />

1.0.0 1 (none)<br />

Creation date Last saved<br />

2013-03-19 2013-03-19<br />

Skriv ett komplett program som läser in två heltal och skriver ut det största av dem.<br />

Utskriften skall göras med en format string. För att avgöra vilket tal som är störst ska<br />

villkorsoperatorn användas. Allt ska utföras i Main-metoden. All kod skall ingå, dvs. det<br />

skall räcka att skriva in din kod för att kunna kompilera ett komplett program. Tänk på att<br />

följa god kodstandard.<br />

using System;<br />

using System.Collections.Generic;<br />

using System.Linq;<br />

using System.Text;<br />

namespace <strong>Diagnostiskt</strong><strong>Prov</strong>_uppgift7<br />

{<br />

class Program<br />

{<br />

static void Main(string[] args)<br />

{<br />

Console.WriteLine("Detta program kommer att jämföra två tal.");<br />

Console.WriteLine("Mata in det första talet:");<br />

int tal1 = Convert.ToInt32(Console.ReadLine();<br />

Console.WriteLine("Mata in det andra talet:");<br />

int tal2 = Convert.ToInt32(Console.ReadLine();<br />

}<br />

}<br />

}<br />

if( ta1 > tal2)<br />

Console.WriteLine("Det första talet ({0}) är störst", tal1);<br />

else<br />

Console.WriteLine("Det andra talet ({0}) ör det största", tal2);<br />

Console.ReadLine();<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong> - <strong>Svar</strong>_<strong>Lösning</strong>.docx Page 4 of 7


Author<br />

Martin Winstrand<br />

Approved by<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong><br />

Document tag<br />

For internal use only<br />

Document receiver<br />

Uppgift 8 (5 poäng)<br />

Typen double har metoden Parse(String) som används för att göra om en sträng till<br />

double. Exempel på användning:<br />

double pi = double.Parse(”3.14”);<br />

Om inparametern inte kan göras om till en double så kastar metoden ett undantag.<br />

Din uppgift:<br />

Version Copies Appendices<br />

1.0.0 1 (none)<br />

Creation date Last saved<br />

2013-03-19 2013-03-19<br />

Skapa en statisk metod som läser in en sträng som användaren matar in på tangentbordet,<br />

och returnerar strängen omvandlad som en double. För omvandlingen skall metoden<br />

double.Parse användas. Din metod ska hantera undantaget som eventuellt kastas genom<br />

att skriva ett meddelande och fråga användaren igen, ända tills korrekt inläsning gjorts.<br />

Metoden behöver inte omges av en klass.<br />

Din metod kan användas så här:<br />

Static void Main()<br />

{<br />

Conslole.Write(”Mata in ett decimaltal:”);<br />

Double d = LaesInDouble();<br />

Console.WriteLine(“Du matade in “ + d);<br />

}<br />

Exempel på körning (inmatning i fetstil):<br />

Mata in ett decimaltal: kalle<br />

Felaktig inmatning, försök igen: olle<br />

Felaktig inmatning, försök igen: 1.23<br />

Du matade in 1,23<br />

public static Double LaesInDouble()<br />

{<br />

bool bFortsättAttLaesaIn = true;<br />

string sInlaestTal = Console.ReadLine();<br />

Double d<strong>Svar</strong> = 0;<br />

}<br />

while (bFortsättAttLaesaIn)<br />

{<br />

try<br />

{<br />

d<strong>Svar</strong> = Convert.ToDouble(sInlaestTal);<br />

bFortsättAttLaesaIn = false;<br />

}<br />

catch<br />

{<br />

Console.Write("Felaktig inmatining, försök igen: ");<br />

sInlaestTal = Console.ReadLine();<br />

}<br />

}<br />

return d<strong>Svar</strong>;<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong> - <strong>Svar</strong>_<strong>Lösning</strong>.docx Page 5 of 7


Author<br />

Martin Winstrand<br />

Approved by<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong><br />

Document tag<br />

For internal use only<br />

Document receiver<br />

Uppgift 9 (3 poäng)<br />

Version Copies Appendices<br />

1.0.0 1 (none)<br />

Creation date Last saved<br />

2013-03-19 2013-03-19<br />

Skapa och initiera en variabel av typen System.Collections.Generic.Dictionary där<br />

nycklar är en String och värdet en DateTime. Anta att namespace:t är importerat redan,<br />

skriv endast kod som skapar och initierar variablen.<br />

Uppgift 10 (14 poäng)<br />

class Konto<br />

{<br />

private double mySaldo;<br />

private int myAccountNumber;<br />

}<br />

Dictionary myDic;<br />

Skriv en klass enligt UML-diagrammet nedan. Du får själv räkna ut vilka privata<br />

medlemmar som behövs. Metoden Uttag skall kasta ett undantag av typen<br />

ArgumentException med förklarande felmeddelande om amount är större än tillgängligt<br />

saldo. Inga namespace-angivelser behövs, men all övrig kod ska ingå. Tänk på att följa<br />

god objektorienterad stil, dvs. kapsla datamedlemmar osv.<br />

Konto<br />

+Kontonr : int<br />

+Saldo : double<br />

+Konto(in kontonr : int)<br />

+Insättning(in amount : double)<br />

+Uttag(in amount : double)<br />

public int Kontonr<br />

{<br />

get { return myAccountNumber; }<br />

}<br />

public double Saldo<br />

{<br />

get { return mySaldo; }<br />

}<br />

public Konto(int kontonr)<br />

{<br />

myAccountNumber = kontonr;<br />

mySaldo = 0;<br />

}<br />

public void Insättning(double amount)<br />

{<br />

mySaldo = mySaldo + amount;<br />

}<br />

Detta är den enda konstruktorn i klassen<br />

public void Uttag(double amount)<br />

{<br />

if (amount > mySaldo)<br />

throw new ArgumentException("Du kan inte ta ut mer än vad som finns tillgänglig på kontot");<br />

}<br />

mySaldo = mySaldo - amount;<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong> - <strong>Svar</strong>_<strong>Lösning</strong>.docx Page 6 of 7


Author<br />

Martin Winstrand<br />

Approved by<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong><br />

Document tag<br />

For internal use only<br />

Document receiver<br />

Uppgift 11 (7 poäng)<br />

Version Copies Appendices<br />

1.0.0 1 (none)<br />

Creation date Last saved<br />

2013-03-19 2013-03-19<br />

Förklara skillnaden mellan att gömma en metod i basklassen och att överlagra den. I<br />

vilket av fallen talar man om polymorfism? Vilka nyckelord används <strong>–</strong> var och när?<br />

När man gömmer en metod så gör man den till privat i basklassen. Den kommer då inte<br />

att synas i subklasserna.<br />

Överlagring: då skapar man flera metoder med samma namn men med olika signatur.<br />

Uppgift 12 (2 poäng)<br />

Förklara i ordalag hur en kortlek sorteras med hjälp av insertion sort. För enkelhetens<br />

skull kan vi utgå från att endast färgen klöver finns i leken.<br />

Insättning Sortera itererar, konsumerar en ingång inslag varje repetition, och växande en<br />

sortera resultatet lista. På en upprepning, avlägsnar insättning Sortera en del av indata,<br />

finner plats den hör i den sorterade listan och infogar det där. Det upprepas tills inga<br />

inmatningselement kvar.<br />

<strong>Diagnostiskt</strong> <strong>Prov</strong> - <strong>Svar</strong>_<strong>Lösning</strong>.docx Page 7 of 7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!