- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 9 von 9

Thema: Zahl in Ziffern zerlegen

  1. #1
    Murus
    Gast

    Zahl in Ziffern zerlegen

    Anzeige

    Praxistest und DIY Projekte
    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?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    05.08.2005
    Alter
    36
    Beiträge
    37
    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

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    In welcher Programmiersprache möchtest du dies Realisieren?

    Für Bascom wäre folgende Lösung denkbar:
    Verwende die Befehle ABS() und MOD

    Code:
    $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
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  4. #4
    Murus
    Gast
    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?

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    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.
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  6. #6
    Murus
    Gast
    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

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    Zitat Zitat von Murus
    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

    Da reißt ma sich den Arsch (das Hinterteil) auf und dann sowas....
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  8. #8
    Murus
    Gast
    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.

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    Zitat Zitat von Murus
    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....}
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress