Hallo an alle, kurze Frage. Wie kann ich es programmieren, und zwar in Bascom, dass zum Beispiel eine Zahl von 1 bis 5 hochzählt und dann wieder runterzählt bis 1? und dass natürlich immer wieder, also: 123454321234543212345...... Könntet ihr mir da vielleicht kurz helfen? Vielen Dank Lg Peter
unendliche schleife, statusvariable und 2 ifabfragen unedliche schleife, darin eine hochzähl- und eine runterzählschleife ...
Ohne Bascom zu kennen: Man nehme 3 Schleifen, eine äußere Endlosschleife und zwei innere. while(true) { int i = 0; for(; i < MAX; i++) {mach was mit i} for(; i > 0; i--) {mach was mit i} }
slowslow schrieb:
> zählrichtung umkehren bei 5 und bei 1 ?
Sieht dann so aus:
1 | Dim Zahl As Byte |
2 | Dim Inkrement As Byte |
3 | |
4 | Zahl = 0 |
5 | Inkrement = 1 |
6 | |
7 | |
8 | Do |
9 | Zahl = Zahl + Inkrement |
10 | If Zahl = 1 And Inkrement = 255 Then |
11 | Inkrement = 1 |
12 | Elseif Zahl = 5 And Inkrement = 1 Then |
13 | Inkrement = 255 |
14 | End If |
15 | Print Zahl |
16 | Loop |
Vielen Dank an euch, ich werde das später gleich mal ausprobieren! Danke Lg Peter
Noch eine Möglichket für 123454321234543212345...... Dim Plus_minus As Integer Dim Zahl As Integer Plus_minus = 1 Zahl = 1 Do Print Zahl If Zahl = 5 Then Plus_minus = -1 If Zahl = 1 Then Plus_minus = 1 Zahl = Zahl + Plus_minus Loop Gruß allu
Der Lösungsvorschlag von A.Drei im vorigen Post ist von der Logik her gesehen recht effektiv. Ich möchte aber trotzdem noch auf eine Optimierung hinweisen: A.Drei (allu) schrieb: > If Zahl = 5 Then Plus_minus = -1 Weil die Variable "Plus_minus" einen negativen Wert annimmt, hat A.Drei sie folgerichtig als Integer definiert. Das hat aber zur Folge, das der AVR hier Integer-Arithmetik betreiben muss. In meinem Post vorher habe ich die Variable "Inkrement" lediglich als Bytevariable definiert. Somit muss auch nur Bytearithmetik betrieben werden. Der Wert 255 ist das Zweierkomplement von -1. Und obwohl Bascom keine vorzeichenbehaftete Bytevariable kennt, so gelten doch (zumindest für Strichrechnung) deren Rechengesetze. Der weiter optimierte Code von A.Drei würde dann so aussehen:
1 | Dim Plus_minus As Byte |
2 | Dim Zahl As Byte |
3 | |
4 | Plus_minus = 1 |
5 | Zahl = 1 |
6 | |
7 | Do |
8 | Print Zahl |
9 | |
10 | If Zahl = 5 Then Plus_minus = 255 |
11 | If Zahl = 1 Then Plus_minus = 1 |
12 | Zahl = Zahl + Plus_minus |
13 | Loop |
Ich hab das im Simulator durchgespielt. Macht 22/24 Zyklen für die Bytevariante und 41/47 Zyklen für die Integervariante. Naja, wer´s braucht.
@RazzleDazzle, schöne Optimierung, gefällt mir. Gruß allu
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.