Diagnostiskt Prov – Svar_Lösning
Diagnostiskt Prov – Svar_Lösning
Diagnostiskt Prov – Svar_Lösning
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