mateczek |
» 2016-03-18 20:27:35 moim zdaniem nie ma sensu pisać transpozycji, bez macierzy pomocniczej, dla macierzy innych niż kwadratowe!!! 1. nie działa przy tablicach dynamicznych (wiersze trzeba poszerzać) 2 można odwrotnie macierz wyświetlić :) ale transponować - na siłę się da !!! #include <iostream> using namespace std;
int main() { int macierz[ 3 ][ 5 ] = { { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 } }; for( int kolumny = 0; kolumny < 5; kolumny++ ) { for( int wiersze = 0; wiersze < 3; wiersze++ ) { cout << macierz[ wiersze ][ kolumny ] << " "; } cout << endl; } }
} |
|
AdamDy |
» 2016-03-18 20:42:56 Cóż to za problem wypisać na odwrót :P Po co ma działać dla dynamicznych skoro wiemy ze nie potrzebujemy az takich duzych macierzy. Zawsze można zwiększyć zakres. A zastosowanie zawsze sie znajdzie, powiedzmy ze mamy jakis obrazek i latwiej by nam sie na nim pracowalo po ztransponowaniu ;D |
|
jolkaaa3 Temat założony przez niniejszego użytkownika |
» 2016-03-18 21:17:19 AdamDy bardzo dziękuję, Twój program działa super. Ja jednak nie znam się tak dobrze na programowaniu i chciałam zapytać czy wersja bez dodawania tej biblioteki też jest możliwa? |
|
AdamDy |
» 2016-03-18 23:26:07 tak możesz zrobić nową funkcje: ja po prostu zrobilem to dla wygody sorka, to jest po prostu funkcja zwracajaca minimum z liczb, mozesz zrobic tak: int min( int a, int b ) { if( a < b ) { return a; } else { return b; } }
|
|
mateczek |
» 2016-03-19 12:12:21 Cóż to za problem wypisać na odwrót!!
|
no chyba o to chodzi, że żaden a rozwiązanie dość proste nie wymagające przerzucania danych! Podeślę jeszcze jedno proste rozwiązanie polegające na zastąpieniu macierzy podwójnej pojedyńczą !!! (transponowanie macierzy nie wymaga zmiany rozmiaru) dlatego macierz pojedyncza nada się do takich operacji. #include <iostream> using namespace std; class matrix { int * data; bool transp_org = false; int liczbaWierszy, liczbaKolumn; public: int wiersze() { return liczbaWierszy; } int kolumny() { return liczbaKolumn; } matrix( int wiersze, int kolumny ) { liczbaWierszy = wiersze; liczbaKolumn = kolumny; data = new int[ liczbaWierszy * liczbaKolumn ]; for( int i = 0; i < liczbaWierszy * liczbaKolumn; i++ ) data[ i ] = i; } ~matrix() { delete[] data; } int & operator ()( int wiersz, int kolumna ) { int index; if( !transp_org ) index = wiersz * liczbaKolumn + kolumna; else index = wiersz + kolumna * liczbaWierszy; return data[ index ]; } void transpozycja() { transp_org = !transp_org; int temp = liczbaWierszy; liczbaWierszy = liczbaKolumn; liczbaKolumn = temp; } };
int main() { matrix m( 2, 3 ); for( int w = 0; w < m.wiersze(); w++ ) { for( int k = 0; k < m.kolumny(); k++ ) { cout << m( w, k ) << " "; } cout << endl; } cout << endl; m.transpozycja(); for( int w = 0; w < m.wiersze(); w++ ) { for( int k = 0; k < m.kolumny(); k++ ) { cout << m( w, k ) << " "; } cout << endl; } }
transpozycja w tym przypadku to tylko zmiana sposobu liczenia indexu void transpozycja() { transp_org = !transp_org; int temp = liczbaWierszy; liczbaWierszy = liczbaKolumn; liczbaKolumn = temp; }
index = wiersz * liczbaKolumn + kolumna;
index = wiersz + kolumna * liczbaWierszy;
wyjście programu 0 1 2 3 4 5
0 3 1 4 2 5 Naciśnij <RETURN> aby zamknąć to okno...
od dawna kusiłem się z zamiarem klepnięcia jakieś prostej klasy dla tablic 2D :) wątek mi się przydał :P |
|
jankowalski25 |
» 2016-03-19 12:24:02 Można użyć gotowych bibliotek, na przykład gpstk zaproponowanej w temacie [C++] Biblioteka gpstk dołączenie i użycie w C::B. Przykład: #include <Matrix.hpp> #include <iostream>
int main() { gpstk::Matrix < int > matrix( 4, 5 ); for( int i = 0; i < 4; i++ ) { for( int j = 0; j < 5; j++ ) { matrix[ i ][ j ] =( i * 5 ) + j; } } std::cout.width( 2 ); std::cout << matrix << '\n'; gpstk::Matrix < int > matrixT = gpstk::transpose( matrix ); std::cout << matrixT << '\n'; } Standardowe wyjście programu: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 5 10 15 1 6 11 16 2 7 12 17 3 8 13 18 4 9 14 19
|
|
mateczek |
» 2016-03-19 12:33:01 Można użyć gotowych bibliotek, na przykład gpstk |
kiedyś szukałem jakiejś macierzy coby dynamiczne rezerwować pamięć za jednym zamachem dla całego 2D. I tak jest zawsze jak człowiek już coś klepnie okazuje się że było zawsze . Idę na piwo :P |
|
1 « 2 » |