Frage zu Schleife



  • So langsamm komm ich der Sache glaub ich näher^^

    cout<<"Eingabe: ";
      cin>>bin;
    
            for (wert=i=1; i<2 ; i++)
            {
            wert_1 = 1*2 + bin[1];
            }
    

    Wenn man dort jetzt eingibt: 11

    Dann bekommt man als Ergebniss 51

    Aber was passiert hier ? bin[1]

    Was wird da gerechnet ?

    bin wäre hier ja 1 oder ? weil man ja eine 1 eingibt ...

    wert = 1*2 + bin * + / 1 ???

    Ich weiss jetzt halt nicht wie der daraus auf 51 kommt.



  • Wenn du "11" eingibst, sollte das Ergebnis 3 sein. Und da steht bin[i] und nicht bin[1]. Wenn du die Schleife schon auflöst, dann bitte richtig.

    Korrekt wäre:

    wert = 0
    wert = 02 + 1; // + (bin[0] - '0')
    wert = 1
    2 + 1; // + (bin[1] - '0')

    Also wert == 3

    Und bei einer Eingabe von 1101
    wert = 0
    wert = 02 + 1; // + (bin[0] - '0')
    wert = 1
    2 + 1; // + (bin[1] - '0')
    wert = 32 + 0; // + (bin[2] - '0')
    wert = 6
    2 + 1; // + (bin[3] - '0')

    Also wert == 13



  • fragefrage schrieb:

    So langsamm komm ich der Sache glaub ich näher^^

    cout<<"Eingabe: ";
      cin>>bin;
    
            for (wert=i=1; i<2 ; i++)
            {
            wert_1 = 1*2 + bin[1];
            }
    

    ...

    Ich weiss jetzt halt nicht wie der daraus auf 51 kommt.

    Wie willst du der Sache näher kommen, wenn du die Funktion komplett veränderst? Und das nicht zum Guten! Hier kommst du auf 51, weil du jetzt einfach 1*2 (2) und bin[1] (also vom Eingabestring "11" den char an Stelle 1, also '1') addierst. '1' ist gleich 49 (denke an den ASCII-Code), wenn du da nicht 48 subtrahierst, kommst du eben nicht vom char '1' auf den Wert 1, sondern es ist nunmal der Wert 49. So ergibt sich deine 51.

    Wenn du hier leichte Verständnisschwierigkeiten hast, dann zerlege den Ausdruck doch in mehrere Teile, dann wird's vielleicht einfacher:

    for (wert=i=0; bin[i] ; i++) {
    
      //Ziffer, die im letzten Durchlauf mit Wertigkeit 1 (x^0) gehandelt wurde, wird
      //nun "hochgestuft" (x^0 => x^1, x^1 => x^2 usw.), so dass am Ende jede Ziffer
      //nach ihrer korrekten Stellung ins Ergebnis eingeflossen ist. Nur die letzte
      //Ziffer (ganz rechts) wird als x^0==1 behandelt.
      wert=wert*2;  
    
      //Hier fließt die aktuelle Ziffer ins Ergebnis ein, erst mal mit Wertigkeit 1.
      //Die eventuelle Aufwertung kommt im nächsten Durchlauf. Die 48 müssen
      //subtrahiert werden, um vom ASCII-Zeichen auf den int-Wert zu kommen.
      wert+=(bin[i]-48);
    


  • Wenn eingabe 11 ist:

    cout<<"Eingabe: ";
    cin>>bin;
    
      for (wert=i=0; bin[i] ; i++) 
    
        wert=wert*2+bin[i]-48;
    

    wert = 02 + bin[i] - 48;
    wert = 1
    2 + bin[i] - 48;

    Ich weiss jetzt halt nicht was bei bin[i] steht.

    Oder ist das hier bin[i] ??
    wert = 0*2 + 1; // + (bin[0] - '0')

    Ich müsste halt mal wissen wie man das Komplett hinschreibt ....

    wert_1 : bin = 1 i = 0
    wert_2 : bin = 1 i = 1

    Aber wie schreibt man das dann als gleichung ?

    wert_1 = 02 + bin[i] - 48;
    wert_2 = 1
    2 + bin[i] - 48;

    So ?

    wert_1 = 02 + 1 + 0 - 48;
    wert_2 = 1
    2 + 1 + 1 - 48;

    Wert_1 : Die erste 1 soll bin sein und die 0 danach i
    Wert_2 : Die zweite soll bin sein und die 1 danach i

    Nur schreibt man jetzt dazwischen 10 //1 = bin 0 = i
    1
    1 //1 = bin 0 = i

    Oder + - / ........ ???



  • fragefrage schrieb:

    Ich weiss jetzt halt nicht was bei bin[i] steht.

    😕

    Du liest bin per cin ein. Das ist ein String, ein char-Array. Die einzelnen Elemente eines Arrays kannst du per []-Operator bekommen.

    char bin[]="123";  //char-Array mit 4 Elementen (das vierte ist die abschließende Null, die das String-Ende markiert)
    char c=bin[0];  //c ist '1'
    c=bin[1];       //c ist '2'
    c=bin[2];       //c ist '3'
    c=bin[3];       //c ist 0 (nicht '0'!)
    

    In den eckigen Klammern kann natürlich auch eine Variable stehen, so wie in deinem Beispiel. In einer for-Schleife sieht das dann so aus:

    //Im ersten Schleifendurchlauf ist i==0, so dass c==bin[i]==bin[0]=='1' ist.
    //Im zweiten Durchlauf ist es dann so: c==bin[i]==bin[1]=='2' usw.
    for(int i=0;i<strlen(bin);i++) {
      char c=bin[i];
    }
    

    Klar?


Anmelden zum Antworten