Matritzen C++



  • Hallo Leute,

    Ich bin auf eure Hilfe angewiesen und habe leider momentan noch keinen Ansatzpunkt gefunden. Ich würde gerne verstehen wie ich den Code aufbauen muss, und warum um die Aufgabe zu lösen.
    Ich hoffe ihr könnt mir helfen.

    Aufgabe:
    Erzeugen Sie eine quadratische Matrix einer durch eine Eingabe bestimmten Größe (maximal 100 Zeilen/Spalten) mit folgendem Aufbau (Bsp. n=4):
    1 2 4 7
    3 5 8 11
    6 9 12 14
    10 13 15 16

    Die natürlichen Zahlen sollen also der Reihe nach diagonal nach links unten aufgefüllt werden.
    Schreiben Sie eine Funktion zur Anzeige der Matrix.
    Schreiben Sie eine Funktion zum Spiegeln der Matrix an der Gegendiagonale.
    Schreiben Sie eine Funktion zum Rotieren der Matrix im Uhrzeigersinn.
    Schreiben Sie eine Funktion, die die Summe der Zahlen in allen vier Dreiecken ohne die Diagonalen sowie die Summe der Diagonalen berechnet und anzeigt. Im Beispiel: Summe-Nord=6, Summe-Ost=25, Summe-Süd=28, Summe-West=9, Summe-Hauptdiagonale=34, Summe-Gegendiagonale=34
    Schreiben Sie ein Verwaltungsprogramm, das den Aufruf aller Funktionen mehrfach gestattet.

    Ich würde versuchen die Matritzen per Arrays zu erstellen, allerdings erschlägt mich die Komplexität der Aufgabe leider, weil einfach so viel zu machen ist, dass ich gern von Anfang an die richtige Struktur verwenden würde.

    MfG Dommasch



  • Die Grundlage allen Übels ist als in deinem Fall die Matrix.
    Du brauchst also eine Matrix-Klasse die irgendeine Art von Zugriff a la 'f(x, y )' anbietet und es dir ermöglicht, Zellen zu ändern und auszulesen.

    Für die Matrix gibt es zwei Ansätze: entweder ein Array von mehreren Arrays ( n x n ), oder ein Array der Größe n².



  • #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    
    int main(){
    	
    	int range;
    	cin>>range;
    	cout<<"\n";
    	int m[range][range];
    	
    	if (range > 100) {
    		cout<<"Fehler, Wert <=100 eingeben \n";
    		return 0; }
    	
    	//Berechnung
    	
    	int v =1;
    	for (int i = 0; i < 2 * range - 1; i++) {
    		int a = 0;
    		if (i >= range) a = i - range + 1; //a>1
    		
    		for (int k = a; k <= i -a; ++k) {
    			m[k][i-k] = v++;
    		}
    	}
    		
    	//Ausgabe
    	
    	for (int y = 0; y < range; ++y) {
    		for (int x = 0; x < range; ++x) {
    			//cout<<m[y][x]<<"\t";
    			printf("%2d\t",m[y][x]);
    		}
    		cout<<std::endl;
    	}
    }
    

    so weit bin ich mit meinen kollegen jetzt gekommen , mehr oder weniger verstehe ich auch den großen teil des codes. allerdings ist das das maximale was wir hinbekommen.



  • @Dommasch sagte in Matritzen C++:

    allerdings ist das das maximale was wir hinbekommen.

    Und jetzt sollen wir den Rest programmieren?

            int range;
    	cin>>range;
    	cout<<"\n";
    	int m[range][range];
    

    ist in standardkonformen C++ ungültig. range müsste eine Konstante sein.

    Definiert eine Klasse Matrix mit einem std::vector<int>. Der Konstruktor bekommt die Größe und legt den Vector entsprechend an. Eine Funktion int& operator()(size_t row, size_t column) liefert dann eine Referenz auf ein Element aus dem Vector.



  • @Dommasch

    Und wenn du vor hast, so wie bisher alles in die main-function zu klatschen, dann wirst du es 1. nicht fertig kriegen und 2. niemanden finden, der lust hat dir dabei zu helfen.

    Also bitte: neben den schon angesprochenen Klassen, nutze auch Funktionen.

    @Dommasch sagte in Matritzen C++:

    allerdings erschlägt mich die Komplexität der Aufgabe

    Ja, aber sobald du alles schön in Klassen und Funktionen aufgeteilt hast und dann eins nach dem anderen erledigen kannst, wirkt das Ganze auf einmal nicht mehr so furchtbar komplex.



  • Da war doch was...
    Das sollte dir zumindest bei der Datenhaltung weiterhelfen.


Anmelden zum Antworten