Dodawanie macierzy PROBLEM C#

1

Panowie mam następujący problem.
Piszę sobie taki prosty program sumujący dwie macierze kwadratowe.
Użytkownik podaje wszystkie współczynniki z klawiatury.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Dynamic;
using System.IO;
using System.Management;

namespace tablice11
{
    class Program
    {
    static double dodawanie_macierzy_2x2(double[,] X, double[,] Y)
        {
            
            double[,] macierz_wynikowa;
            macierz_wynikowa = new double[2,2];

            for (int i = 0; i < macierz_wynikowa.GetLength(0)-1; i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1)-1; j++)
                {
                    macierz_wynikowa[i, j] = (X[i, j] + Y[i, j]);
                    macierz_wynikowa[i, j + 1] = (X[i, j + 1] + Y[i, j + 1]);
                    macierz_wynikowa[i + 1, j] = (X[i + 1, j] + Y[i + 1, j]);
                    macierz_wynikowa[i + 1, j + 1] = (X[i + 1, j + 1] + Y[i + 1, j + 1]);
                }
            }

            double matrix = 0;
            for (int i = 0; i < macierz_wynikowa.GetLength(0); i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1); j++)
                {
                    return macierz_wynikowa[i, j]; 
                }
            }
            return 0;
            
        }


        static void Main(string[] args)
        {
         double[,] macierz1 = new double[2, 2];
            double[,] macierz2 = new double[2, 2];
            double[,] macierz3 = new double[2, 2];

            Console.WriteLine("Wpisz wartosci do macierzy 1: ");

            for (int i = 0; i < macierz1.GetLength(0); i++)
            {
                for (int j = 0; j < macierz1.GetLength(1); j++)
                {
                    macierz1[i,j] = Convert.ToDouble(Console.ReadLine());
                }
            }

            Console.WriteLine("Wpisz wartosci do macierzy 2: ");

            for (int i = 0; i < macierz2.GetLength(0); i++)
            {
                for (int j = 0; j < macierz2.GetLength(1); j++)
                {
                    macierz2[i, j] = Convert.ToDouble(Console.ReadLine());
                }
            }
            Console.WriteLine();
            Console.WriteLine("Macierz 1 to: ");
            Console.WriteLine();
            for (int i = 0; i < macierz1.GetLength(0); i++)
            {
                for (int j = 0; j < macierz1.GetLength(1); j++)
                {
                    Console.Write(macierz1[i,j]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine("Macierz 2 to: ");
            Console.WriteLine();
            for (int i = 0; i < macierz2.GetLength(0); i++)
            {
                for (int j = 0; j < macierz2.GetLength(1); j++)
                {
                    Console.Write(macierz2[i, j]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine("Macierz 3 po dodaniu macierzy 1 i 2 to : ");

            for (int i = 0; i < macierz3.GetLength(0); i++)
            {
                for (int j = 0; j < macierz3.GetLength(1); j++)
                {
                    macierz3[i, j] = dodawanie_macierzy_2x2(macierz1,macierz2);
                }
                
            }

            Console.WriteLine();
            for (int i = 0; i < macierz3.GetLength(0); i++)
            {
                for (int j = 0; j < macierz3.GetLength(1); j++)
                {
                    Console.Write(macierz3[i,j]);
                }
                Console.WriteLine();
            }

            Console.ReadLine();
        }
    }
}

I jest problem przy wyswietlaniu macierzy wynikowej.
Wyswietla mi tak jakby 1 index we wszystkich indexach.

Czy jakiś mądry człowiek mógłby sie przyjrzeć co tu jest nie tak ;)?

Pozdrawiam i z góry dzięki:)

0
 for (int i = 0; i < macierz_wynikowa.GetLength(0); i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1); j++)
                {
                    return macierz_wynikowa[i, j]; 
                }
           }

teraz pomyśl sobie co ten kod robi

btw,

            for (int i = 0; i < macierz_wynikowa.GetLength(0)-1; i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1)-1; j++)
                {
                    macierz_wynikowa[i, j] = (X[i, j] + Y[i, j]);
                    macierz_wynikowa[i, j + 1] = (X[i, j + 1] + Y[i, j + 1]);
                    macierz_wynikowa[i + 1, j] = (X[i + 1, j] + Y[i + 1, j]);
                    macierz_wynikowa[i + 1, j + 1] = (X[i + 1, j + 1] + Y[i + 1, j + 1]);
                }
            }

może zdecyduj się na jedno rozwiązanie

0

Myśle nad tym od godziny 12 ^^

No pewnie coś namieszałem jak zwykle.

Tutaj dodawałem poszczególne indeksy macierzy i je przypisywalem do macierzy wynikowej

 
 for (int i = 0; i < macierz_wynikowa.GetLength(0)-1; i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1)-1; j++)
                {
                    macierz_wynikowa[i, j] = (X[i, j] + Y[i, j]);
                    macierz_wynikowa[i, j + 1] = (X[i, j + 1] + Y[i, j + 1]);
                    macierz_wynikowa[i + 1, j] = (X[i + 1, j] + Y[i + 1, j]);
                    macierz_wynikowa[i + 1, j + 1] = (X[i + 1, j + 1] + Y[i + 1, j + 1]);
                }
            }

A w tej drugiej pętli chciałem to wyswietlic bądz zwrócić. Ale chyba mój mózg jest dziś już do tego stopnia zmęczony ,że nie dostrzega błędu.

Ale już chyba czaje ,że w tej 2 pętli zwracam wciąż tylko 1 pierwszy indeks, a jak zrobić żeby zwracać wszystkie poszczególne?

1

no pomyśl, co się może stać, gdy zwrócisz jakąś wartość w pierwszej z czterech oczekiwanych iteracji?

Tutaj dodawałem poszczególne indeksy macierzy i je przypisywalem do macierzy wynikowej

no tak, ale po co robić to 4 razy?
zdecyduj się, albo pętla, albo sam bawisz się w Pana pętlę.

0

Aaaaaaaa chyba już wiem.

Wystarczy? :


 for (int i = 0; i < macierz_wynikowa.GetLength(0); i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1); j++)
                {
                    macierz_wynikowa[i, j] = X[i,j] + Y[i,j]; 
                }
            }

 

Coś takiego masz na myśli?

0

No ale dalej nie poli :/


static double dodawanie_macierzy_2x2(double[,] X, double[,] Y) //////////// funkcja na dodawanie macierzy /////////////////
        {
            
            double[,] macierz_wynikowa = new double[X.GetLength(0),Y.GetLength(1)];

            double matrix = 0;
            for (int i = 0; i < macierz_wynikowa.GetLength(0); i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1); j++)
                {
                    matrix = macierz_wynikowa[i, j] = X[i, j] + Y[i, j];
                }
            }
                        
            
            return matrix;
                        
        } //////////// funkcja na dodawanie macierzy /////////////////

 

Zle mi sumuje te indeksy, wyswietla te same.

user image

0

Już wklejam :)

 
 static double dodawanie_macierzy_2x2(double[,] X, double[,] Y) //////////// funkcja na dodawanie macierzy /////////////////
        {
            
            //double[,] macierz_wynikowa = new double[X.GetLength(0),Y.GetLength(1)];
            double[,] macierz_wynikowa = new double[2,2];

            double matrix = 0;
            for (int i = 0; i < macierz_wynikowa.GetLength(0); i++)
            {
                for (int j = 0; j < macierz_wynikowa.GetLength(1); j++)
                {
                    matrix = macierz_wynikowa[i, j] = X[i, j] + Y[i, j];
                }
            }
                        
            
            return matrix;
            
                        
        } //////////// funkcja na dodawanie macierzy /////////////////


        static void Main(string[] args)
        {
         double[,] macierz1 = new double[2, 2];
            double[,] macierz2 = new double[2, 2];
            double[,] macierz3 = new double[2, 2];

            Console.WriteLine("Wpisz wartosci do macierzy 1: ");

            for (int i = 0; i < macierz1.GetLength(0); i++)
            {
                for (int j = 0; j < macierz1.GetLength(1); j++)
                {
                    macierz1[i,j] = Convert.ToDouble(Console.ReadLine());
                }
            }

            Console.WriteLine("Wpisz wartosci do macierzy 2: ");

            for (int i = 0; i < macierz2.GetLength(0); i++)
            {
                for (int j = 0; j < macierz2.GetLength(1); j++)
                {
                    macierz2[i, j] = Convert.ToDouble(Console.ReadLine());
                }
            }
            Console.WriteLine();
            Console.WriteLine("Macierz 1 to: ");
            Console.WriteLine();
            for (int i = 0; i < macierz1.GetLength(0); i++)
            {
                for (int j = 0; j < macierz1.GetLength(1); j++)
                {
                    Console.Write(macierz1[i,j]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();

            Console.WriteLine("Macierz 2 to: ");
            Console.WriteLine();
            for (int i = 0; i < macierz2.GetLength(0); i++)
            {
                for (int j = 0; j < macierz2.GetLength(1); j++)
                {
                    Console.Write(macierz2[i, j]);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine("Macierz 3 po dodaniu macierzy 1 i 2 to : ");

            for (int i = 0; i < macierz3.GetLength(0); i++)
            {
                for (int j = 0; j < macierz3.GetLength(1); j++)
                {
                    macierz3[i, j] = dodawanie_macierzy_2x2(macierz1,macierz2); // tutaj wywoluje funkcje
                }
                
            }

            Console.WriteLine();
            for (int i = 0; i < macierz3.GetLength(0); i++)
            {
                for (int j = 0; j < macierz3.GetLength(1); j++)
                {
                    Console.Write(macierz3[i,j]); /////////////// tutaj chce to wyswietlic
                }
                Console.WriteLine();
            }

            Console.ReadLine();
        }
    }
}


Tak to wygląda.

0

XXX

to

for (int i = 0; i < macierz3.GetLength(0); i++)
            {
                for (int j = 0; j < macierz3.GetLength(1); j++)
                {
                    macierz3[i, j] = dodawanie_macierzy_2x2(macierz1,macierz2); // tutaj wywoluje funkcje
                }
 
            }

zamieć na to

macierz3 = dodawanie_macierzy_2x2(macierz1,macierz2);
0

Nic to nie zmieniło :/ gdy wywalilem to wyswietla mi macierz z samych 0 :/

0
 Error	1	Cannot implicitly convert type 'double' to 'double[*,*]

macierz3 jest zmienna tablicowa więc nie moge chyba tak po prostu przypisac do niej tej funkcji bez ustalenia indeksów.

0

Dobra zrobiłem juz to sobie sam.


 static double Dodawanie_Macierzy(double[,] X, double[,] Y)
        {
            double[,] Macierz_Wynikowa = new double[2,2];

            for (int i = 0; i < Macierz_Wynikowa.GetLength(0); i++)
            {
                for (int j = 0; j < Macierz_Wynikowa.GetLength(1); j++)
                {
                    Macierz_Wynikowa[i, j] = (X[i, j] + Y[i, j]);
                }
            }
            Console.WriteLine();
            for (int i = 0; i < Macierz_Wynikowa.GetLength(0); i++)
            {
                for (int j = 0; j < Macierz_Wynikowa.GetLength(1); j++)
                {
                    Console.Write(Macierz_Wynikowa[i,j]);
                }
                Console.WriteLine();
            }

            

            return 0;
        }

 

Przerobiłem trochę funkcje i działa bez problemu ;)

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