HILFE! schleife funktioniert nich



  • also... danke erstmal für das programm.
    also % is doch modulo... also durch x teilen und rest "ausgeben"
    sprich 13%10=3. oder?
    nunja, das will ich so lange machen, bis ich da ne 0 stehen hab... sprich 20%10=0... also muss ich das doch so lange machen wie x%10 nicht 0 ist.
    es heißt doch:
    solange(x mod(10) nicht 0)
    {
    mache
    }
    ich hab gedacht so müsste das funktionieren... tut es aber nicht.
    wenn ich
    summe%10==0 mache, fängt er ja gar nicht an zu zählen, da z.B. 13%10=3 ist, oder hab ich da was bei while falsch verstanden??? 😕 außerdem, selbst wenn ich das eingebe, was ich schon versucht hab, komm ich auch am ende auf z=0.
    😡



  • DANKE an Stentor, ich hab da einen Denkfehler gehabt.

    An mentesis:
    Sorry ich hab mich mit

    while(summe%10==0)
    

    geirrt. Natürlich muss getestet werden, ob es kein Vielfaches ist, damit man es aufzählen kann, bis es ein Vielfaches ist. Also machst du das so:

    while(summe%10!=0)
    

    Das

    while(summe%10==!0)
    

    kann durchaus dazu führen, das die While-Schleife nicht funktioniert, weil das soweit ich weiß kein gültiger Operator ist. Ansonsten sehe ich keine Fehler in deinem Quellcode.

    MFG
    Cebinem



  • hier mal ein einfacherer weg um an der schleife vorbeizukommen:
    Summe+=10-summe%10;



  • Cebinem schrieb:

    Das

    while(summe%10==!0)
    

    kann durchaus dazu führen, das die While-Schleife nicht funktioniert, weil das soweit ich weiß kein gültiger Operator ist.

    Das ist absolut gültig. Nur sind das 2 Operatoren und nicht einer, Vergleich auf Gleichheit (==) und logisch nicht (!).



  • aber dann ist a==!b ja äquivalent zu a!=b, oder irre ich wieder?



  • Wenn beides bools wären, wäre es dasselbe. Aber mit ints ist es einfach nur ein schönes Beispiel dafür, warum implizite Konvertierungen übel riechen.



  • also, das funzt immer noch nich richtig, ich kann mir nich helfen!
    hier mal der code für diese routine:

    #ifndef PRUEFZ_HPP
    #define PRUEFZ_HPP
    
    //Prüfziffer des Barcode 2/5 Industrial ermitteln.
    //int n ...Anzahl der Ziffern im Array
    //int norm[] ...Array mit Zahlen, deren Prüfziffer ermittelt werden soll
    //--> Ziffern von 0 nach n-1 abwechselnd mit 3 beginnend mit 3 und 1 multiplizieren. Produkte Addieren. Prüfziffer ist die Zahl, die addiert werden muss, um auf das nächste Vielfache von 10 zukommen.
    int pz (int n,int norm[])
    {
      int summe=0;
      int z=0;
      for(int i=0;i<=n;i+=2)
        summe+=norm[i]*3;
      for(int i=1;i<n;i+=2)
        summe+=norm[i]*1;
    
      z=10-(summe%10);
    
      return z;
    }
    
    #endif
    

    so, das funktioniert auch bei einbinden und compilieren, bloß bekomm ich immer z=0. wenns hilft: wenn ich bei der zweiten schleife das mache:

    for(int i=1;i<=n;i+=2)
          summe+=norm[i]*1;
    

    dann kommt z=1 zurück.
    ich versteh das nich...
    bitte helfen!



  • Mis2com schrieb:

    aber dann ist a==!b ja äquivalent zu a!=b, oder irre ich wieder?

    Yep, da irrst du dich. Ein Äquivalent zu a==!b fällt mir im Moment nicht ein. Zu a!=b ist !(a==b) äquivalent.

    Nachtrag:
    @mentesis
    Sollte es vielleicht daran liegen:

    for(int i=0;i<=n;i+=2) 
        summe+=norm[i]*3;
    

    was eher so aussehen sollte:

    for(int i=0;i<n;i+=2) 
        summe+=norm[i]*3;
    

    nochwas:
    Es kann gar nicht sein, dass z=0 ist.

    z=10-(summe%10);
    

    summe%10 wird irgendwas zwischen 0 bis 9. Subtrahiert man das von 10 bekommt man irgendwas zwischen 1 bis 10. Wobei 10 ja für den Algo Quatsch ist. Deshalb muss der Code irgendwie so aussehen:

    z=(10-(summe%10))%10;
    


  • ok, an das problem mit der 10 hatte ich noch gar nicht gedacht...
    das ist ja das problem! egal wie ichs mach, es kommt immer 0 oder 1 raus, jenachdem ob ich da halt <= oder nur < hinschreib. das kotzt mich so an! soll ich mal den kompletten quellcode reinstellen? würde das jemanden helfen?!
    😡



  • Hallo,

    ich verfolg den Thread schon eine Weile, und irgendwie steig ich überhaupt nicht mehr durch. Liegt möglicherweise auch an mir. Aber was genau ist denn deine Aufgabe? Ein Vielfaches von 10 berechnen, oder den Modulo Operator verstehen?



  • moin!
    also...ich weis jetzt nich, ob ich das hier schonmal geschrieben hatte. ich hab bei dem projekt nämlich mehrere probleme.
    es gibt doch diesen strichcode auf allen möglichen verpackungen und so was. der nennt sich barcode 2/5 industrial. ich hab da nen schlüssel bekommen und soll jetzt nen programm dafür schreiben. das soll dann aus einer dezimal zahl nen barcode und umgekehrt machen. so ein barcode besteht aus einem startzeichen, dem eigentlichem code aus 0en und 1en, einer prüfziffer und einem stoppzeichen.
    und um diese prüfziffer gehts eigentlich in diesem thread. und zwar multiplizier ich abwechselnd die einzelnen dezimalzahlen der reihe nach mit 1 und 3. dann addier ich das und die zahl, die addiert werden muss, um das nächste vielfache von 10 zuerhalten ist die prüfziffer.
    und bei meiner routine hab ich irgendwie arge probleme, und hab keinen schimmer, was ich machen könnte.
    so siehts aus. 😮



  • So hab jetzt mal folgende Funktion getestet:

    int pz(int n, int norm[])
    {
    	int summe = 0;
    	for (int i = 0; i < n; i += 2)
    		summe += norm[i] * 3;
    	for (int i = 1; i < n; i += 2)
    		summe += norm[i];
    	return (10 - (summe % 10)) % 10;
    }
    

    Und funktioniert. Wo genau liegt dein Problem? Bist du dir auch sicher, dass zuerst mit 3 und dann mit 1 multipliziert wird? Oder könnte das auch andersrum sein?



  • so,also ich hab jetzt noch mal alle headerdateien neugeschrieben und um sortiert... im prinzip hab ich nur noch mal alles abgeschrieben und siehe da... es funzt. komisch oder?
    danke trotzdem nochmal


Anmelden zum Antworten