Matrix an der diagonalen spiegeln!



  • Hi, ich muss ein Programm in C++ schreiben, welches eine Matrix an der diagonalen spiegelt! Habe erst vor kurzem angefangen zu programmieren!

    Könnt Ihr mir ein paar Code-Schnipsel schicken, damit ich weiß, wie ich ungefähr anfangen muss?

    Gruß Jens



  • hier ein Schipsel:

    int main(){
        //....
        return 0;
    }
    

    nicht böse gemeint, aber versuch es doch mal selbst und dann poste deinen code oder deinen Vorschlag für die Vorgehensweise 😉



  • Also guten Tipp von mir

    1. nimm leeres wen nmoglich karrirtes blatt papier zur hand
    2. einen stift

    3. mach eine kleine matrix so 4*4 z.b.
    4. mach das mit einer rechteckigen auch

    5. spiegel mal in deinen gedanken und mit dem stift die spiegelung durch

    6. was musst du alles beachten

    7. jetzt stelle einen "pseudoCode" auf. so eine art "backanleitung"

    8. versuche jetzt das in einen code umszusetzen

    9. poste es wenn es nicht klappt

    10. dann helfen wir dir.

    So lernst du prog. am besten.

    kannst auch ein gutes mathebuch nehmen und nachschauen wie die formel aussieht. und versuchen die formel umzusetzen.



  • Sagen wir mal wir haben die Matrix:

    0 1 2 3
    4 5 6 7
    8 9 8 7
    6 5 4 3

    An der diagonalen gespiegelt, würde das ja so aussehen, oder?

    6 5 4 3
    8 9 8 7
    -------
    4 5 6 7
    0 1 2 3

    Mein größtes Problem ist, wie die Syntax aussieht um die Matrix in das Programm einzugeben, das spiegeln denke ich würde dann mit einer for-Schleife gehen, abhängig Matrix-Größe!



  • Ähm, ich glaube du hast nicht an der diagon gespiegelt, ich würde mal vorschlagen:

    123      147
    456  ->  258
    789      369
    


  • Tip: male ein Quadrat und zeichne eine Diagonale ein! Was bedeutet denn diagonal?
    diagonal != waagerecht 😉



  • Ups, stimmt! 😉

    Wenn ich die Felder so nenne:

    a b c d
    e f g h
    i j k l
    m n o p
    

    Wie kann ich diese Matrix eingeben?
    Wenn ich den Buchstaben koordinaten geben würde:
    a(0,0), b(0,1), c(0,2), d(0,3), e(1,0)....
    müsste ich die Werte in den Klammern zum spiegeln einfach nur verstauschen!



  • jensr schrieb:

    Sagen wir mal wir haben die Matrix:

    Mein größtes Problem ist, wie die Syntax aussieht um die Matrix in das Programm einzugeben, das spiegeln denke ich würde dann mit einer for-Schleife gehen, abhängig Matrix-Größe!

    Also da du nicht nur weisst wie die Diagonale aussieht

    1. www.google.de gibt dort als suche -Diagonale- oder -"Diagonale spiegeln"- ( "" sind im 2ten bsp zu verwenden

    2. Gehe das Kapitel der Arrays nochmals durch

    Denn du frägst ja wie du es eingeben sollst.

    int matrix[3][3]; // für eine 3*3 matrix ( integer matrix )
    

    und

    matrix[0][0] = 101;  // ganz oben links schreibe eine 101 rein
    

    versuche das mal mit einer festen matrix zuerst. Wenn es klappt kannst du es "dynamisch" machen.

    Dann kannst du es noch erweitern und Sachen vorher "abfragen" und "errechnen" wenn einer z.b. eine Matrix hat die wie folgt ausshieht

    1 2 3
    4 5 6

    viel spass beim testen.



  • jensr schrieb:

    Ups, stimmt! 😉

    Wie kann ich diese Matrix eingeben?
    Wenn ich den Buchstaben koordinaten geben würde:
    a(0,0), b(0,1), c(0,2), d(0,3), e(1,0)....
    müsste ich die Werte in den Klammern zum spiegeln einfach nur verstauschen!

    die lösung steht jetzt oben schon.

    wenn du "fest" machst einfach die werte so vertauscht, dann hast du das problem für eine matrix gemacht

    fang mal mit quadratischen an
    und variablen grösssen. z.b. 3,3 oder 4,4 oder 5,5
    dann kannst du auch folgendes mache.
    2 for schleifen ( da es ja 2D ist ) und dann mit zufallswerten füllen. So kannst du die matrix schnell füllen mit rigendwelchen werten.

    for( int i = 0; i < x; i++)
         for ( int j = 0; j < y; j++)
            matrix[i][j] = // srand und google sind deine freunde
    


  • Hab jetzt dieses Programm gefunden und werde es an meine bedürfnisse anpassen:

    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #define GROESSE 3
    using namespace std;
    void ausgabe(double matrix[][GROESSE])
    {
      int i,j;
    
      for (i=0 ; i<GROESSE ; i++) {
        for (j=0 ; j<GROESSE ; j++){
          printf("%g ", matrix[i][j]);
        }
        putchar('\n');
      }
    }
    
    void eingabe(double matrix[][GROESSE])
    {
      int i,j;
    
      for (i=0; i<GROESSE ; i++) {
        for (j=0; j<GROESSE ; j++) {
          scanf(" %lg", &matrix[i][j]);
        }
      }
    }
    
    void transpose(double matrix[][GROESSE]){
      int i, j;
      double temp;
    
      for (i = 0; i<GROESSE; i++){
        for (j = i+1; j < GROESSE; j++) {
    	  temp=matrix[i][j];
    	  matrix[i][j]=matrix[j][i];
    	  matrix[j][i]=temp;
        }
      }
    }
    
    int main(void)
    {
      int x = 10;
      double matrix[GROESSE][GROESSE];
    
      printf("Matrix %dx%d eingeben:\n",GROESSE,GROESSE);
      eingabe(matrix);
    
      printf("Eingegebene Matrix:\n");
      ausgabe(matrix);
    
      transpose(matrix);
    
      printf("An der diagonalen gespiegelte Matrix:\n");
      ausgabe(matrix);
      system("PAUSE");
      return 0;
    }
    

    Man soll die größe der Matrix selber eingeben können!
    Ich bekomme nur das "define GROESSE" nicht weg, bekomme immer ne Fehlermeldung, egal was ich mache!



  • klar

    lösch einfach das Define raus. dann ist es weg 😉

    dann kösche ueberall in den eckigen klammern das GROSSE raus

    dann im main mach eine abfrage

    1. geben sie die breite ein
    2. geben sie die höhe ein

    beides mal mit cin "einfangen"
    dann hast du ja die grösse sprich die dimension der matrix

    die matrix selbst musst du dynamisch machen

    beispiel ---> http://www.c-plusplus.net/forum/viewtopic.php?t=39489

    viel spass



  • Ich wette...
    du studierst in Heidelberg bei Prof. "Schlaftablette" Paech 😃


Anmelden zum Antworten