-         

Ergebnis 1 bis 5 von 5

Thema: Zweistellige Zahl in Zehner und Einser zerlegen.

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263

    Zweistellige Zahl in Zehner und Einser zerlegen.

    Anzeige

    Hallo!
    Ich wollte eine zweistellige Zahl über zwei siebensegment Anzeigen ausgeben.
    Dazu könnte ich jedes Segment an einen Port hängen und dann in einer Liste für jeden Port die Zahlen 0-9 einspeichern. Allerdings müsste ich in Bascom dann die Zahl zerlegen, damit er weiß das er z.B bei 45 über den ersten Port die vier und über den zweiten Port die fünf darstellen soll. Hatjemand eine idee wie sowas geht?

    Gruss

    Alex

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377

    Re: Zweistellige Zahl in Zehner und Einser zerlegen.

    Zitat Zitat von Brantiko
    Allerdings müsste ich in Bascom dann die Zahl zerlegen, damit er weiß das er z.B bei 45 über den ersten Port die vier und über den zweiten Port die fünf darstellen soll.
    Hallo Alex!

    Wenn du die Zahl in einen Text umwandelst, dann kannst du mit dem Befehl MID die einzelnen Zeichen rausholen.

    Nachtrag:

    Das ist nicht besonders effizient, aber darüber können sich wieder die Anderen streiten. ;-) Mir ist erst mal wichtig, dass es funktioniert.
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    $baud = 4800
    
    Dim Zahl As Byte
    Dim S As String * 2
    Dim Bt As Byte
    Dim Ein_zeichen As String * 1
    Dim Eine_zahl As Byte
    
    Zahl = 45
    S = Str(zahl)
    
    For Bt = 1 To Len(s)
       Ein_zeichen = Mid(s , Bt , 1)
       Eine_zahl = Val(ein_zeichen)
       Print Eine_zahl
       Print Bin(eine_zahl)
       Print
    Next Bt
    
    End
    mfg
    Gerold
    :-)

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.07.2008
    Alter
    54
    Beiträge
    224
    Hi,

    es gibt in Bascom doch auch die mathematischen Befehl ROUND und MOD. Ich habe sie zwar dort noch nie verwendet, aber:

    x = round(zahl / 10) => Zehner-Stelle
    zahl - round(zahl / 10)*10 => Einerstelle

    oder

    x = zahl mod 10 => Einerstelle
    (zahl - x) / 10 => Zehnerstelle

    Oder?
    Geht das nicht auch einfacher???

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601
    Hi,

    wir haben mal in der Schule ein ähnliches Programm geschrieben, zur Berechnung der Ziffernsumme, da wurden auch vorher die einzelnen Ziffern rausgefiltert. Das war allerdings in C++, ich weiß also nicht, inwieweit sich das auch nach Bascom umlegen lässt.

    Code:
    int Zehner = 0     //Variable Zehner als Integer definieren
    int Einser = 0     //Variable Einser als Integer definieren
    int Zahl = XX     //Die Zahl, die zerlegt werden soll
    
    
    Zehner = Zahl / 10     //Die Zahl wird durch 10 dividiert, die Nachkommastellen werden bei einer Integerdivision in C weggelassen, in "Zehner" steht also die Zehnerstelle der Zahl. Ob das in Bascom auch so ist, weiß ich nicht.
    
    Einser = Zahl - (Zehner * 10)     //ist glaube ich selbsterklärend...
    
    
    //So hat man in den Variablen Einser sowie Zehner die jeweiligen Stellen der Zahl. Das ist die für mich einfachste und vor allem logischste Lösung.

    Viele Grüße

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Hallo,
    Habs jetzt mal so gemacht wie Ikarus es vorgesehen hat und es funktioniert prächtig. Meine Segmentanzeige zählt problemlos bis 99 hoch..

    Gruss

    Alexander

Berechtigungen

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