Python :: Aufgabe #133

3 Lösungen Lösungen öffentlich

Mehrdimensionale Arrays

Anfänger - Python von zefcat - 27.11.2016 um 10:46 Uhr
Sie sollen ein C Programm schreiben, welches eine 4x4 Matrix um 90° nach rechts dreht. Eine Drehung soll somit folgendermaßen aussehen:

a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

wird zu

a41 a31 a21 a11
a42 a32 a22 a12
a43 a33 a23 a13
a44 a34 a24 a14

Folgende Matrizen sollen Sie insgesamt 4 mal drehen:


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


Die Matrizen sollen insgesamt 5 mal ausgegeben werden, einmal bevor eine Drehung durchgeführt wurde und anschließend nach jeder Drehung (die letzte Ausgabe entspricht also der ersten Ausgabe).

Als Trennzeichen dienen ein Leerzeichen zwischen den einzelnen Symbolen innerhalb einer Matrix, zwei Leerzeichen zwischen zwei horizontal angeordnete Matrizen und eine Leerzeile zwischen den einzelnen Versionen. Beachten Sie das Fehlen von abschließenden Leerzeichen nach der letzten Matrize. Siehe dazu auch die Beispielausgabe.

Lösungen:

vote_ok
von ZRX88 (2080 Punkte) - 04.12.2016 um 14:01 Uhr


Quellcode ausblenden Python-Code
""" matrix class -> rotate matrix """

class matrix():
    
    dim = 4
    matrix = []
    
    def init(self):
        pass
    
    def initialize_matrix(self):
        for i in range(self.dim):
            row = []
            for j in range(self.dim):
                row.append('a_%d%d'  % (i+1,j+1))
            self.matrix.append(row)

    def pritty_print(self):
        for zeile in range(self.dim):
            print(','.join(self.matrix[zeile]))
            
    def rotate(self):
        new_matrix = []
        for spalte in range(self.dim):
            row = []
            for zeile in range(self.dim -1,-1,-1):
                row.append(self.matrix[zeile][spalte])
            new_matrix.append(row)
        self.matrix = new_matrix

matrix = matrix()
matrix.initialize_matrix()

for iterations in range(5):
    print('matrix after %d iterations:' %iterations)
    matrix.pritty_print()
    matrix.rotate()

    
vote_ok
von jule0625 (120 Punkte) - 31.07.2018 um 11:46 Uhr
Quellcode ausblenden Python-Code
Zeele=[[0,1,2,3],[0,1,1,3],[0,1,2,3],[0,1,7,3]];#Eingabe
Zeile=[[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3]];#Ausgabe
cursor=len(Zeele);
ze=len(Zeele[0]);
for z in range(0,ze,1):
    print(Zeele[z]);
    


count=0;
while(count<=4):
    for x in range(0,cursor,1):
        for y in range(0,ze,1):
            Zeile[x][y]=Zeele[3-y][x];
        
                 
    print("ROTATE/n",count+1)
    for z in range(0,cursor,1):
        print(Zeile[z]);

    for x in range(0,ze,1): #überschreiben des alten und neuen Wert
        for y in range(0,cursor,1):
            Zeele[x][y]=Zeile[x][y];    
    
    count=count+1;
vote_ok
von Gisbert5020 (830 Punkte) - 08.08.2018 um 21:05 Uhr
Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-
# Python 3.7

import numpy as np

def ausdruck(m,grad):
    md=np.rot90(m,grad)
    i,j=md.shape
    for x in range(i):
        for y in range(j):
            print(md[x,y],end=' ')
        print()
    print()

n= np.array([["a11", "a12", "a13", "a14"],["a21", "a22", "a23", "a24"], ["a31", "a32", "a33", "a34"], ["a41", "a42", "a43", "a44"]])
m = np.rot90(n,3)

i,j =n.shape
for y in range(i):
    for x in range(j):
        print(n[y,x],end=' ')
    print(end=' ')
    for x in range(j):
        print(m[y,x],end=' ')
    print()
print()

g = np.array([["-","-","-","-","-","-","-","-","-","-","-","-","-","-","o","-"],
     ["-","o","-","-","-","o","o","-","-","o","-","-","-","-","o","-"],
     ["o","o","o","-","o","o","-","-","-","o","-","-","-","-","o","-"],
     ["-","-","-","-","-","-","-","-","-","o","o","-","-","-","o","-"]])
for i in range(5):
    ausdruck(g,i)