Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Transponieren einer Matrix

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.05.2004, 15:28 Uhr
chrisuni



Da bin ich mal wieder... ich habe hier eine Aufgabenstellung die ich nicht hinbekomme...:
"Schreiben Sie eine Funktion zum Transponieren einer Matrix (Vertauschen der Zeilen und Spalten)."

Daraufhin habe ich zunächst mal versucht überhaupt eine
2x2 Matrix zu erstellen:


C++:
#include <iostream>
#include <conio.h>
using namespace std;

int main(){

int matrix [2] [2];
for (int i = 0; i < 2; i++)
{
  for (int j = 0; j < 2; j++)
  {
    cout << "Geben sie das Matrixelement a" << i+1 << j+1 <<" ein: ";
    cin >> matrix [i] [j];
  }
}
  cout << "Die eingegebene Matrix lautet: " << endl;
  for (int i = 0; i < 2; i++)
  {
    for (int j = 0; j < 2; j++)
    cout << matrix [i] [j] << " ";
    cout << endl;
  }
  
  getch();
  return 0;
  
}




1. Kann mir jemand verraten wie ich den code verändern muss, damit ich beliebige Matrix formen auch 3x5 oder 4x4 eingeben kann...



Die Ausgabe: (bsp)

1 2
3 4


2. Verstehe ich die Aufgabenstellung auch nicht so ganz... wenn es sich um eine 2x2 Matrix handelt könnte ich ja auch mit "swap" arbeiten, da sich die Struktur der Matrix ja nicht verändert, transponiere ich hingegen eine 1x3 matrix wird sie ja zu einer 3x1 matrix und ich müsste ja auch die Struktur ändern. Was denkt ihr wie die Aufgabenstellung gemeint ist...
und ich hab keinen Schwimmer wie ich das vertauschen bei mehrdimensionalen Feldern hinbekommen soll.. Oder gibt es auch eine bessere Möglichkeit Matrizen darzustellen...


P.S. wenn es geht nicht so komplizierten code ^^
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.05.2004, 16:00 Uhr
(un)wissender
Niveauwart


Hier ein Beispiel, ich hoffe es ist korrekt und hilft dir.


C++:
#include <iostream>
#include <cstdlib>
#include <ctime>

const int ROWS = 2;
const int COLS = 3;

int* transpose(int matrix[][COLS]);
int main()
{
    int matrix[ROWS][COLS];
    
    srand(time(0));
    
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
        {
            matrix[i][j] = rand() % 13;  //0-12
        }
    }
    
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
        {
            std::cout << matrix[i][j] << " ";  //0-12
        }
        std::cout<< std::endl;
    }
    
    std::cout << std::endl << "Transponiert:" << std::endl;
    int * t_matrix = transpose(matrix);
    
    for(int i = 0; i < COLS; ++i)
    {
        for(int j = 0; j < ROWS; ++j)
        {
            std::cout << *(t_matrix + j * COLS + i) << " ";  //0-12
        }
        std::cout<< std::endl;
    }
    
    delete [] t_matrix;
    return 0;  
}

int* transpose(int matrix[][COLS])
{
    int * t_matrix = new int[ROWS * COLS];
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
        {
            *(t_matrix + i * COLS + j) = matrix[i][j];
        }
    }
    
    return t_matrix;
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.05.2004, 18:39 Uhr
(un)wissender
Niveauwart


Kann nicht mehr editieren...
Da ist ein Fehler drin, korrekt ist es so:


C++:
#include <iostream>
#include <cstdlib>
#include <ctime>

const int ROWS = 2;
const int COLS = 3;

int* transpose(const int matrix[][COLS]);
int main()
{
    int matrix[ROWS][COLS];
    
    srand(time(0));
    
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
        {
            matrix[i][j] = rand() % 13;  //0-12
        }
    }
    
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
        {
            std::cout << matrix[i][j] << " ";
        }
        std::cout<< std::endl;
    }
    
    std::cout << std::endl << "Transponiert:" << std::endl;
    int * t_matrix = transpose(matrix);
    
    for(int i = 0; i < COLS; ++i)
    {
        for(int j = 0; j < ROWS; ++j)
        {
            [b]std::cout << *(t_matrix + i * ROWS + j) << " ";[/b]  
        }
        std::cout<< std::endl;
    }
    
    delete [] t_matrix;
    return 0;  
}

int* transpose(const int matrix[][COLS])
{
    int * t_matrix = new int[ROWS * COLS];
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
        {
            [b]*(t_matrix + j * ROWS + i) = matrix[i][j];[/b]
        }
    }
    
    return t_matrix;
}


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 31.05.2004 um 18:43 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: