C :: Aufgabe #44 :: Lösung #2

3 Lösungen Lösungen öffentlich
#44

Matrizen um 90 Grad drehen

Anfänger - C von pocki - 11.11.2013 um 16:38 Uhr
Erstelle ein Programm, welches als Eingabe eine Matrix beliebiger Größe entgegennimmt und diese dann um 90 Grad dreht.

Beispiel an einer 4x4 Matrix:
Eingabematrix mit den Elementen:
a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

sollte diese Ausgabematrix erzeugen:
a41 a31 a21 a11
a42 a32 a22 a12
a43 a33 a23 a13
a44 a34 a24 a14

Das Programm sollte für unterschiedlich großen und auch mit nicht quadratischen Matrizen funktionieren.
#2
vote_ok
von 0.bit.0 (50 Punkte) - 07.03.2014 um 15:09 Uhr
Quellcode ausblenden C-Code
/*
 * Dieses kleine Programm soll als erstes zwei Parameter entgegen nehmen, die die Dimension der 
 * Matrix festlegen. Anschliessend sollen die Zahlen in der Reihenfolge: Zeile 1, Spalte 1,
 * Zeile 1,Spalte 2, ...Zeile m, Spalte n eingelesen werden. Dann wird einmal zur Kontrolle
 * die Ursprungsmatrix ausgegeben. Dann wird die Matrix um 90 Grad (nach rechts) gedreht und ausgegeben.
 */

#include <stdio.h>

// Diese Funktion gibt einfach einen als zweidimensionales Array uebergebenen Wert in Matrixform aus.
void return_matrix (int *p, int z, int s){
	int i, j;
	for (i = 0; i < z; i++){
		for (j = 0; j < s; j++){
			printf ("%d ",*p++);
		}
		printf ("\n");
	}
}

// Diese Funktion dreht ein zweidimensionales Array und gibt es aus
void drehe_matrix (int *g, int z, int s){
	int tmp_array [s][z];
	int i,j;
	for (i = 0; i < z; i++){
		for (j = 0; j < s; j++){
			tmp_array[j][z-(i+1)] = *g++;
		}
	}
	return_matrix (tmp_array[0],s,z);
}


/* Mit dieser Funktion wird das zweidimensionale Array mit Werten (durch Benutzereingaben) gefuellt.
 * Anschliessend werden die Funktionen zur Ausgabe und die zum Drehen des Array aufgerufen.
 */
void mach_array (int z, int s){
	int gesamt [z][s];
	int i;
	for (i = 0; i < z; i++){
		int j;
		for (j = 0; j < s; j++){
			printf ("Bitte geben Sie nun den Wert fuer die %d Zeile und die %d Spalte ein\n", (i+1), (j+1));
			scanf ("%i", &gesamt [i][j]);
			getchar();
		}
	}
	printf ("Matrix im Urzustand: \n");
	return_matrix (gesamt[0],z,s);
	printf ("\nUnd die Matrix in dem um 90 Grad nach rechts gedrehten Zustand:\n");
	drehe_matrix (gesamt[0],z,s);
}

/*Diese Funktion nimmt zwei Benutzereingaben zur Dimensionierung entgegen und 
*ruft dann die Funktion mach_Array auf
*/

void mk_array (){
	int zeile, spalte;
	printf ("Geben Sie bitte die Zeilenanzahl ein: \n");
	scanf ("%i",&zeile);
	getchar();
	printf ("Die Zeilenanzahl ist: %i\n",zeile);
	printf ("\nGeben Sie nun bitte die Spaltenanzahl ein: \n");
	scanf ("%i", &spalte);
	getchar();
	printf ("Die Spaltenanzahl ist: %i\n\n", spalte);
	mach_array (zeile,spalte);
}

int main (){
	mk_array();
	return 0;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben