Hoch UND wieder runterzählen in Bascom? Schleife

Gast #1567187
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 #1567201
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}
}
Gast #1567635
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.