Archiv verlassen und diese Seite im Standarddesign anzeigen : Zahl in Ziffern zerlegen
Hallo zusammen,
ich muss bei nem Programm eine Zahl in ihre zwei Ziffern zerlegen und diese als Variablen speichern. Wie mache ich das, ohne die Zahl in einen String zu zerlegen und dann mit "mid" zu arbeiten?
Hi,
die Einerstelle kriegst du einfach mit Modulo 10, die Zehnerstelle mit Modulo 100 und dann teilen durch 10 (mit Abrundung, was das Standardverhalten bei fast allen Sprachen ist).
Den Modulo 100 kannst du dir auch sparen, wenn du weißt, dass die Zahl zweistellig ist.
ChrisM
darwin.nuernberg
06.11.2005, 11:50
In welcher Programmiersprache möchtest du dies Realisieren?
Für Bascom wäre folgende Lösung denkbar:
Verwende die Befehle ABS() und MOD
$regfile = "m8def.dat"
$crystal = 16000000
Baud = 9600
' Dieses Beispiel zerlegt eine Zahl (bis 99) in die Zehner und Einer.
Dim Ix1 As Integer ' Quelle Source Variable
Dim Ix2 As Integer ' Erstes Ergebniss
Dim Ix3 As Integer ' zweites Ergebniss
Dim Fx As Single ' Fliepßkomma Variable (Temporär)
Ix1 = 25
Fx = Ix1 / 10
Ix2 = Abs(fx)
Ix3 = Ix1 Mod 10
Print " Eingabe = ";
Print Ix1
Print " 1. Wert (10er) = ";
Print Ix2
Print " 2. Wert (1er) = ";
Print Ix3
End 'end program
Als Ausgabe erscheint:
Eingabe = 25
1. Wert (10er) = 2
2. Wert (1er) = 5
Zum Modulo: Wie meinst du das?
Hmm, 17 mod5 ist doch 2, oder?
Aber wie hilft mir das`?
Und was macht Abs?
Ah, logisch! Habs rausgefunden
Abs nimmt nur die Stelle vor dem Komma, und mit dem Mod 10 krieg ich den Einer! Alles klar! Danke!
Anstelle dem "Integer" kann ich auch ein Byte nehmen, oder?
Was ist vom Code her besser? Die Zahl in einen String zu verwandeln und dann mit "mid" oder die obige Variante?
darwin.nuernberg
06.11.2005, 12:06
Wieso mod 5?
Du möchtest doch die einzelnen Stellen 10er und 1er erhalten oder nicht.
Also musst du durch 10 teilen
Wenn Du etwas anderes beabsichtigst dann stelle Deine Frage genauer!
Die Zehner
erhälst Du wenn du die Absolute Zahl ermittelst 17/10 = 1,7 davon die Absolute = 1
Die Einer
17 mod 10 = 7
Natürlich kannst Du noch erweitern wenn Du mehr Stellen willts dazu musst du dann der Quelle das Ergebniss abziehen
Oder wolltest Du in Oktal oder Hexadezimal arbeiten, dann kommst Du um eine String Konvertierung nicht herum.
Nene, du verstehst mich falsch. Die 17mod5 waren nur ein Beispiel für die Modulo-Rechnung, habs fast vergessen.
Der Weg ist mir klar!
Vielen Dank
darwin.nuernberg
06.11.2005, 12:13
Anstelle dem "Integer" kann ich auch ein Byte nehmen, oder?
Was ist vom Code her besser? Die Zahl in einen String zu verwandeln und dann mit "mid" oder die obige Variante?
Klar, wenn deine Zehhner nicht größer als 255 werden kannst Du auch Byte verwenden,
Die Einer werden in diesem Beispiel auch nicht größer als 9
Aber wenn Du was anderes Machst (z.B Zahlen mit größerem Startwert) dann solltest Du den Worst Case erst einmal berechnen ob der dann keinen Fehler verusracht,
Strings:
Du hattest doch eine Lösung ohne Strings gewünscht, also nimmst Du diese Losung auch gefälligst, sonst werd ich Sauer :-k
Da reißt ma sich den Arsch (das Hinterteil) auf und dann sowas....
Wowow, easy...
Klar nehm ich diese Lösung, bei dem String hab ich das Problem, wenn die Zahl kleiner als 10 wird, dann gehts nicht mehr sauber auf und ich muss extra "nachhelfen". Hab ich hier net... Mich hats einfach wunder genommen, was jetzt grösser ist.
darwin.nuernberg
06.11.2005, 13:48
wenn die Zahl kleiner als 10 wird, dann gehts nicht mehr sauber auf und ich muss extra "nachhelfen".
Naja, ist doch klar:
Bei der Stringbehandlung muss man halt vorher abfragen wie lange die Zeichenkette ist { if len(string) >1 then.... else....}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.