Znajdowanie numeru kolumny z największą i najmniejszą średnią tablicy 2-wymiarowej

0

Cześć , mam pewien problem , próbuję napisać podstawową aplikację do znajdowania numeru kolumny z największą i najmniejszą średnią z pośród tablicy dwuwymiarowej .

int nrkolumnymax;
int nrkolumnymin;
int[,] a = new int[5, 4] { { 2,4,-1, 1 }, { 0, -1,-3, 5 }, { 3,4, 0, 2 }, { 5, -2, 2, 5 }, { -2, 4, 3, -1 } };
Console.WriteLine("numer kolumny z max sumą = "+ nrkolumnymax + " , nr kolumny z min sumą + "+ nrkolumnymin);
Console.ReadKey();

Niestety nie mam pojęcia jak się do tego zabrać , bardzo proszę o pomoc ,
Pozdrawiam

0

Rzadko z tego forum korzystam, ale wydaje mi się, że to raczej zadanie logiczne niż związane z językiem programowania.
Rozwiązań tego problemu jest wiele. Musisz przy pomocy dwóch pętli wyciągnąć poszczególne wartości z tablicy i wyliczyć średnią ( czy tam zsumować). Zapisać np. do listy czy tablicy jednowymiarowej, z której wyciągniesz wartość max i min, a index z tablicy z wynikami będzie nr kolumny

p.s. musisz też przemyśleć sprawę jednakowych wyników dla wielu kolumn. Wypisać wtedy wszystkie kolumny? Tylko jedną?

0
 class Program
    {
        static void Main(string[] args)
        {
            int nrkolumnymax = 0;
            int nrkolumnymin = 0;
            int[,] a = new int[5, 4] { { 2, 4, -1, 1 }, { 0, -1, -3, 5 }, { 3, 4, 0, 2 }, { 5, -2, 2, 5 }, { -2, 4, 3, -1 } };

            var tabInfo = new TableInfo(a);
            nrkolumnymax = tabInfo.IndexZNajwiekszaSrednia();
            nrkolumnymin = tabInfo.IndexZNajmniejszaSrednia();

            Console.WriteLine("numer kolumny z max sumą = " + nrkolumnymax + " , nr kolumny z min sumą + " + nrkolumnymin);
            Console.ReadKey();
        }
    }

    public class TableInfo
    {
        int[,] tab;
        int liczbaKolumn;
        int liczbaWierszy;
        float[] srednieKolumn;
        public TableInfo(int[,] tab)
        {
            liczbaKolumn = tab.GetLength(1);
            liczbaWierszy = tab.GetLength(0);
            srednieKolumn = new float[liczbaKolumn];

            for (int wiersz = 0; wiersz < liczbaWierszy; wiersz++)
            {
                for (int kolumna = 0; kolumna < liczbaKolumn; kolumna++)
                    srednieKolumn[kolumna] += tab[wiersz, kolumna];
            }
            for (int kolumna = 0; kolumna < liczbaKolumn; kolumna++)
            {
                srednieKolumn[kolumna] = srednieKolumn[kolumna] / liczbaKolumn;
                Console.WriteLine(kolumna + ": " + srednieKolumn[kolumna]);
            }
        }
        public int IndexZNajwiekszaSrednia()
        {

            float a = srednieKolumn[0];
            int j = 0;
            for (int i = 1; i < srednieKolumn.Length; i++)
            {
                if (a < srednieKolumn[i])
                {
                    a = srednieKolumn[i];
                    j = i;
                }
            }
            return j;
        }
        public int IndexZNajmniejszaSrednia()
        {

            float a = srednieKolumn[0];
            int j = 0;
            for (int i = 1; i < srednieKolumn.Length; i++)
            {
                if (a > srednieKolumn[i])
                {
                    a = srednieKolumn[i];
                    j = i;
                }
            }
            return j;
        }
    }
0

Najbardziej zwięzły kod uzyskasz stosując wyrażenia LINQ.

int dimX = a.GetLength(0);
int dimY = a.GetLength(1);

var averageValues = Enumerable.Range(0, dimX).Select((x, i) => new
{
    Index = i,
    Value = Enumerable.Range(0, dimY).Select(y => a[x, y]).Average()
}).OrderBy(o => o.Value);

Pierwszy element w kolekcji zawiera index i średnią wartość dla grupy z najmniejszą średnią wartością, a ostatni z największą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1