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 stift3. mach eine kleine matrix so 4*4 z.b.
4. mach das mit einer rechteckigen auch5. 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 3An 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 3Mein 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 6viel 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 einbeides mal mit cin "einfangen"
dann hast du ja die grösse sprich die dimension der matrixdie 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