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
StatisticsApplikationen 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
Statisticsfår inte ha några sidoeffekter. Metoder ska vara så kallade pure methods.Medlemmar i klassen klassen
Statisticsska kasta undantag (men inte fånga några!).Anropas någon av de statiska metoderna i klassen
Statisticsmed argumentetnullska ett undantag av typenArgumentNullExceptionkastas.Anropas någon av de statiska metoderna i klassen
Statisticsmed ett argument som som refererar till en tom samling, ska ett undantag av typenInvalidOperationExceptionkastas 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:
Maximum : 378 Minimum : -42 Medelvärde : 167,3 Median : 165 Typvärde : 31, 87, 228 Variationsbredd : 420 Standardavvikelse: 122,3Anropas 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.jsonska 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
JsonConvertför att tolka JSON-data. För att kunna användaJsonConvertmåste du lägga till paketetNewtonSoft.Jsonmeddotnet add package newtonsoft.json.
Last updated