Überprüfung ob eine Zahl Gerade/Ungerade ist.

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Takafusa.

    Überprüfung ob eine Zahl Gerade/Ungerade ist.

    Hallo! :)

    Ich habe momentan ein Problem mit einem Programm an welchem ich gerade Arbeite.
    Folgendes Problem:

    Ich gebe eine n-stellige Zahl in eine Textbox ein und ich möchte jede einzelne Zahl überprüfen, ob sie gerade oder ungerade ist.

    Fertige Codes werden mir nicht wirklich helfen, jedoch sind Beispiele und Erklärungen immer Willkommen :)

    Danke im voraus


    TehBasic

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TehBasic“ ()

    Gerade Zahlen lassen sich ohne Rest durch 2 teilen. Überleg' ma jetzt, ob du Modulo nicht doch verwenden kannst.
    (Was vb-checker aber auch in der 2. Zeile seines Posts geschrieben hat...)
    Außerdem brauchst du Posts über dir nicht zu zitieren, vor allem nicht komplett.
    | Keine Fragen per PN oder Skype.
    Naja, ich leide momentan an einem totalen Blackout.
    Würde bisschen Hilfe brauchen, bin nämlich hier stecken geblieben:

    (Simple denkfehler wegen nicht so guten programmierkentnissen vorbehalten!)

    VB.NET-Quellcode

    1. EAN = Split(tbxEAN.Text)
    2. For Me.i = 0 To CInt(tbxEAN.Text) - 1
    3. If CBool(EAN(i)) And 1 = 0 Then
    4. Gerade += CInt(EAN(Me.i))
    5. ElseIf CBool(EAN(i)) And 1 = 1 Then
    6. Ungerade += (CInt(EAN(Me.i)) * 3)
    7. End If
    8. Next
    9. Ergebnis = Ungerade + Gerade
    10. tbxCheckDigit.Text = CStr(Ergebnis Mod 10)


    Ich will selber auf die Lösung kommen, also nur Theoretische tipps bitte! Keine Codes, danke!

    ErfinderDesRades schrieb:

    achja - und was dabei herauskommen soll.

    Vermutung: Prüfziffer eines EAN-Codes.

    Check Digit Calculation
    EAN check digit is calculated using standard Mod10 method. Here outlines the steps to calculate EAN-13 check digit:
    From the right to left, start with odd position, assign the odd/even position to each digit.
    Sum all digits in odd position and multiply the result by 3.
    Sum all digits in even position.
    Sum the results of step 3 and step 4.
    divide the result of step 4 by 10. The check digit is the number which adds the remainder to 10.

    VB.NET-Quellcode

    1. EAN = Split(tbxEAN.Text) 'Sollte die Zahlen in der Textbox aufteilen (höchstwarscheinlich unnötig, war einfach ein verzweifelter versuch)
    2. For Me.i = 0 To CInt(tbxEAN.Text) - 1 'Lässt die Schleife so oft durchlaufen, wie die Anzahl der vorhandenen Zeichen in der Textbox
    3. If CBool(EAN(i)) And 1 = 0 Then 'Falls die Zahl im Array "EAN" and 1 gleich 0 ist wird die Variable Gerade um die Zahl, an der Position i im Array, erhöht.
    4. Gerade += CInt(EAN(Me.i)) 'Ich habe das so verstanden: Falls bei Zahl and 1 = 0 ist, ist es eine gerade Zahl.
    5. ElseIf CBool(EAN(i)) And 1 = 1 Then 'Falls die Zahl im Array "EAN" and 1 gleich 1 ist wird die Variable
    6. Ungerade += (CInt(EAN(Me.i)) * 3) 'Ungerade um das dreifache der Zahl, an der Position i im Array, erhöht.
    7. End If
    8. Next


    Wie gesagt, habe das Algorythimisieren noch nicht so richtig begriffen und bin noch nicht so richtig im programmieren, frage ja auch deswegen nach tipps.
    Flames bitte sein lassen. Das Einzige was mir noch fehlt is demotivation. Meiner Meinung nach ist der Ansatz schon recht gut. ^^

    Genau, mein Ziel ist es die Prüfziffer eines EAN/GTIN Barcodes zu berechnen.
    ich will nix flamen, ich denkenur, wenn man sein eigenen Code erklärt, dann versteht man ihn auch, bzw. es fallen die Fehler darin auf.

    Mir scheint aber, der Prüfziffer-Algo geht auch ganz anders, als was du vorhast: de.wikipedia.org/wiki/European…le_Number#Pr.C3.BCfziffer

    Also Wiki würde in 2er Schritten 2 mal die ziffern durchgehen und aufsummieren, einmal bei 0 anfangend, und einmal bei 1 anfangend.
    und im 2. Durchgang je die ziffer verdreifacht aufsummieren.
    Und am Schluß Modulo 10

    Die Ziffern bekommste als einzelne Chars mittels String.ToCharArray.
    einen Char kannste mit Integer.Parse in einen Integer umwandeln

    Guck dir die "klassen" String, Char, Integer im ObjectBrowser an, um zu sehen, wie die angegebenen Methoden ticken.
    Danke für die Hilfe!

    Hier präsentiere ich euch mal meinen fertigen Code:

    VB.NET-Quellcode

    1. Dim CharArray() As Char = tbxEAN.Text.ToCharArray
    2. Dim i As Integer
    3. Dim Gerade, Ungerade As Integer
    4. For i = 0 To CharArray.Length - 1
    5. If (Integer.Parse(CharArray(i)) Mod 2 = 0) Then
    6. Gerade += Integer.Parse((CharArray(i)))
    7. Else
    8. Ungerade += Integer.Parse(CharArray(i)) * 3
    9. End If
    10. Next
    11. tbxCHECKDIGIT.Text = CStr((Ungerade + Gerade) Mod 10)
    Eigentlich nicht, habe es sogar mit echten Produkten versucht.

    Eistee Tetrapak EAN8 Code: 9016982 + mein Code = CheckDigit(3) > Also richtig.


    Hätte da aber noch eine Frage.
    Wie rundet man auf die nächstgrößte Zehnerstelle?
    Es soll immer aufgerundet werden, egal welche Zahl es ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TehBasic“ ()

    Hallo!

    Wäre es nicht einfacher zu überprüfen ob die Zahl, wenn sie durch 2 geteilt ist, ein Komma hat?

    Also:

    Dim zahl As Integer = 13
    If CStr(zahl/2).Contains(",") Then
    Msgbox("Ungerade")
    Else: MsgBox("Gerade")
    End If

    Ich weiß, dass das nicht schön ist aber es sollte klappen.
    Whos Faster ALPHA: Bald....

    TehBasic schrieb:

    Ansonsten funktioniert mein Code bei EAN8 toll

    probierma
    4029508-4

    ansonsten habich nur EAN13

    426020388110-3
    544900009624-1 (wiki - sample "PrüfZiffer")
    978316148410-0 (wiki - sample "Pressecode")
    978386063137-9


    wie man auf die nächstgrößte zehner Stelle rundet

    VB.NET-Quellcode

    1. sum = sum Mod 10
    2. Return If(sum > 0, 10 - sum, sum)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    TehBasic schrieb:

    Ansonsten funktioniert mein Code bei EAN8 toll

    probierma
    4029508-4
    ]



    Strange, ich bekomme als Ergebnis 6.
    Jedoch kommt bei dem Code (Echter code eines Eistee Tetrapacks) : 9016982 - 3 tatsächlich 3 raus.

    Außerdem, weißt du vlt. wie man Zahlen auf die nächstgrößte Zehnerstelle aufrundet?