Dodawanie tablic i zapis do wynikowej.

0

Witam. Mam do wykonania zadanie: Dodaj dwie macierze 2x3 i wyświetl macierz wynikową. Zadanie brzmi łatwo i przyjemnie (chociaż nie dla mnie, bo jestem zielony w prog.) Zrobiłem takie coś:

int[,] tab1 = { { 2, 4, 6 }, { 5, 1, 7 } }, tab2 = { { 3, 8, 10 }, { 9, 11, 13 } },tabSuma = new int[2, 3];
            int i = 0;
            int j = 0;
            Array.Copy(tab2, tabSuma, 6);
            foreach(int g in tab1)
            {
                for (; i < tabSuma.GetLength(0);)
                {
                    for (; j < tabSuma.GetLength(1);)
                    {
                        tabSuma[i, j] += g;
                        j++;
                        break;
                    }
                    if (j == tabSuma.GetLength(1))
                    {
                        i++;
                        j = 0;
                    }
                    break;
                }
            }
            foreach(int k in tabSuma)
            {
                Console.Write(" {0}", k);
            }
            Console.ReadKey();

Co prawda działa, ale mam pytanie czy nie można by tego zrobić jakoś szybciej i na przykład "w locie" dodawać elementy z tych dwóch tabli i przypisywać je do wynikowej?

0

Ogólnie to co napisałeś to wg mnie dobry sposób, tylko kilka drobnych poprawek stylistycznych by się przydało.

        static int[,] dodajMacierze(int[,] a, int[,] b)
        {
            if (a.GetLength(0) != b.GetLength(0) && a.GetLength(1) != b.GetLength(1))
                throw new ArgumentException();
            var res = new int[a.GetLength(0), a.GetLength(1)];
            for (var i = 0; i < a.GetLength(0); i++)
                for (var j = 0; j < a.GetLength(1); j++)
                    res[i, j] = a[i, j] + b[i, j];
            return res;
        }

W szczególności Array.Copy i inicjalizacja i oraz j poza pętlami jest mocno meh.

0

Wcale bym się nie zdziwił jak by inicjalizacja i Copy była mocno meh w tym wypadku :D Zrobiłem tak, bo inicjalizacja w pętli resetowała by mi za każdym razem licznik po wyjściu z niej i lipa. Copy ogranicza trochę ilość pętli. Nie doszedłem jeszcze do obsługi wyjątków, tworzenia klas czy metod więc chyba nic wiele nowego nie wniosę. Za to fragment
res[i, j] = a[i, j] + b[i, j];
mógłby być odpowiedzią na to moje "w locie" a w ogóle jakoś o tym nie pomyślałem :D Dzięki za odpowiedź.

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