- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 25

Thema: Ein Zahlenproblem

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #19
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo,
    da ich durch C nicht durchblicke, hier noch ein Versuch durch Tauschen der Stellen in der Richtung wie Manf vorgeschlagen hat ?

    Code:
    $regfile = "attiny45.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 36
    $crystal = 8000000
    
    Const Max_positionen = 4                'Anzahl Stellen
    Const Max_pos_decr = Max_positionen - 1 'Hilfskonstante
    
    Dim Zahl(max_positionen) As Byte        'enthält jeweilige Kombination
    Dim Roll_pos(max_positionen) As Byte    'Hilfsvariable für Rollpositionen
    Dim Zahl_str As String * Max_positionen 'variable für Ausgabe der Kombination
    
    Dim Ab_stelle As Byte                   'Übergabevariable in Sub "rollen"
    Dim I As Byte , Zw1 As Byte , Zw2 As Byte
    Dim Moeglichkeit_nr As Long             'zählt gefundene Möglichkeiten durch
    
    Defbyte S                               'Noch nicht decl. Variablen beg. mit S as byte
    
    Declare Sub Rollen(ab_stelle As Byte)
    Declare Sub Ausgabe
    
    '####################
    'Beginn Hauptprogramm
    
    Moeglichkeit_nr = 0
    
    For I = 1 To Max_positionen
      Zahl(i) = I - 1
      Roll_pos(i) = Max_positionen - I
    Next I
    
    'Zahlarray mit maximal 10 Stellen mit Ziffern 0..9
    'links ist Stelle 10 - ST10 , rechts ist Stelle 1 - ST1
    'läuft mit 4 Stellen
    'zum Erweitern Kommentare entfernen UND Konstante Max_positionen anpassen
    
    'For St10 = 1 To 10
    '  For St9 = 1 To 9
    '    For St8 = 1 To 8
    '      For St7 = 1 To 7
    '        For St6 = 1 To 6
    '          For St5 = 1 To 5
                For St4 = 1 To 4
                  For St3 = 1 To 3
                    For St2 = 1 To 2
                      For St1 = 1 To 1
                        Ausgabe
                      Next St1
                      Rollen Roll_pos(1)
                    Next St2
                    Rollen Roll_pos(2)
                  Next St3
                  Rollen Roll_pos(3)
                Next St4
    '            Rollen Roll_pos(4)
    '          Next St5
    '          Rollen Roll_pos(5)
    '        Next St6
    '        Rollen Roll_pos(6)
    '      Next St7
    '      Rollen Roll_pos(7)
    '    Next St8
    '    Rollen Roll_pos(8)
    '  Next St9
    '  Rollen Roll_pos(9)
    'Next St10
    
    End                                     'end program
    
    '##########
    'Beginn Unterprogrammdefinitionen
    
    Sub Rollen(ab_stelle As Byte)           'links rollen um 1 der rechten Stellen in "Zahl" ab "ab_stelle"
      Zw1 = Zahl(ab_stelle)
      For I = Ab_stelle To Max_pos_decr
        Zw2 = I + 1
        Zahl(i) = Zahl(zw2)
      Next
      Zahl(max_positionen) = Zw1
    End Sub
    
    Sub Ausgabe
    
      Incr Moeglichkeit_nr                  'Wieder eine Möglichkeit mehr zur Ausgabe
      'Hier eigene Ausgabeanweisungen rein
      'zb Print
       Zahl_str = ""
       For I = 1 To Max_positionen
         Zahl_str = Zahl_str + Str(zahl(i)) 'Kombination im Zahl array in String geben
       Next I
    End Sub
    Algorithmus ist mit Turbo Pascal ausprobiert, Bascom Prg aber nur bis 4 Stellen im Simulator getestet.


    EDIT: Etwas spät, aber ich möchte die Arbeitsweise vom Programm noch etwas erklären:

    Das Array "Zahl" enthält soviele Elemente, wie verschiedene Elemente vorhanden sind, von denen Permutationen gebildet werden sollen. In diesem Fall 10 für die Zahlen 0 bis 9.

    Das Array wird dann mit den Zahlen 0..9 gefüllt. Möglich sind auch Buchstaben oder sonstwas, wenn es dem Arraytyp entspricht bzw der Arraytyp angepaßt wird.

    Danach läuft das Programm in die For-To Schleifen und landet bei "Ausgabe" -> es wird die Initialisierung von "Zahl" als erste Möglichkeit ausgegeben.

    Nach der Ausgabe wird der Inhalt nur der beiden letzten Arrayelemente nach links gerollt (was für die beiden ein Austausch bedeutet.)

    Das wird dann als nächste Möglichkeit wieder zur Ausgabe gebracht und die letzten beiden Arrayelementinhalte wieder getauscht, was zum Initialisierungszustand zurückführt.

    Nun ist ST2 aber erfüllt und ein Rollen von 3 Elementen ab dem drittletzten Element findet statt und danach ausgegeben.
    Die letzten beiden Elemente werden wieder gerollt und ausgegeben, weiter wie oben.

    Das findet für ST3 drei Mal statt - Initialisierungszustand wieder erreicht, der nicht ausgegeben wird - ab viertletztem Element gerollt - Ausgabe
    ...und so weiter.


    Gruß
    Searcher
    Geändert von Searcher (01.08.2011 um 09:05 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test