if Schleife: Null hinzufügen



  • Hey,
    ich habe drei Variablen: i, val und end.
    Mein Code:

    int main(void)
    {
    
    double val = 245;
    
    for(i=0; val!='\0'; i++)
        {
            // end soll pro Zahl eine 0 mehr kriegen
        }
    return 0;
    }
    

    end soll zum Schluss 245 Nullen haben, wie macht man das?

    Bye



  • Hinweis

    Was ist end ? Du kannst über einen Konstruktor von std::string einen String mit beliebig vielen Wiederholungen eines bestimmten Zeichens füllen. Hilft dir das weiter?

    #include <string>
    
    int main()
    {
       double Val = 245;
       std::string s = string( Val, '0' );
    }
    

    Der erste Parameter sollte eigentlich ein size_type sein, aber double ist implizit konvertierbar, sodass das eigentlich gehen sollte.

    Edit:
    Wenn end ei numerischer Datentyp ist kannst du pow benutzen:

    #include <cmath>
    
    int main()
    {
       double Val = 245;
       double end = 1.0;
       end *= pow( 10, Val ); // 245 Kommastellen nach links schieben
    }
    


  • LightBoom schrieb:

    ich habe drei Variablen: i, val und end.

    Nein, du hast nur i und val. Zudem Prüfst du einen double-Wert gegen ein Zeichen was definitiv nicht gehen kann. Zudem existiert auch keine "if-Schleife".

    Vielleicht erklärst du mal dein Problem so, das andere es verstehen.

    Ich gehe einmal von folgendes aus: Du willst ein Endergebnis das 245 Nullen haben soll - dies wirst du in C++ nicht mit den existierenden Integer-Datentypen erreichen. double könnte es vermutlich, aber nur mit begrenzter Genauigkeit. Oder soll es ein std::string als Ergebnis sein?



  • Also ich habe zwei Variablen erstellt: i und val
    Und eine double: end

    Wenn val die Größe 4 zum Beispiel hat, soll end denn Wert 0000 haben.
    Bei der Zahl 1536, hat end dann 1536 Nullen hintereinander.



  • LightBoom schrieb:

    Wenn val die Größe 4 zum Beispiel hat, soll end denn Wert 0000 haben.
    Bei der Zahl 1536, hat end dann 1536 Nullen hintereinander.

    Ah, und wie unterscheiden sich die Zahlen 0000 und 000000000000?

    Lies nochmals die vorherigen Posts, du hast einen Denkfehler im Bezug auf Datentypen.



  • Komm nicht drauf ... Der Unterschied ist das ich mir eine Bitmap machen will, und wenn der RAM 43235 Speicheradressen hat muss die Bitmap 43235 Nullen hintereinander haben. Wenn z.B. 425 Prozesse laufen, und einer kommt hinzu, dann würde die Bitmap nach einer 0 durchsucht werden. Die nächste Null währe dann bei 426. Das ist der Unterschied zwischen 0000 und 000000000000, denn wenn nur 4 Nullen in der Bitmap stehen sind auch nur 4 Speicheradressen frei, bei 12 Nullen aber 12 Speicheradressen 😉



  • LightBoom schrieb:

    Komm nicht drauf ...

    Führende Nullen werden bei allen Zahlen ignoriert. 0000 ist 0.

    Des weiteren gibt es keinen eingebauten Datentyp der so viele Stellen speichern kann (und Gleitkommazahlen sind dafür sogar gänzlich ungeeignet, die sind nur auf eine bestimme Anzahl Stellen genau).



  • Sachmal, was hast du vor? Du willst irgendwie so eine Art Prozessids generieren? Willst du ein Betriebssystem entwickeln?



  • Marthog schrieb:

    Sachmal, was hast du vor? Du willst irgendwie so eine Art Prozessids generieren? Willst du ein Betriebssystem entwickeln?

    Wenn er sich schon mit "if Schleifen" beschäftigt hat er wohl was ganz Großes vor.



  • Mich dünkt es trollt hier.



  • // Das hat gefehlt:
    #define val val=1, i
    #include <string>
    std::string end(245, '0');
    // ------------------------------
    
    int main(void)
    {
    
    double val = 245;
    
    for(i=0; val!='\0'; i++)
        {
            // end soll pro Zahl eine 0 mehr kriegen
        }
    return 0;
    }
    

    LightBoom schrieb:

    end soll zum Schluss 245 Nullen haben, wie macht man das?

    Einfach die drei Zeilen einfügen.


Log in to reply