Programm rechnet nicht richtig?



  • Meine Variablen die auch alle verwendet werden:

    byte a = 1;
    byte b = 63;
    byte c = 1;
    byte zahl = 0;
    int zu = 0;
    String Zahlen2 = "";
    void Zahlen (void);
    int clicked = 0;
    int clicked2 = 0;
    String zahl1 = "";
    void binzudez();
    int as1, as2, as3, as4, as5, as6;
    

    Die Funktion die die ersten Werte liefert:

    Form1->Label4->Caption = "";
       for(zahl = 0; zahl < 64; zahl++){
          zu++;
          if(zahl & a){
             Form1->Label4->Caption = Form1->Label4->Caption + " " + zahl;
          }
          if(zu % 10 == 0){
             Form1->Label4->Caption = Form1->Label4->Caption + "\n";
          }
       }
    

    dann kann man wählen - ja oder nein (praktisch zahl dabei oder nicht) - bei nein wird diese funktion wieder verwendet nur mit:

    a = a << 1;
    

    womit a von 1 auf 2 springt.

    bei Ja muss a praktisch von 1 auf 3 springen, was ich folgendermaßen gelöst habe:

    a = a << 1;
    a = a + 1;
    

    mehr text ists eigentlich nicht, hoffe dass das ein bisschen mehr aussagt als das eben.

    MfG
    MWJK



  • MWJK schrieb:

    bei der ausgabe der verundung müsste er ja dann aber eigentlich mit 3 anfangen, er fängt aber bei 1 an

    Welche Ausgabe?
    Die Variable zahl wird durch die "Verundung" in der if-Abfrage jedenfalls nicht verändert, sie behält ihren Wert,



  • Ok jetzt hast du zwar mehr von deinem Quelltext preis gegeben aber eigentlich nur unwichtige Sachen.
    Wenn überhaupt interessiert mich der Code der um die Operationen die du mit deiner Variablen a machst herum steht und nicht nur einzelne Fetzen daraus.

    Achja:
    Benütz den Debugger(F7)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



  • Jansen schrieb:

    MWJK schrieb:

    bei der ausgabe der verundung müsste er ja dann aber eigentlich mit 3 anfangen, er fängt aber bei 1 an

    Welche Ausgabe?
    Die Variable zahl wird durch die "Verundung" in der if-Abfrage jedenfalls nicht verändert, sie behält ihren Wert,

    die ausgabe im label:

    Form1->Label4->Caption = Form1->Label4->Caption + " " + zahl;
    

    MfG
    MWJK



  • rean schrieb:

    Ok jetzt hast du zwar mehr von deinem Quelltext preis gegeben aber eigentlich nur unwichtige Sachen.
    Wenn überhaupt interessiert mich der Code der um die Operationen die du mit deiner Variablen a machst herum steht und nicht nur einzelne Fetzen daraus.

    Achja:
    Benütz den Debugger(F7)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Das is alles wichtig im Quelltext und alles von a is komplett mit bei, hier a nochmal einzeln:

    byte a = 1; //global
          if(zahl & a){ //durchläufe
             Form1->Label4->Caption = Form1->Label4->Caption + " " + zahl;
          }
       a = a << 1; //für jeden weiteren durchlauf für ja und nein
       a = a + 1; //für jeden weiteren durchlauf nur für ja
    

    Gruß
    MWJK



  • irgendwie scheint da in der "verundung" was falsch zu sein ....
    hab das ganze zwar jetzt so:

    if((zahl & a) == a){
       //Ausgabe im Label4
    }
    

    aber es scheint nich so ganz richtig zu sein ........

    Gruß



  • Keine Ahnung, was du dir von dem & erhoffst.
    Lies doch noch mal nach, was das bitwise AND eigentlich macht.



  • Jansen schrieb:

    Keine Ahnung, was du dir von dem & erhoffst.
    Lies doch noch mal nach, was das bitwise AND eigentlich macht.

    was das & macht weiß ich ... da is nicht das problem und das erfüllt in diesem zusammenhang auch seine funktion - es soll einfach das bit prüfen, ob die zahl darin liegt - oder nicht... und wenn bei der zahl das bit das geprüft wird gesetzt ist, dann soll er diese zahl im label4 ausgeben, deswegen "verunde" ich zahl mit a (a ist das bit das geprüft werden soll und zahl die zahl bei der geprüft werden soll - die sich durch die for-schleife ändert).

    aber irgendwie is an der ausgabe was falsch ...



  • Ich glaube, du verstehst nicht ganz was das bitweise AND eigentlich macht, möglicherweise meinst du den %-Operator.

    Wenn a 3 ist, dann fängt die Ausgabe der Zahlen bei 1 und nicht bei 3 an, das ist durchaus richtig so. Weil:
    (1&3)==1
    Und 1 wird as true ausgewertet.



  • Nanyuki schrieb:

    Ich glaube, du verstehst nicht ganz was das bitweise AND eigentlich macht, möglicherweise meinst du den %-Operator.

    Wenn a 3 ist, dann fängt die Ausgabe der Zahlen bei 1 und nicht bei 3 an, das ist durchaus richtig so. Weil:
    (1&3)==1
    Und 1 wird as true ausgewertet.

    sry, aber ich weiss, was das bitwise AND macht.

    wenn ich zahl (in diesem falle zwischen 0 und 64 ist) mit a (in diesem falle 0 und wird dann geshiftet) "verunde" also mit bitwise AND vergleiche und wenn das 1 ist dann die Ausgabe mache, dann kann es ja nur so sein ...
    wenn also zahl 5 is '00000101' und a ist 1 '00000001', dann wird es ausgegeben ... wenn zahl allerdings 6 wäre '00000110' und a 1 '00000001', dann wird die zahl nicht ausgegeben, da der vergleich mit bitwise AND 0 ergibt.

    Denke nach dieser Erklärung dürfte auch jedem klar sein, dass ich weiß wie bitwise AND funktioniert und mittlerweile habe ich auch das Programm zum laufen gebracht - es war ein Rechenfehler von mir, den ich mitprogrammiert habe. allerdings wie gesagt ein rechenfehler und kein Programmierfehler.

    Gruß
    MWJK


Anmelden zum Antworten