Forum: Mikrocontroller und Digitale Elektronik Hoch UND wieder runterzählen in Bascom? Schleife


von Peter (Gast)


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

von abraxas (Gast)


Lesenswert?

unendliche schleife, statusvariable und 2 ifabfragen
unedliche schleife, darin eine hochzähl- und eine runterzählschleife
...

von ozo (Gast)


Lesenswert?

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}
}

von slowslow (Gast)


Lesenswert?

zählrichtung umkehren bei 5 und bei 1 ?

von ich (Gast)


Lesenswert?

Hi,


Versuch' mal das:

for i = 5 to 1 step -1

von RazzleDazzle (Gast)


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

von Peter (Gast)


Lesenswert?

Vielen Dank an euch,

ich werde das später gleich mal ausprobieren!

Danke

Lg Peter

von A.Drei (allu) (Gast)


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

von RazzleDazzle (Gast)


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.

von A.Drei (allu) (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.