Hoch UND wieder runterzählen in Bascom? Schleife

Gast #1567187
Lesenswert?

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
Gast #1567635
Lesenswert?

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
Gast #1567735
Lesenswert?

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
Gast #1567856
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren