Array um 90 Grad drehen

sheel

I love Asm
@fredmania: Lies nochmal, was ich geschrieben hab.
Was soll die Zeile 9 eigentlich?
Und nur, um weiteren Fehlern vorzubeugen:
Was sind die Werte von ROWS, COLS, und was der Typ des Arrays?

@wolfi: Ihr geht vermutlich alle drei in die selbe Lehrveranstaltung der selben Uni.
Interessant, dass sich das Unverständnis da so häuft...
 

cprog

Grünschnabel
Hallo! :)

@fredmania:
kurz zu deinem Code
Code:
for(i= 0; i < COLS; i++)
  {
    for(j = ROWS - 1; j >= 0; j--)
    {
      printf("%c", matrix[j][i]);
      buffer[i][j] = matrix[3-j][i];
    }
ich denke hier wäre es sinnvoll, wenn du die "gedrehte" matrix in deinen buffer überschreibst und den buffer printest.
dann kannst du, nachdem diese 2 for-schleifen durchlaufen worden sind, deinen buffer wieder in die matrix schreiben.
das kannst du einfach nochmal mit dem selben spiel (2 schleifen laufen lassen) machen. danach erst, sollte ein neuer durchlauf mit der neuen matrix erfolgen :)
ich denke so bleibt es für den anfang übersichtlicher.
ich hoffe es ist nicht unklar was ich damit sagen will :)

LG!
 

dandy

Grünschnabel
Hi, seid ihr auf der TU-Graz?

Bin gerade an dem selben Beispiel gesessen. Also die einzelnen Matizen drehen ist schon ganz gut gelaufen. (Die Tipps von euch waren absolut klasse! )

Wie habt ihr das mit der Ausgabe dann gelöst? Weil es ja dann 4 unabhängige Matrizen sein sollen und man pro Schleifendurchlauf eine Stelle pro Matrix rausschreibt (also ich mach das zumindest so...)
War bei der Vorlesung nicht dabei - löst man das dann mit den Pointern oder so?

Lg Andi
 

sheel

I love Asm
Und damit waren es 4...glaub ich zumindest :)

Aber ganz verstanden hab ich das jetzt nicht.
Du willst alle 4 Matrizen gleichzeitig ausgeben?
Oder meinst du, dass du gern alle 4 datenmäßig gleichzeitig hättest,
nicht nur nach und nach drehen-ausgeben-drehen-ausgeben...
 

dandy

Grünschnabel
Also meine Ausgabe sollte dann ca. so aussehen:

Code:
- - - -    - - - -    - - - -     - - o -
- o - -   - o o -   - o - -    - - o -
o o o -  o o - -  - o - -    - - o -
- - - -     - - - -   - o o -   - - o -

- o - -   - o - -   - - - -     - - - -
- o o -  - o o -   o o o -  - - - -
- o - -   - - o -   o - - -    o o o o
- - - -    - - - -    - - - -    - - - -

.
.
.

Das ist ein bisschen schwer darzustellen weil die 'o' hier breiter sind als die '-'..
Also auf jeden fall solls am Ende aussehen wie
Code:
Matrix1  Matrix2  Matrix3  Matrix4

Matrix1(gedreht)  Matrix2(gedreht) ...

Mein Problem ist, dass ich die einzelnen Zeichen der Matrizen pro Schleifendurchlauf ausgeb
Code:
for(i = 0; i < 4; i++)
    {
        for(j = 0; j < 4; j++)
        {
            printf("%c %c %c %c %c ", tetris1[i][j]
                                                     , tetris2[i][j]
                                                     , tetris3[i][j]
                                                     , tetris4[i][j]);

            buffer1[i][j] = tetris1[3-j][i];
            buffer2[i][j] = tetris2[3-j][i];
            buffer3[i][j] = tetris3[3-j][i];
            buffer4[i][j] = tetris4[3-j][i];
        }
        printf("\n");
    }

Also da ist klar dass ich immer die ersten Zeichen nebeneinander hab, ein Feld weiter jeweils die zweiten Zeichen usw.

Bin da grad ein bisschen planlos =/
 

cprog

Grünschnabel
hi!

das problem ist ja, dass du nicht einfach eine matrix/2Darray so printen kannst, wie es veranschaulicht wird. ist ja dem computer ziemlich egal. mir fällt jetzt auf die schnelle keine eleganterer vorschlag ein:

es sollen ja jeweils 4 matrizen nebeneinander und die jeweils 1xgedrehten darunter geprinted werden, bis das ausgangs pattern wieder erreicht ist. dann könntest du doch einfach so vorgehen, dass du die jeweiligen ersten zeilen der 4 matrizen über eine schleife printest und das dann jeweils 4 mal wiederholst. dann stehen die ersten 4 matrizen nebeneinander auf dem screen. (schönheitshalber nach jedem 4. element einer matrize ein " " leerzeichen einfügen, dann sieht das ganze auch übersichtlicher aus ;-))
und dieses schema, dann einfach auch für die gedrehten matrizen anwenden.

es ist ja nur eine formatierungsangelegenheit, aber ich denke so solltest du das hinbekommen :)

bitte fragen, falls ich mich verplappert haben sollte ;)

LG
 

deepthroat

Erfahrenes Mitglied
Also meine Ausgabe sollte dann ca. so aussehen:

Das ist ein bisschen schwer darzustellen weil die 'o' hier breiter sind als die '-'..
Da hilft es wenn du [mono]...[/mono] verwendest:

- - - - - - - - - - - - - - o -
- o - - - o o - - o - - - - o -
o o o - o o - - - o - - - - o -
- - - - - - - - - o o - - - o -

- o - - - o - - - - - - - - - -
- o o - - o o - o o o - - - - -
- o - - - - o - o - - - o o o o
- - - - - - - - - - - - - - - -

.
.
.
 

sheel

I love Asm
nofre hat gesagt.:
ich hab ein ähnliches Problem, wie du 2013 erklärt hast und bin auch totaler Anfänger: https://www.tutorials.de/threads/array-um-90-grad-drehen.396027/

Kannst du mir bitte erklären was genau du mit : array_colcount und array_rowcount bzw. "rowcount ist Anzahl beim Quellarray von oben nach unten, col eben das Andere", gemeint hast, bzw wie hast du diese Variablen(?) int .

@Nofre

Man kann sich ein zweidim. Array als Rechteck vorstellen.
Bei einem "int meinarray[2[[4];" gibts 2 rows/Zeilen und 4 columns/Spalten und damit sind die 8 ints drin dann praktisch so angeordnet:
Code:
* * * *
* * * *
Von oben nach unten zählt man 2 rows, und links nach rechts 4 cols.