zweidimensionale Arrays Hilfe!



  • Hallo,
    ich habe ein Problem mit einer Programmieraufgabe, bei der es um zweidimensionale Arrays geht. Den Großteil habe ich schon geschafft, aber an der letzten Funktion bin ich am verzweifeln.

    Hier ist die Aufgabe:

    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-Haupdiagonale=34, Summe-Nebendiagonale=34

    Die Summe der Diagonalen habe ich schon, aber ich schaffe es nicht die Summe der Pole zu machen. Ich versuche gerade eine einfache Matrix zu schreiben in der nur das obere Dreieck angezeigt wir, aber ohne die Diagonalen, aber das bekomme ich nicht hin. Könnte mir da jemand helfen? Ich habe es geschafft, das nur die Reihen bis zur Hälfte der Matrix angegeben werden und das die Zeilen vorne und hinten auch Null sind, aber jetzt muss ja in der zweiten Zeile noch eine Null vorne und hinten dazu damit es auch das Dreieck wird.

    Hier ist mein kleiner Quelltext-Schnipsel:

    #include <iostream>
    #include <cstdio>

    const int MAX = 100; //Maximalgröße

    int s; //Size ,Größe
    int c=0; //Coulumn ,Spalte
    int r=0; //Row ,Zeile
    int z=0;
    int e;

    int main (){ //(Summe) nördliches Dreieck

    int matrix[MAX][MAX];

    std::cout<<"Wie groß soll die Matrix sein?" <<std::endl;
    std::cin>>s;

    if (s<=MAX){
    for (c=0; c<s/2; c++){
    for (r=0; r<s-2; r++){
    for(int i=0; i<s; i++){
    matrix[c][r+1]=z;
    z++;
    }
    }
    }

    for(c=0; c<s; c++) { //Zeilen
    for(r=0; r<s; r++) { //Spalten
    printf("%4d ", matrix[c][r]);
    }
    printf("\n");
    }
    }
    }

    Von einmal vielen Dank!



  • Du solltest dich noch mal einloggen und deinen Quelltext in Codetags fassen.
    Das erhöht die Lesbarkeit und die Antwortwahrscheinlichkeit hier im Forum.

    Globale Variable - warum??
    printf in C++ - warum??

    MfG
    f.-th.



  • Tut mir leid, ich bin neu hier und weiß leider nicht wie das geht.

    In der Hauptaufgabe geht es darum, das eine quadratische Matrix ausgegeben werden soll, deren göße beliebig eingebbar ist, aber nicht größer als 100 ist. Und jetzt soll das Programm in unterschiedlichen Funktionen unterschiedliche Dinge ausführen, z.B. das Rotieren der Matrix im Uhrzeigersinn, oder Spiegeln an der Hauptdiagonalen. Und um Die letzte Aufgabe, also die Summen, lösen zu können möchte ich um selbst nachschauen zu können wo mein Programm nun was ausführt, das Dreieck was berechnet werden soll erst einmal normal darzustellen. Das die Zahlen, die dann an dieser Stelle im richtigen Programm stehen werden, addiert werden ist ja dann nicht mehr schwierig.

    Das printf haben wir in der Uni so beigebracht bekommen und ich finde es auch ganz praktisch zur Formatierung.



  • Janine_97 schrieb:

    Tut mir leid, ich bin neu hier und weiß leider nicht wie das geht.

    Bearbeite deinen Text, markiere den Quelltext und klicke unten den Button "C++". Überprüfe mit "Vorschau", ob alles richtig aussieht.

    Zu deinem Programm:
    1. Halte den Scope der Variablen so klein wie möglich.
    2. Bei sowas:

    int c=0; //Coulumn ,Spalte
    

    ist der Kommentar komplett überflüssig. Benenne deine Variable stattdessen einfach "column" oder "col". Ist dann sofort klar, auch ohne Kommentar. Zumal du später im Programm schreibst:

    for(c=0; c<s; c++) { //Zeilen
    

    Nun scheint deine Column-Variable auf einmal laut Kommentar zur Spaltenvariable geworden zu sein?! Das ist verwirrend. Bei der Ausgabe sind die Namen einfach vertauscht. Außerdem siehe 1.: deklariere die Variable direkt im for, nutze KEINE globale Variable.
    3. Was soll die innerste Loop machen?

    for(int i=0; i<s; i++){ 
        matrix[c][r+1]=z; 
        z++; 
    }
    

    In der Loop wird die Loop-Variable i gar nicht verwendet. Das kann so also nicht sinnvoll sein.
    4. Du schreibt von einem Beispiel in deiner Aufgabe. Wir haben das Beispiel aber nicht. Es hilft uns also nicht, wenn du schreibst, dass im Beispiel Summe-Ost=25 ist.
    5. Die Variable e wird nicht benutzt.
    6. Soll das Ergebnis C oder C++ sein? Entscheide dich für eine Sprache und schreibe in dieser, Mischmasch von C mit ein paar C++-Elementen ist wenig sinnvoll.
    7. Das Norddreieck ohne Diagonale kannst du z.B. so belegen:

    for (int row = 0; row < s / 2; ++row) {
        for (int col = row + 1; col < s - row - 1; ++col) {
            matrix[row][col] = ++z;
        }
    }
    

    Damit bekommst du dann zum Beispiel für Größe 9 sowas:

    0    1    2    3    4    5    6    7    0 
       0    0    8    9   10   11   12    0    0 
       0    0    0   13   14   15    0    0    0 
       0    0    0    0   16    0    0    0    0 
       0    0    0    0    0    0    0    0    0 
       0    0    0    0    0    0    0    0    0 
       0    0    0    0    0    0    0    0    0 
       0    0    0    0    0    0    0    0    0 
       0    0    0    0    0    0    0    0    0
    

    Die anderen 3 Seitendreiecke seien dir als Übung überlassen.


Anmelden zum Antworten