1. Skarp beskrivande statistik
Den rent statisktiska examinationsuppgiften.
VIKTIGT! Innan du börjar arbeta med examinationsuppgiften är det viktigt att du lägger till examinationsuppgiftens repo till ditt privata repo för examinationsuppgiften.
OBS! OBS! OBS!
Detta är en obligatorisk och examinerande uppgift som du ska lösa helt på egen hand.
Du måste göra regelbundna "commits" och "pushes" av koden till ditt repo för uppgiften för att kursledningen ska kunna följa ditt arbetet med uppgiften.
Du ska kunna förklara samtliga konstruktioner och satser som din lösning av uppgiften innehåller.
Introduktion
I denna examinationsuppgift ska du skapa en konsolapplikation i C# vars syfte är att presentera beskrivande statistik över stora datamängder.
Beskrivande statistik (eller deskriptiv statistik; eng. "descriptive statistics") är ett sätt att reducera stora datamängder för att presentera en sammanfattning av datamängden.
Uppgift
Din uppgift är att skriva en konsolapplikation som tar en JSON-fil med heltal som argument och sammanfattar datamängden i filen och ger lättöverskådlig vy av datamängden.
Klassen Statistics
Statistics
Applikationen ska innehålla en statisk klass, Statistics
, vars statiska metoder reducera datamängden i form av en samling med heltal av typen int
som skickas till metoderna i klassen.
Klassen ska ha statiska metoder för att bestämma maximum- och minimumvärden, variationsbredd ("range"), medelvärde ("mean"), median, standardavvikelse ("standard deviation") samt typvärde ("mode", som kan vara en samling med värden).
De publika statiska metoderna ska implementeras enligt signaturerna i klassdiagrammet i figur 1.
Medlemmar i klassen
Statistics
får inte ha några sidoeffekter. Metoder ska vara så kallade pure methods.Medlemmar i klassen klassen
Statistics
ska kasta undantag (men inte fånga några!).Anropas någon av de statiska metoderna i klassen
Statistics
med argumentetnull
ska ett undantag av typenArgumentNullException
kastas.Anropas någon av de statiska metoderna i klassen
Statistics
med ett argument som som refererar till en tom samling, ska ett undantag av typenInvalidOperationException
kastas innehållande meddelandet "Sequence contains no elements".
Du kan lägga till egna medlemmar om du tycker det behövs.
Övriga klasser
Det står dig fritt att skapa egna statiska klasser för t.ex. applikation, hantering av persistent data, presentation av data, etc.
Allmänna krav
Applikationen får endast innehålla statiska klasser och medlemmar.
Skriva inte all kod som krävs för att lösa problemet i en enda statisk klass och/eller metod. Se till att dela upp lösning av problemet i lämpliga statiska klasser och metoder du själv skapar ("separation of concern").
Undvik att upprepa kod och bryt därför inte mot principen DRY ("don't repeat yourself").
Presentationen av den beskrivande statistiken ska vara lättöverskådligt och lättförstålig. Flyttal ska presenteras med en decimals noggrannhet. Exempel på presentation:
Anropas applikation med JSON-filer innehållande data enligt nedan ska applikationen på lämpligt sätt presentera sammanfattningen:
[ 4, 8, 2, 4, 5 ]
ska ge{ Maximum: 8, Mean: 4.6, Median: 4, Minimum: 2, Mode: [ 4 ], Range: 6, StandardDeviation: 1,95959179422654 }
[ 4, 2, 6, 1, 3, 7, 5, 3, 7 ]
ska ge{ Maximum = 7, Mean = 4,22222222222222, Median = 4, Minimum = 1, Mode = [ 3, 7 ], Range = 6, StandardDeviation = 2,0427529234278 }
[ 5, 1, 1, 1, 3, -2, 2, 5, 7, 4, 5, 16 ]
ska ge{ Maximum = 16, Mean = 4, Median = 3,5, Minimum = -2, Mode = [ 1, 5 ], Range = 18, StandardDeviation = 4,32049379893857 }
Innehåller i
data.json
ska ge{ Maximum = 378, Mean = 167,3088, Median = 165, Minimum = -42, Mode = [ 31, 87, 228 ], Range = 420, StandardDeviation = 122,30587738355 }
Tips
Kanske ska du ta dig en titt på LINQ?
Vill du verkligen utmana dig själv kan du välja att implementera saknade aggregatsmetoder som så kallade utökningsmetoder (eng. "extension methods").
Du använder lämpligen klassen
JsonConvert
för att tolka JSON-data. För att kunna användaJsonConvert
måste du lägga till paketetNewtonSoft.Json
meddotnet add package newtonsoft.json
.
Last updated