Announcement

Collapse
No announcement yet.

Quersumme aus Code ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Quersumme aus Code ermitteln

    Hallo liebes Forum,

    also die gestrige Aufgabe habe ich noch gelöst bekommen. Nun stehe ich vor einem weiteren Problem.


    Die Aufgabe besagt, dass aus einem Code in der Form XXXX-XXXX-P, aus den ersten 8 Ziffern soll die Quersumme berechnet werden. Soweit komm ich schon gar nicht mehr. Mit Stringverarbeitung les ich die einzelnen Ziffern aus. Wenn ich dann in int oder double konvertiere und die Zahl ausgebe, kommt auch mit Nullen die Zahl 384 raus. Ich weiss nicht weiter. Warum diese 384? Ist das die Antwort auf alles?

  • #2
    Hier mal eine allgemeine Routine zur Ermittlung der Quersumme:

    [highlight=java] int berechneQuersumme(int zahl) {
    if (zahl < 10) {
    return zahl;
    }
    return berechneQuersumme(zahl / 10) + zahl % 10;
    }
    [/highlight]
    Da keiner weiß was du programmiert hast, wird auch keiner den Fehler finden können, warum bei dir das konvertieren String -> Int nicht funktioniert
    Zuletzt editiert von Christian Marquardt; 23.01.2015, 22:52.
    Christian

    Comment


    • #3
      private void button1_Click(object sender, EventArgs e)
      {
      string a;
      double b;
      a = Convert.ToString(textBox1.Text);
      char c1 = a[0];
      char c2 = a[1];
      char c3 = a[2];
      char c4 = a[3];
      char c5 = a[5];
      char c6 = a[6];
      char c7 = a[7];
      char c8 = a[8];
      char c9 = a[10];

      b = a[0]+ a[1] + a[2] + a[3] + a[5] + a[6] + a[7] + a[8]; //Berechnet die Quersumme des Codes



      ist mein Code bisher. Rechnen tut er aber nicht richtig. :/

      Comment


      • #4
        Wozu konvertierst du einen String in einen String?
        Bei einer Quersummenberechnung kann kein Fließkommawert rauskommen. Wozu ein double?
        Eine Konvertierung in einen Zahlwert sehe ich nicht.
        Der Rest char?? sollte dir beim debuggen auffallen (A=65)

        Der bessere ansatz wäre wohl die Zahl in einen Zahlwert umzuwandeln
        Christian

        Comment


        • #5
          [highlight=java]String test = "1234";
          int ergebnis = 0;
          for (int i = 0; i < test.length; i++) {
          ergebnis +=Convert.ToInt32(test[i])-48;
          } [/highlight]
          Zuletzt editiert von Christian Marquardt; 23.01.2015, 22:52.
          Christian

          Comment


          • #6
            Nun ja es soll ja aus der Form: XXXX-XXXX-P wo X die Ziffern bezeichnen, ausgelesen werden. Also jede einzelne Ziffer alleine. Dann soll aus den ersten 8 Ziffern eine Quersumme erstellt werden. Die letzte Ziffer der Quersumme soll der letzten Ziffer "P" entsprechen.

            Comment


            • #7
              Die Aufgabe im Original lautet 10950885_413602448806807_1836803614_n.jpg

              also zur Quersumme bin ich jetzt über einen unschönen Weg gekommen:

              private void button1_Click(object sender, EventArgs e)
              {
              string a;


              a = Convert.ToString(textBox1.Text); //Liest Textbox aus
              char c1 = a[0]; //String besteht aus Array und hier werden die benötigten chars ausgelesen(Ziffern)
              char c2 = a[1];
              char c3 = a[2];
              char c4 = a[3];
              char c5 = a[5];
              char c6 = a[6];
              char c7 = a[7];
              char c8 = a[8];
              char c9 = a[10];

              string[] zeichen; //String-Array der einzelnen characters oblg. weil sonst falsches Ergebnis
              zeichen = new string[9];
              zeichen[0]=Convert.ToString(c1);
              zeichen[1] = Convert.ToString(c2);
              zeichen[2] = Convert.ToString(c3);
              zeichen[3] = Convert.ToString(c4);
              zeichen[4] = Convert.ToString(c5);
              zeichen[5] = Convert.ToString(c6);
              zeichen[6] = Convert.ToString(c7);
              zeichen[7] = Convert.ToString(c8);
              zeichen[8] = Convert.ToString(c9);


              int[] neuWerte;
              neuWerte=new int[9];
              neuWerte[0]=Convert.ToInt32(zeichen[0]);
              neuWerte[1] = Convert.ToInt32(zeichen[1]);
              neuWerte[2] = Convert.ToInt32(zeichen[2]);
              neuWerte[3] = Convert.ToInt32(zeichen[3]);
              neuWerte[4] = Convert.ToInt32(zeichen[4]);
              neuWerte[5] = Convert.ToInt32(zeichen[5]);
              neuWerte[6] = Convert.ToInt32(zeichen[6]);
              neuWerte[7] = Convert.ToInt32(zeichen[7]);
              neuWerte[8] = Convert.ToInt32(zeichen[8]);

              int quersum = 0;

              string b;

              quersum = neuWerte[0]+neuWerte[1]+neuWerte[2]+neuWerte[3]+neuWerte[4]+neuWerte[5]+neuWerte[6]+neuWerte[7];
              b = Convert.ToString(quersum);

              neuWerte[8]=


              aber nun bin ich tatsächlich mit meinem Latein am Ende. Ich weiss bei besten Willen nicht, wie ich nun aus der Quersumme die letzte Ziffer teste.

              Comment


              • #8
                Habe den Code noch einma erweitert.

                private void button1_Click(object sender, EventArgs e)
                {
                string a;


                a = Convert.ToString(textBox1.Text); //Liest Textbox aus
                char c1 = a[0]; //String besteht aus Array und hier werden die benötigten chars ausgelesen(Ziffern)
                char c2 = a[1];
                char c3 = a[2];
                char c4 = a[3];
                char c5 = a[5];
                char c6 = a[6];
                char c7 = a[7];
                char c8 = a[8];
                char c9 = a[10];

                string[] zeichen; //String-Array der einzelnen characters oblg. weil sonst falsches Ergebnis
                zeichen = new string[9];
                zeichen[0]=Convert.ToString(c1);
                zeichen[1] = Convert.ToString(c2);
                zeichen[2] = Convert.ToString(c3);
                zeichen[3] = Convert.ToString(c4);
                zeichen[4] = Convert.ToString(c5);
                zeichen[5] = Convert.ToString(c6);
                zeichen[6] = Convert.ToString(c7);
                zeichen[7] = Convert.ToString(c8);
                zeichen[8] = Convert.ToString(c9);


                int[] neuWerte;
                neuWerte=new int[9];
                neuWerte[0]=Convert.ToInt32(zeichen[0]);
                neuWerte[1] = Convert.ToInt32(zeichen[1]);
                neuWerte[2] = Convert.ToInt32(zeichen[2]);
                neuWerte[3] = Convert.ToInt32(zeichen[3]);
                neuWerte[4] = Convert.ToInt32(zeichen[4]);
                neuWerte[5] = Convert.ToInt32(zeichen[5]);
                neuWerte[6] = Convert.ToInt32(zeichen[6]);
                neuWerte[7] = Convert.ToInt32(zeichen[7]);
                neuWerte[8] = Convert.ToInt32(zeichen[8]);

                int quersum = 0;

                string b;

                quersum = neuWerte[0]+neuWerte[1]+neuWerte[2]+neuWerte[3]+neuWerte[4]+neuWerte[5]+neuWerte[6]+neuWerte[7];
                b = Convert.ToString(quersum);


                if (b.Contains(a[10]))
                textBox2.Text = "Code gültig.";


                Jetzt geht es nur noch darum, die Länge des b Strings zu ermitteln, um zu sagen, dass die Prüfziffer (hier: a[10], an letzter Stelle das b Strings steht. Jemand nen Ansatz?

                Comment


                • #9
                  b brauchst du nicht (und sehr viele deiner Zwischenschritte eigentlich auch nicht wirklich)

                  [HIGHLIGHT=C#]if ((quersum % 10).ToString()[0] == a[10])
                  textBox2.Text = "Code gültig.";[/HIGHLIGHT]

                  Comment


                  • #10
                    Nun ja es soll ja aus der Form: XXXX-XXXX-P wo X die Ziffern bezeichnen, ausgelesen werden. Also jede einzelne Ziffer alleine.
                    Genau das macht der Code aus #5

                    Die nicht gewünschten Zeichen kann man per RegEX entfernen (oder einfach mit einem if) und gut. Da muss man nicht mit unzähligen Arrays hantieren
                    Zuletzt editiert von Christian Marquardt; 21.01.2015, 20:10.
                    Christian

                    Comment

                    Working...
                    X