Javascript to C++



  • Ich habe hier auf meiner seite ein Programm zum ermitteln einer Prüfsumme leider bekomme ich statt 8 minus 1 raus auf meiner Webseite geht es

    numero ist das Value feld mit dem Wert : 425076610001
    rest ist die erechnete Prüfsumme mit dem Wert : 8
    ergebnis ist der zusammengesetzte wert : 4250766100018

    Hier der Javascript

    faktor = 3;
      summe = 0;  
      for (i = form.numero.value.length; i > 0; --i) {
        summe = summe + form.numero.value.substring (i-1, i) * faktor;
        faktor = 4 - faktor;  }   
      rest = ((1000 - summe) % 10);
      form.ergebnis.value = form.numero.value + rest;
      result = form.ergebnis.value;
      form.rest.value = rest;
    

    in C++ habe ich es umgewandelt komme aber nicht weiter C Code
    Dies erhalte ich mit den umgesetzten Code :

    Numero ist das Value feld mit dem Wert : 425076610001
    Rest ist die erechnete Prüfsumme mit dem Wert : -1
    Ergebnis ist der zusammengesetzte wert : 425076610001**-1**

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      int faktor = 3;
      int summe = 0;
    
      for (int i = Numero->Text.Length(); i > 0; --i)
    	{
    		summe = summe + Numero->Text.SubString(i-1, i) * faktor;
    		faktor = 4 - faktor;
    	}
      int rest = ((1000 - summe) % 10);
      Ergebnis->Text = Numero->Text + rest;
      Rest->Text = rest;
    
    }
    

    Wäre über eine Hilfe dankbar



  • Hallo

    Es wäre hilfreich, wenn du den Algorithmus für die Prüfsumme ansich erklärst/verlinkst anstelle die Javascript-Implementation zu zeigen...

    Zumindestens das der Rest in deiner C++ Implementation negativ ist, überrascht nicht : In summe wird eine Zahl aufgebaut, die größer ist als 1000. Deshalb ergibt die Formel mit dem modulo auf jedenfall eine negative Zahl. Wendet javascript hier automatisch eine abs-Funktion an?
    Außerdem weiß ich nicht wie on javascript die String-Zeichen nummeriert werden? Im Builder werden die zeichen des Datentypes Strings ab 1 gezählt, nicht ab 0 wie sonst üblich.

    bis bald
    akari



  • So baut sich es auf

    a) ' 4 2 5 0 7 6 6 1 0 0 0 1
    b) x 1 3 1 3 1 3 1 3 1 3 1 3
    c) = 4 6 5 0 7 18 6 3 0 0 0 3
    d) Produktsumme 52
    e) aufrunden auf 60
    f) 52 + 8 = 60, 8 = Prüfziffer

    Zu a) Schreibe nebeneinander die Ziffern der betreffenden Generierten Nummer (ausgenommen der letzten, der noch zu ermittelnden Prüfziffer).
    Zu b) Setze darunter von rechts nach links (wichtig) abwechselnd die Multiplikatoren 3 und 1.
    Zu c) Multipliziere a) mit b) und erhalte die einzelnen Produkte in c).
    Zu d) Addiere die Ergebnisse von c) und erhalten die Produktsumme in d).
    Zu e) Die Differenz (Aufrundung) dieser Summe auf den nächsten vollen "Zehner" ergibt die Prüfziffer. Ist die Differenz Null, ist auch die Prüfziffer Null.
    Zu f) Die Prüfziffer ist in meinem Beispiel die Ziffer 8.



  • void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      int faktor = 3;
      int summe = 1;
    
      for (int i = Numero->Text.Length(); i > [b]1[/b]; --i)  //habe aus 0 =1 gemacht
    	{
    
    		summe = summe + Numero->Text.SubString(i-1, i) * faktor;
    		faktor = 4 - faktor;
    	}
      int rest = ((1000 [b]+[/b] summe) % 10); //habe aus - ein + gemacht
      Ergebnis->Text = Numero->Text + rest;
      Rest->Text = rest;
    
    }
    

    So funktioniert es :
    faktor = (4 - faktor)+5;

    von der reihe 425076610001 bis 425076610009

    ab der Reihe 425076610010 bis 425076610019

    ist der Prüfwert immer +1 höher das heisst wenn
    425076610010 ist dann solllte der wert 0 ergeben ergibt aber 1
    425076610011 ist dann solllte der wert 7 ergeben ergibt aber 8 usw

    ab 20

    425076610020 ist dann solllte der wert 0 ergeben ergibt aber 2
    425076610021 ist dann solllte der wert 3 ergeben ergibt aber 5 usw

    😕

    Ich vermute mal das wird unter javascript anderst gelöst macht es dann halt ein Sinn abzufragen und wenn der 10 oder 100 oder 1000 Reihe immer den jeweiligen Zähler dazu zu rechnen oder kann man dies villeicht anderst lösen .



  • weiss keiner ein Rat 😞


Anmelden zum Antworten