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: 2usw.
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: 2usw.
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.