Gå til innhold

C#: Hente ut de to mellomste tallene i C#


Anbefalte innlegg

Hei.

 

Arbeider med et program i C#. Det jeg sliter med er at jeg har 4 tall (double variabler med navnene A, B, C og D). Brukeren setter inn tall her, også skal programmet trekke ut de to midterste tallene hvis du setter dem opp stigende og ta snittet av disse to som output. (Den siste dele har jeg kontroll på ).

 

Altså, hvis A=2,3 B=3,3 C=3 og D=1.2. Så skal programmet trekke ut A og C og ta snittet av disse to.

 

Probleme mitt er å trekke ut de to midterste. Har drevet og googlet, men ikke funnet noe svar. Prøvde med Math.Max og Math.Min, men det fikk jeg bare til med 2 variabler...

 

Eneste løsningen jeg har klart å finne til nå er VELDIG mange if-setninger, en for hver mulige hendelse, men dette vil bli en god del. Så håpet det var en letter måte og gjøre det på

 

Noen som vet?

Lenke til kommentar
Videoannonse
Annonse

Nå har jeg allerede svart deg i tråden du laget på freakforum, men kan vel legge svaret her og siden du laget en tråd her.

(Forresten: Det holder vel å spørre på 1 forum om gangen, spesielt på slike enkle spørsmål)

 

det du mener er å finne medianen om jeg forstår deg rett?

Og hvorfor bruke 4 ulike variabler og ikke bare et array?

 

med et array kan du gjøre det så enkelt som:

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

namespace testApplication
{
   class Program
   {
       static void Main(string[] args)
       {
           double[] tall = new double[4] {2.7, 1.5, 1.7, 50};

           Console.WriteLine("Medianen er: {0}", getMedian(tall));
           Console.ReadLine();
       }

       static double getMedian(double[] tall)
       {
           Array.Sort(tall);
           if (tall.Length % 2 == 1)
               return tall[tall.Length/2];
           return (tall[tall.Length / 2] + tall[(tall.Length / 2) - 1]) / 2;
       }
   }
}

Denne skal fungere selv om du gjør arrayet større og dermed har flere variabler.

Lenke til kommentar

En alternativ løsning som bruker de litt mere "funksjonelle" featurene av C# (om du er interessert i det):

 

using System.Linq;
using System;
using System.Collections.Generic;

namespace ConsoleApplication9
{    
   class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine(GetMiddleAverage(new []{2.3, 3.3, 3.0, 1.2}));
       }
       private static double GetMiddleAverage(IEnumerable<double> numbers)
       {
           return numbers.OrderBy(n => n)
               .Skip(numbers.Count() / 2 - 1)
               .Take(2)
               .Average();
       }
   }
}

Endret av torbjørn marø
Lenke til kommentar

En alternativ løsning som bruker de litt mere "funksjonelle" featurene av C# (om du er interessert i det):

 

using System.Linq;
using System;
using System.Collections.Generic;

namespace ConsoleApplication9
{    
   class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine(GetMiddleAverage(new []{2.3, 3.3, 3.0, 1.2}));
       }
       private static double GetMiddleAverage(IEnumerable<double> numbers)
       {
           return numbers.OrderBy(n => n)
               .Skip(numbers.Count() / 2 - 1)
               .Take(2)
               .Average();
       }
   }
}

 

Pent!

 

Elsker hvordan LINQ gir deg nærmest SQL kode i C#, er så enkelt å glemme dette når en sitter å koder.

Lenke til kommentar

Pent!

 

Elsker hvordan LINQ gir deg nærmest SQL kode i C#, er så enkelt å glemme dette når en sitter å koder.

Bare lag deg en vane å tenke FEIL!!! hver gang du begynner å lage en for- eller foreach-løkke.

 

(Ikke at det hadde hjulpet i dette tilfellet..)

Endret av torbjørn marø
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...