Datentabelle Spaltenweise auffüllen!?



  • Hallo liebe Community,

    in einer Aufgabe soll ich eine Datentabelle erstellen, bei der die Zeilen- und Spaltenzahl zu Beginn per Abfrage eingegeben werden soll. Diese Tabelle soll Spaltenweise: 1. Spalte ungerade ganze Zahlen beginnend mit der 1, 2. Spalte Primzahlen beginnend mit der 2 und jede weitere Spalte mit dem Vielfachen des Spaltenindexes, aufgefüllt werden. Ich habe wirklich große Schwierigkeiten überhaupt einen Ansatz zu finden. Ich weiß, dass es eventuell mit einem 2D-Array möglich wäre, jedoch hatte ich noch keine 2D-Arrays im Unterricht.

    Über Ansätze wäre ich sehr dankbar.



  • Nein, eine Dimension reicht aus. Du machst es wie mit der Zeitrechnung: erstes, zweites, drittes Jahrzehnt, und in jedem Jahrzehnt kann man die einzelnen Jahre angeben.

    Statt Array sollte es ein std::vector sein. Wobei ich mir fast sicher bin, dass jetzt kommt: hatten wir noch nicht. Dann sollte sich dein Lehrer allerdings schätzen.



  • Nein Vector hatten wir leider auch nicht. Tatsächliche nur 1D-Arrays. Verstehe ich deinen Ansatz richtig, dass also eine äußere for-Schleife bis <= der Spaltenzahl, eine weitere innere for-Schleife bis <= der Zeilenzahl erstellt werden soll und anschließend mit if-Blöcken unterscheiden soll, ob ungerade ganze Zahlen, Primzahlen oder Vielfache des Spaltenindex gefüllt werden?



  • @Glaukonit
    Das wäre eine Möglichkeit. Probiere es mal aus.



  • #include <iostream>
    using namespace std;

    int main()
    {
    /* Zeilen und Spalten definiert und
    * per Abfrage initialisiert */

    int Zeilenzahl, Spaltenzahl;
    cout << "Bitte Zeilenzahl eingeben: ";
    cin >> Zeilenzahl;
    cout << "Bitte Spaltenzahl eingeben: ";
    cin >> Spaltenzahl;
    
    /* Äußere for-Schleife geht die Spalten nacheinander
     * durch. Innere for-Schleife geht die Zeilen nacheinander
     * durch, jeweils von 1 bis <= der Anzahl */
    for(int i = 1; i <= Spaltenzahl; i++)
    {
        for(int j = 1; j <= Zeilenzahl; j++)
        {
            /* Wenn diese Bedingung erfüllt, dann wird Spalte 1
             * mit ungeraden ganzen Zahlen befüllt */
            if(i == 1)
            {
                if(j % 2 != 0)
                {
                    cout << j << endl;
                }
            }
            /* Wenn diese Bedingung erfüllt, dann wird Spalte 2
             *  mit den Primzahlen befüllt */
            if(i == 2)
            {
                int teiler = 2;
                while(j % teiler != 0)
                    teiler++;
                if(teiler == j)
                    cout << j <<" " << endl;
            }
            /* Wenn diese Bedingung erfüllt, dann werden alle Spalten
             * >= 3 mit den Vielfachen der Spaltenindizes befüllt */
            if(i >= 3)
            {
                int k = i;
                k = k * j;
                cout << k <<endl;
            }
        }
    }
    return 0;
    

    }
    Mit diesem Quellcode werden die Spalten fast so ausgegeben wie ich es haben möchte, doch zwei Sachen sind noch unpassend:
    1.) Das Programm gibt die "Spalten" in der Konsole untereinander aus und nicht wie eine Tabelle nebeneinander. Ich weiß das man "\t" benutzt, doch ich weiß nicht an welcher Stelle in diesem Code :/.

    2.) Bei der ersten und zweiten Spalte mit den ungeraden Zahlen und den Primzahlen gibt er nicht genauso viele Zahlen wie die Anzahl der Zeilen aus, sondern weniger, da er bspw. die 2, 4, .. (bei der Spalte 1) überspringt, da die Bedingungen nicht erfüllt sind. Wie könnte man das eventuell beheben ?



  • @Glaukonit sagte in Datentabelle Spaltenweise auffüllen!?:

    Nein Vector hatten wir leider auch nicht. Tatsächliche nur 1D-Arrays. Verstehe ich deinen Ansatz richtig, dass also eine äußere for-Schleife bis <= der Spaltenzahl, eine weitere innere for-Schleife bis <= der Zeilenzahl erstellt werden soll und anschließend mit if-Blöcken unterscheiden soll, ob ungerade ganze Zahlen, Primzahlen oder Vielfache des Spaltenindex gefüllt werden?

    Falls das nix wird, hätte ich eine andere Idee:
    Du erstellst ein Array der Größe zeilen * spalten
    Du füllst die ersten zeilen Werte mit den ungeraden ganzen Zahlen, die zweiten zeilen Werte mit den Primzahlen, usw.

    Du hast dann ein Array, in dem die ersten zeilen Werte Spalte 1 entsprechen, die zweiten zeilen Werte entsprechen Spalte 2 usw.

    Dann brauchst Du es nur noch auszugeben:

    for(i = 0; i < zeilen; ++i)
    {
      int ind = i;
      for(z = 0; z < spalten; ++z)
      {
         cout << array[ind] << '\t';
         ind += zeilen;
      }
      cout << '\n';
    }
    

    ungetestet.


Log in to reply