Hallo, hat mal jemand eine Idee für mich, wie ich folgendes in C am sinnvollsten realisieren kann? Möchte ein Variable in einer Schleife nicht jedes mal, sondern nur alle x-Schritte um eins erhöhen. Wie stellt man soetwas am sinnvollsten an?
Je nachdem, wie unkompliziert die Lösung sein darf, würde ich eine zweite, innere Schleife einführen, die x-mal läuft.
Eine andere Möglichkeit wäre sowas wie
1 | variable += (schleifenzaehler % x)==(x-1) ? 1 : 0; |
schritt = 0; while (1) { if (++schritt == x) { schritt = 0; variable++; } ... ... }
Ginge folgender Ansatz (bin kein C Experte und hab keinen C Compiler aufm Rechner): Wenn i die Variable ist, die hochgezählt wird, steht in der Schleife normalerweise i++ (equivalent zu i+i). Ersetze das mit einer Hilfsvariablen a: i+a Innerhalb der Schleife wird eine if Abfrage gesetzt. Wenn die wahr ist, wird a auf 1 gesetzt. Dann stünde in der Schleife i+1. Wenn die Bedingung nicht wahr ist, wird a auf 0 gesetzt. Passt das?
Man braucht eigentlich nicht mal eine zweite Schleife. Dies kann man problemlos in der eigentlichen zählschleife abhandeln Eine weitere variable definieren und diese wird auch mit jeden Durchlauf erhöht. Nur das man dort dann eben prüft ob der stand beispielsweise schon 3 ist, falls ja variable 1 erhöhen und variable zwei auf 0 zurücksetzen fertig
Mit der Modulo-Operation (%, Division mit Rest) geht das: https://de.wikipedia.org/wiki/Division_mit_Rest Für jeden zweiten Schritt prüfst du ob dein Schleifenzähler i%2=0 ergibt.... denn wenn i durch zwei teilbar ist (und das ist i bei jedem zweiten Schritt), ergibt diese Operation eben 0.
Alex schrieb: > Passt das? Kaum. Auch wenn die Lösung von Segler kürzer aussieht, die Lösung von Jacko ist die kürzeste und schnellste.
>> variable += (schleifenzaehler % x)==(x-1) ? 1 : 0;
Das ginge hübscher mit
variable += (schleifenzaehler % x) ? 0 : 1;
ABER:
Wenn so eine Zählvariable eine begrenzte Ganzzahl ist, hat man
auch noch (da sie nie auf Null zurückgesetzt wird) das Problem
des Überlaufs!
Einfacher Fall:
x = 7,
Schleifenzähler ist eine uint8 (0...255)
Bis 252 (= 36 * 7) klappt es.
259 (= 37 * 7) wird aber zu 3, also ist die nächste
Erhöhung erst nach 10 Schritten.
Mit Long Int kommt der Fehler auch, nur seltener. ;-)
Also nimm meine obengenannte Lösung!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.