Transponowanie macierzy

0

Takich tematów było sporo. Ale nie spotkałem takiego, który nie polegałby na zamianie wyświetlanych kolumn z wierszami, a mi zależałoby na znalezieniu rozwiązania, jak faktycznie przekopiować wartości z komórki [0][1] do komórki [1][0], jak i pozostałe wartości. Wiem, że będę musiał wykorzystać zmienną pomocniczą temp, ale problemem jest tu nierówna liczba wierszy i kolumn (macierz prostokątna).
Jak to zrobić?
"Zauważyłem" też, że elementy leżące na głównej przekątnej (w macierzy kwadratowej), zostają na tym samym miejscu, a pozostałe elementy leżące po obu stronach przekątnej zamieniają się wzajemnie wartościami. Tylko że w przypadku macierzy niekwadratowej trudno tu mówić o jakiejś przekątnej...

0

Jak trzymasz w pamięci macierze?

0
enedil napisał(a):

Jak trzymasz w pamięci macierze?

Generuję losowo wartości macierzy, a rozmiar podaję w mainie i przekazuję jako konstruktor do metody.

0

Pokaż kod, bo niestety nie powiedziałeś o tym co jest tutaj istotne.

0
enedil napisał(a):

Pokaż kod, bo niestety nie powiedziałeś o tym co jest tutaj istotne.

import java.util.Arrays;
import java.util.Random;

public class tablica2 {
	int [][] tab;

	public tablica2(int  w, int k, int z){
		tab = new int [w][k];
		for (int i = 0; i<tab.length; i++) {
			for (int j = 0; j<tab[i].length; j++) {
		Random r = new Random();
		tab[i][j] = r.nextInt(z);
			}
		}
	}
	
	public void WyswietlWierszami() {
		for (int i = 0; i<tab.length; i++) {

		for (int j = 0; j<tab[i].length; j++) {
			
		System.out.print(tab[i][j] + ", ");
		}
		System.out.println();
	}
	}
		
	public void WyswietlKolumnami() {
			for (int i = 0; i<tab[0].length; i++) {
			for (int j = 0; j<tab.length; j++) {
			System.out.print(tab[j][i] + ", ");
			}
			System.out.println();
		}
	}
	
	
	
	public static void main (String[] args){
		tablica2 tab1 = new tablica2(1, 5, 9);
		System.out.println("Wyswietlam wierszami");
		tab1.WyswietlWierszami();
		System.out.println("Wyswietlam kolumnami");
		tab1.WyswietlKolumnami();
	}
	
}

Coś takiego...

0

Yhm. Czyli Masz macierz, jako dwuwymiarową tablicę typu int. Rozwiń zdanie: "jak faktycznie przekopiować wartości z komórki [0][1] do komórki [1][0], jak i pozostałe wartości". Chodzi o przekopiowanie do drugiej macierzy i zwrócenie rezultatu? To nie będzie trudne:

int[][] transpose_matrix(int [][] matrix){
        int[][] temp = new int[matrix[0].length][matrix.length];
        for (int i = 0; i < matrix.length; i++)
            for (int j = 0; j < matrix[0].length; j++)
                temp[j][i] = matrix[i][j];
        return temp;
    }
0

Dzięki.
Pozostając jeszcze w temacie macierzy, mam takie polecenie do zadania, którego kompletnie nie rozumiem:

Zdefiniuj klasę MacierzTab traktując macierz jako jednowymiarową tablicę obiektów typu Tablica ( dla uproszczenia zapisu przyjmij, że mamy uprawnienia do bezpośredniego dostępu do pól obiektów typu Tablica) . Obiekty tej klasy powinny móc zapamiętać tablicę dwuwymiarową (np. 10 wierszy i 30 kolumn) liczb całkowitych. a) Oblicz wartości elementów macierzy, b) ...

Czym się to różni od zwykłej tablicy dwuwymiarowej, której przykład zaprezentowałem wyżej?
Mam stworzyć tablicę jednowymiarową, a każda z nich zawierająca tablicę? Czyli co, tablicę dwuwymiarową? Polecenie jest dziwnie napisane... Jak je rozumieć?

0

Tak to widzę: klasa Macierz w konstruktorze przyjmuje tablicę elementów typu tablica i zapamiętuję ją w polu klasy. Musisz mieć metody/metodę do odczytywania maicerzy, elementów?

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