transpozycja macierzy

0

Witam. Chciałbym aby ktos uprzejmy i chetny pomogl laikowi w dopieszczeniu/poprawieniu kodu. (jak sama nazwa tematu wskazuje, chodzi mi o transponowanie macierzy)
Oto kodziki:
nie wiem ktory lepszy i czytelniejszy oraz bardziej poprawny...

#include<iostream>

using namespace std;

int main()
{
   int n, m;
   cout << "Liczba wierszy: ";
   cin >> n;
   cout << "Liczba kolumn: ";
   cin >> m;
   double macierz[n][m];
   double macierzT[m][n];
   
   for(int i = 0; i < n; i++) //wstawianie danych
   {
       for(int j = 0;j < m; j++)
       {
         cout << "Wyraz [" << i << "][" << j << "]: "; 
         cin >> macierz[i][j];
       }   
   }
   
   for(int i = 0; i < n; i++) //transponowanie macierzy
   {
       for(int j = 0;j < m; j++)
         macierzT[j][i]=macierz[i][j];
   }
   
   cout << "Macierz:" << endl;
   for(int i = 0; i < n; i++) //wyswietlanie macierzy
   {
       for(int j = 0;j < m; j++)
       {
         cout << macierz[i][j] << " ";
       }
       cout << endl;
   }
   
   cout << endl;
   
   cout << "Macierz transponowana:" << endl;
   for(int i = 0; i < m; i++) //wyswietlanie macierzy transponowanej
   {
       for(int j = 0;j < n; j++)
       {
         cout << macierzT[i][j] << " ";
       }
       cout << endl;
   }
   system("PAUSE");
   return 0;
}
#include "stdafx.h" 
#include <iostream> 

using namespace std; 

int main() 
{ 
         int **pTabA,**pTabT,m,n; 

//----------wczytanie macierzy---------- 
         cout<<"Podaj rozmiar(mxn) macierzy A:\n"; 
         cout<<"ilosc wierszy: "; 
         cin>>m; 
         cout<<"ilosc kolumn: "; 
         cin>>n; 

         pTabA = new int*[m]; 
         for(int i=0;i<m;i++) 
         { 
                 pTabA[i] = new int[n]; 
         } 

         pTabT = new int*[n]; 
         for(int i=0;i<n;i++) 
         { 
                 pTabT[i] = new int[m]; 
         } 

         cout<<"Powstala macierz A o wymiarach "<<m<<" na "<<n<<"\n\n"; 

         cout<<"Zainicjalizuj macierz A wartosciami\n"; 
         for(int i=0;i<m;i++) 
         {        
                 for(int j=0;j<n;j++) 
                 { 
                         cout<<"Podaj wartosc dla wspolrzednych "<<i<<" "<<j<<": "; 
                         cin>>pTabA[i][j]; 
                 } 
         } 
         cout<<"\nMacierz przed transpozycja A = "; 
         for(int i=0;i<m;i++) 
         {cout<<"\n";    
                 for(int j=0;j<n;j++) 
                 { 
                         cout<<pTabA[i][j]<<"\t"; 
                 } 
         } 
         
         //-----transpozycja macierzy----- 
         
         for(int i=0;i<m;i++) 
         { 
                 for(int j=0;j<n;j++) 
                 { 
                         pTabT[j][i]=pTabA[i][j];                                
                 } 
         } 

         cout<<"\nMacierz transponowana A = "; 
         for(int i=0;i<n;i++) 
         {cout<<"\n"; 
                 for(int j=0;j<m;j++) 
                 { 
                         cout<<pTabT[i][j]<<"\t"; 
                 } 
         } 

         for(int i=0; i<m; i++) 
         delete [] pTabA[i]; 

         delete []pTabA; 

         for(int i=0; i<n; i++) 
           delete [] pTabT[i]; 
   
         delete []pTabT; 

         cout<<"\n\n"; 
         system("pause"); 
         return 0; 
}

pozdrawiam i dziekuje z góry za pomoc

0

Pierwszy jest niepoprawny, bo deklarujesz tablicę o stałym rozmiarze w trakcie programu, a tak nie wolno. Drugi też jakiś dziwaczny, nie lepiej wielowymiarową tablicę dynamiczną niż to co ty napisałeś? int pTabA przez to, że nie dałeś kodu w znaczniki, każdy pomyśli, że to zwykła zmienna.

0

moglbys poprawic? siedzialem troche nad tym i nie wiem co wykombinowac

glownie chodzi mi o to zeby program byl czytelny i w miare krotki bez niepotrzebnych petli. oczywiscie musi dzialac;)

0

Dziwne, po wklejeniu z VS, tutaj dostałem długie taby zamiast normalnych 4 spacjowych :/

#include <iostream>

using namespace std; 

void pokaz(int** matrix, int m, int n)
{
	for(int i = 0; i < m; i++) 
	{
		cout << "\n";    
		for(int j = 0; j < n; j++) 
		{ 
			cout << matrix[i][j] << "  "; 
		} 
	}
}

int main() 
{ 
	int **matrixA, **matrixT, m,n; 

	// ----------wczytanie macierzy---------- 
	cout << "Podaj rozmiar(mxn) macierzy A:\n"; 
	cout << "ilosc wierszy: "; 
	cin >> m; 
	cout << "ilosc kolumn: "; 
	cin >> n; 

	cout << "Powstala macierz A o wymiarach " << m << " na " << n << "\n\n"; 
	cout << "Zainicjalizuj macierz A wartosciami\n"; 

        matrixA = new int*[m]; 
	for(int i = 0; i < m; i++) 
	{        
                matrixA[i] = new int[n]; 
		for(int j = 0; j < n; j++) 
		{ 
			cout << "Podaj wartosc dla wspolrzednych " << i << " " << j << ": "; 
			cin >> matrixA[i][j]; 
		} 
	} 

	cout<<"\nMacierz przed transpozycja A = "; 
	pokaz(matrixA, m, n);

	// -----transpozycja macierzy----- 
        matrixT = new int*[n]; 
	for(int i = 0; i < n; i++) 
	{ 
                matrixT[i] = new int[m];
		for(int j = 0 ; j < m; j++) 
		{ 
			matrixT[j][i] = matrixA[i][j];                                
		} 
	} 

	cout<<"\nMacierz transponowana A = "; 
	pokaz(matrixT, n, m);

	for(int i = 0; i < m; i++) 
		delete [] matrixA[i]; 

	delete[] matrixA; 

	for(int i = 0; i < n; i++) 
		delete[] matrixT[i]; 

	delete[] matrixT; 

	cin.ignore();
	cin.get();

	return 0; 
}
0

rozumiem ze ten programik jest fajny super git;) nie wiem czemu ale moj kompliatorek cos zamulil przy tym.. moze czas na aktualizacje... czy moglbys pododawac komenatarze do kodu (informacje co w danej linijce sie dzieje dla lepszego zrozumienia i utrwalenia jak powinien wygladac kodzik do transpozycji macierzy..pzodrawiam).

0

rozumiem frustracje. tylko ze ten programik po transformacji nie dziala tak jak powinien dlatego zapytalem co w nim i jak... jak jestes w stanie to skompiluj i zobacz w czym jest problem

0
xeo545x39 napisał(a)
	// -----transpozycja macierzy----- 
        matrixT = new int*[n]; 
	for(int i = 0; i < m; i++) 
	{ 
		for(int j = 0 ; j < n; j++) 
		{ 
                        matrixT[i] = new int[m]; 
			matrixT[j][i] = matrixA[i][j];                                
		} 
	} 

Problem pierwszy: po co matrixT[i] tworzyc m*n razy jesli wystarczy tylko m razy?
Problem drugi: cos sie chyba indeksy nie zgadzaja i warunki zakonczenia petli tez sa chyba nie teges? (matrixT jest tablica wskaznikow o rozmiarze n a iterujesz do rozmiaru m)

Powyzsze tyczy sie tez wczytywania macierzy A.

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