QwertyC Skrevet 19. oktober 2011 Del Skrevet 19. oktober 2011 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
etse Skrevet 20. oktober 2011 Del Skrevet 20. oktober 2011 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
torbjørn marø Skrevet 20. oktober 2011 Del Skrevet 20. oktober 2011 (endret) 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 20. oktober 2011 av torbjørn marø Lenke til kommentar
torbjørn marø Skrevet 20. oktober 2011 Del Skrevet 20. oktober 2011 Hehe, ser nå at løsningen min (nesten identisk) også finnes på Freakforum Lenke til kommentar
j0achim Skrevet 24. oktober 2011 Del Skrevet 24. oktober 2011 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
torbjørn marø Skrevet 24. oktober 2011 Del Skrevet 24. oktober 2011 (endret) 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 24. oktober 2011 av torbjørn marø Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå