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.