Tabelle erstellen mithilfe von Arrays



  • @mmm_1482_
    wie würdest du es mit der Hand machen?

    Erstmal die Spaltennummern ausgeben.
    Vorne Platz für die Zeilennummern lassen.

    Dann Zeilenweise die Zeilennummer und dann den Tabelleninhalt für diese Zeile ausgeben.

    wegen der Formatierung musst du mal die Modifier für cout ansehen.



  • @DirkB wie mache ich das denn in einem array? ich meine den inhalt der Tabelle habe ich. ich schaffe es aber nicht, dass kopf und seite zusammen mit dem inhalt ausgegeben wird



  • @mmm_1482_
    Der Kopf wird extra ausgegeben.

    Die Zeilennummer gibst du zwischen den Schleifen aus.

    oder wo hängt es?



  • @DirkB Wie sieht die anweisung dazu im Code aus? Es soll danach eine Benutzerfrage aufkommen, bei dem der benutzer eine beliebige Zeile aufrufen kann. Ich weiß leider nicht, wie ich die werte aus dem ersten Array ausgeben lassen kann, wenn es sich dabei um einen zweidimensionalen Array handelt. Normalerweise würde ich das über eine Schleife machen und dann den Wert i für jeden Array wert kleiner 10 ausgeben lassen. Aber bei einem array [11][11] wie geht das da?



  • @DirkB
    ich hab etwas ausprobiert und das scheint zu klappen:
    ( gibt es einen besseren Weg, oder ist dieser Code dafür gut?)

    int zeilen_auswahl = 0;
    cout << "Bitte geben Sie éine Zeile ein: " << endl;
    cin >> zeilen_auswahl;
    
    
    int row1 = 0;
    int col1 = 0;
    for (row1 = 0; row1 < 11; row1++)
    {
    	for(col1=0; col1<11; col1++)
    	{
    		if (row1 == zeilen_auswahl)
    			cout << tabelle[row1][col1] << "\t ";
    	}
    	
    
    	cout << endl;
    }


  • @mmm_1482_ Warum noch die Schleife für die Zeilen?

    int zeilen_auswahl = 0;
    cout << "Bitte geben Sie éine Zeile ein: " << endl;
    cin >> zeilen_auswahl;
    
    	for(int col1=0; col1<11; col1++)
    	{
    	  cout << tabelle[zeilen_auswahl][col1] << "\t ";
    	}
    	
    
    	cout << endl;
    


  • @DirkB ich hatter es vorher ohne probiert, aber da hat es nicht funktioniert. Erst mit der zweiten schleife.
    Ich habe übrigens deinen Tipp mit der Extra Kopf-Überschrift befolgt und es mit einer funktion realisiert 🙂 hat super geklappt. Jetzt muss ich nur noch die linke Spalte irgendwie hinbekommen. Hast du da noch einen Tipp?



  • @mmm_1482_

    for (row1 = 0; row1 < 11; row1++)
    {
            cout << row1 << "\t ";
    	for(col1=0; col1<11; col1++)
    	{
    //		if (row1 == zeilen_auswahl)
    			cout << tabelle[row1][col1] << "\t ";
    	}
    ...
    

    Edit: Zeile 6 auskommentiert



  • @DirkB Das funktioniert leider nicht. Ich hatte so eine Schleife bereits erstellt, aber das Problem ist, dass dann der Inhalt der Tabelle nur auf null ist. Das ist auch mein Hauptproblem bislang gewesen. Ich konnte entweder nur Kopf/Spalte richtig ausführen lassen, aber dann war der Inhalt auf Null gesetzt. Oder ich konnte den Inhalt korrekt setzen, aber die Spalt/Kopfzeile nicht. Den Kopf habe ich jetzt seperat über Funktionen formuliert, aber die Spalte links funktioniert bei mir nicht.



  • @DirkB So sieht mein Code bislang aus. Fehlt halt echt nur dass an der Seite nochmal die Zahlen 1-10 mit ausgegeben werden

    void printout(int i =0)
    {
    for (int p = 1; p <= 10; p++)
    {
    cout << p << "\t" ;

    }
    cout << endl;
    

    }

    void linie(int breite = 75)
    {
    for (int b = 0; b <= breite; b++)
    {
    cout << "_";
    }cout << endl;
    }

    int main()
    {

    int tabelle[10][10] = { 0 };
    int row = 0;
    int col = 0;
    int row1 = 0;
    int col1 = 0;
    int breite=75;
    int zeilen_auswahl = 0;
    
    //Funktionsaufruf von linie
    linie(breite);
    
    cout << " +++++++++ \t Das ist das kleine 1x1 \t ++++++++++" << endl;
    //Funktionsaufruf für Kopf
    printout(col);
    
    // Funktionsaufruf für linie
    linie(breite);
    
    // Schleife für  Zeilen, Y-Achse
    for (row = 0; row < 11; row++)
    {
    	// Schleife fuer Spalten, X-Achse
    	for (col = 0; col < 11 ; col++)
    	{
    		if (row != 0 && col != 0) // Überflüssig kann auch weggelassen werden 
    		{
    			tabelle[row][col] = row * col;
    			cout << tabelle[row][col] << "\t ";
    			
    		}
    		
    		
    	}
    	cout << endl;
    }
    
    
    
    
    do
    {
    	cout << "Bitte geben Sie eine Zeile ein: " << endl;
    	cin >> zeilen_auswahl;
    } while (zeilen_auswahl >= 10);
    
    
    
    for (row1 = 0; row1 < 11; row1++)
    {
    	for(col1=0; col1<11; col1++)
    	{
    		if (row1 == zeilen_auswahl)
    			cout << tabelle[row1][col1] << "\t ";
    	}
    	
    
    	cout << endl;
    }


  • Da du das Array jetzt ja auf 10x10 verkleinert hast, mußt du auch deine Schleifen entsprechend anpassen (so hast du bisher undefiniertes Verhalten, wegen Speicherzugriffsfehlern):

    for (int row = 0; row < 10; row++)
    {
    	for(int col = 0; col < 10; col++)
                // ...
    }
    

    Noch besser wäre es, du würdest Konstanten für die Array-Größen verwenden

    const int MaxRows = 10;
    const int MaxCols = 10;
    
    int tabelle[MaxRows][MaxCols] = { 0 };
    

    Und diese dann auch im weiteren Code, z.B. für die Schleifen, verwenden.



  • @Th69
    ja die größen habe ich im Laufe meiner vielen versuche immer wieder geändert 😃 muss das nochmal anpassen danke für die info 🙂

    und ich setz deine anderen tipps auch mal um. Hört sich gut an



  • @mmm_1482_

    1. Bitte nutze die Code-Tags: Code mit der Maus markieren und dann auf das </> Symbol oben (rechts neben C++ Auswahl) klicken.

    2. Willst du jetzt 0 bis 10 (11 Elemente pro Zeile/Spalte) oder 1 bis 10 (10 Elemente pro Zeile/Spalte) ausgeben.
      Bedenke, dass der Index immer bei 0 anfängt.

    3. Im Augenblick machst du die Berechnung für die Tabelle bei der Ausgabe. Ist etwas überflüssig.

    4. Was soll der Parameter (das i) bei printout?

    5. (Zeile 48ff) Warum zwei verschachtelte Schleifen, wenn du nur eine Zeile ausgeben willst. Das war doch schon gekärt wie das geht.

    @mmm_1482_ sagte in Tabelle erstellen mithilfe von Arrays:

    So sieht mein Code bislang aus. Fehlt halt echt nur dass an der Seite nochmal die Zahlen 1-10 mit ausgegeben werden

    Was hindert dich daran, die Zeile cout << row << "\t "; zwischen Zeile 24 und 25 einzubauen?


Anmelden zum Antworten