Anfänger Frage wegen Schleife [gelöst]



  • Hi,

    ich würde gerne eine Schleife schreiben die mir in ein Array immer wieder eine Bestimmte abfolge von zahlen schreibt.

    Ungefähr so:

    arrayindex 1: 0
    arrayindex 2: 1
    arrayindex 3: 2
    arrayindex 4: 0
    arrayindex 5: 1
    arrayindex 6: 2

    usw.

    Nur krieg ich das irgendwie nicht hin.

    Hier mein ansatz:

    for(int k = 0; k < (x * y);   k++)
        {
          if(k < (x * y ))
          {
            for(int j = 0; j < x; j ++)
            {
              pxMap[k] = j;
            }
          }
        }
    

    Nur klappt das nicht.

    Für Hilfe wäre ich sehr dankbar

    Gruß

    GT



  • einfach die zahl die zugewiesen werden soll erhoehen, und beim maximum {im beispiel 3} wieder zurueck setzen
    nur so ne idee

    // 1-3
    int j = 0
    for(int k = 0; k < (x * y); ++k, ++j)
    {
        if(j == 4) j = 0;
        pxMap[k] = j;
    }
    

    btw. deine if in der schleife kannst du ignorieren, da du den fall schon durch das for ausschliesst



  • const int NUMBER_SEQUENCE_LENGTH = 3;
    int numberSequence[NUMBER_SEQUENCE_LENGTH] = {0, 1, 2};
    
    const int ARRAY_TO_FILL_LENGTH = 7;
    int arrayToFill[ARRAY_TO_FILL_LENGTH];
    
    for(int i = 0; i < ARRAY_TO_FILL_LENGTH; i++)
    {
        int numberSequenceIndexToUse = i % NUMBER_SEQUENCE_LENGTH;
        arrayToFill[i] = numberSequence[numberSequenceIndexToUse];
    }
    

    ich bin mir nicht sicher ob man in c++ das array initialisieren kann so direkt mit {0, 1, 2}, wenn nicht machs halt mit index dingern also blabla[0] = 0; etc

    bzw wenn du davon ausgehen kannst dass arrayToFill immer eine länge hat die ein vielfaches von 3 ist kannst du es noch einafcher machen

    const int ARRAY_TO_FILL_LENGTH = 9;
    int arrayToFill[ARRAY_TO_FILL_LENGTH];
    
    for(int i = 0; i < (ARRAY_TO_FILL_LENGTH / 3); i++)
    {
        arrayToFill[i * 3 + 0] = 0;
        arrayToFill[i * 3 + 1] = 1;
        arrayToFill[i * 3 + 2] = 2;
    }
    


  • Mal vorab: "klappt nicht" ist keine gültige Fehlerbeschreibung 😉

    dann zu deinem Code: das if (k< (x*y)) hat in dem Fall keinen Effekt, weil der Schleifenkörper sowieso nur ausgeführt wird, solange diese Bedingung gilt. Danach schreibst du die Zahlen von 0 bis x-1 in pxmap[k] rein, was bedeutet, dass du in jedes Arrayelement nacheinander die zahlen von 0 bis x-1 schreibst, da bleibt am Ende natürlich überall x-1 als Wert stehn. Ich geb mal zwei Beispiele wie es richtig zu machen wäre:

    for(int k=0, l=0; k<(x*y); ++k, ++l)) { //k ist der arrayindex, l die Zahl die eingetragen wird
      if(l >= x) l=0;  //zurücksetzen von l wenn das maximum überschritten wird
      pxMap[k] = l;
    }
    

    andere Möglichkeit:

    for(int k=0; k<y; ++k)
      for(int j=0; j<x; ++j) {
        pxMap[k*x + j] = j;
      }
    

    Versuch mal, die beiden Schleifen für x=3, y=3 per Hand auf dem Papier zu machen, dann siehst du wie sie funktionieren (das ist sowieso meist die beste Methode wenn man etwas kompliziertere Zählschleifen erstellen will).



  • GT schrieb:

    Hi,

    ich würde gerne eine Schleife schreiben die mir in ein Array immer wieder eine Bestimmte abfolge von zahlen schreibt.

    Ungefähr so:

    arrayindex 1: 0
    arrayindex 2: 1
    arrayindex 3: 2
    arrayindex 4: 0
    arrayindex 5: 1
    arrayindex 6: 2

    usw.

    Wieso so kompliziert? Machs doch mit Modulo:

    int dim = 15;
    int array[dim];
    for (int i = 0; i < dim; i++)
    {
       array[i] = i%3;
    }
    


  • Ich habe da auch eine speicherschonende Lösung:

    #include <iostream>
    
    class myarray
    {
      public:
        int operator[] (int v) const  { return (v - 1) % 3; }
    };
    
    void main()
    {
      myarray a;
      for (int idx = 1; idx <= 15; ++idx)
        std::cout << "arrayindex " << idx << ": " << a[idx] << '\n';
    }
    

    😉



  • lol



  • Warum fängt bei dir arrayindex bei 1 an?



  • er wollte einfach bei der ausgabe bei 1 anfangen und halt a[idx] unabsichtlich statt a[idx-1]

    die lösung von tn ist sowieso blos als witz gedacht so wie ich das sehe 🙂



  • Viel schlimmer (manche lernens wohl nie):

    tntnet schrieb:

    void main()
    

    main() gibt einen Integer zurück! 😡



  • Vielen dank für die Hilfe.

    Habs dann selber gelöst.


Anmelden zum Antworten