Startsidan  ▸  Texter  ▸  Teknikblogg

Anders Hesselbom

Programmerare, skeptiker, sekulärhumanist, antirasist.
Författare till bok om C64 och senbliven lantis.
Röstar pirat.

Snittvärde

2015-10-18

Jag fick en fråga om att räkna ut snittvärden. Det finns olika sätt att lösa det på, där det enklaste kanske är att använda Excel för att göra ett enkelt datablad. Jag tänkte visa hur man kan göra i C# för att få en start till ett registerprogram. För detta använder jag Visual Studio 2015 Community Edition som kan laddas hem gratis här. Välj att skapa ett nytt projekt.

bild1

Jag kör mot .NET Framework 4.5.2 (1) och har valt kategorin Windows under C# (2) och projekttypen Console Application (3). Se till att välja ett lämpligt projektnamn och en lämplig plats att spara projektet på (4). Sen är det bara att börja skriva.

Här har vi den grundläggande principen:

         //Några flyttal att beräkna snitt på.
         double[] tal = { 3.0, 4.0, 1.5, 2.0 };

         //Summera talen.
         var summa = 0.0;
         for (int i = 0; i < tal.Length; i++)
            summa += tal[i];

         //Dividera med antalet.
         var snitt = summa / tal.Length;

         //Presentera resultatet.
         Console.WriteLine(snitt);

         //Pausa tills användaren trycker Enter.
         Console.ReadLine();

Vi borde nu se att snittet av 3.0, 4.0, 1.5 och 2.0 är 2.625.

Eftersom vi har tillgång till namnrymden System.Linq så kan vi använda en inbyggd funktion för att räkna ut snittet. Detta ger samma resultat:

         //Några flyttal att beräkna snitt på.
         double[] tal = { 3.0, 4.0, 1.5, 2.0 };

         //Be om snittet.
         var snitt = tal.Average();

         //Presentera resultatet.
         Console.WriteLine(snitt);

         //Pausa tills användaren trycker Enter.
         Console.ReadLine();

Detta kan vi applicera om vi bygger en struktur som innehåller ett flyttal. Följande kod beskriver ett musikalbum med låtar. Låtarna har ett betyg mellan 1 och 10, och deras snitt ger oss ett betyg på musikalbumet.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Snitt
{
   class Program
   {
      static void Main(string[] args)
      {
         //Konstruera ett album.
         var a = new Album() { AlbumName = "A Night at the Opera",
                               ArtistName = "Queen" };
         //Lägg på låtar.
         a.Songs.Add(new Song() { TrackNumber = 1,
                                  TrackName = "Death on Two Legs",
                                  Rating = 7.0 });
         a.Songs.Add(new Song() { TrackNumber = 2,
                                  TrackName = "Lazing on a Sunday Afternoon",
                                  Rating = 4.0 });
         a.Songs.Add(new Song() { TrackNumber = 3,
                                  TrackName = "I'm in Love with My Car",
                                  Rating = 6.0 });

         //Hämta låtarnas betyg.
         var ratings = (from s in a.Songs
                       select s.Rating).ToArray();

         //Hämta ut låtarnas snittvärde och avrunda.
         var snitt = Math.Round(ratings.Average(), 2);

         //Presentera resultatet.
         Console.WriteLine(snitt);

         //Pausa tills användaren trycker Enter.
         Console.ReadLine();
      }
   }

   //Definiera en låt.
   public class Song
   {
      public int TrackNumber { get; set; }
      public string TrackName { get; set; }
      public double Rating { get; set; }
   }

   //Definiera ett musikalbum
   public class Album
   {
      public string ArtistName { get; set; }
      public string AlbumName { get; set; }
      public List<Song> Songs { get; set; } = new List<Song>();
   }
}

Detta ger oss svaret 5.67.

Klasserna Song och Album kan användas som en del av en Windows-applikation med ett grafiskt användargränssnitt. Projekttypen skulle kunna vara en Windows Forms Application. Att sammanställa en sådan applikation är ett ganska stort och tidskrävande projekt. En album-lista ska skapas, serialisering och deserialisering ska implementeras och det grafiska användargränssnittet ska byggas.

Categories: C#

Leave a Reply

Your email address will not be published. Required fields are marked *



En kopp kaffe!

Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!

Bjud på en kopp kaffe!

Om...

Kontaktuppgifter, med mera, finns här.

Följ mig

Twitter Instagram
GitHub RSS

Public Service

Folkbildning om public service.

Hem   |   linktr.ee/hesselbom   |   winsoft.se   |   80tal.se   |   Filmtips