PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zweistellige Zahl in Zehner und Einser zerlegen.



Brantiko
14.08.2008, 13:02
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

python_rocks
14.08.2008, 13:31
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.

$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
:-)

williwilli
14.08.2008, 15:40
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?

ikarus_177
14.08.2008, 17:16
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.


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

Brantiko
15.08.2008, 19:51
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