Zahl an den Anfang einer Variable hinzufügen??



  • @Scheppertreiber: ich brauch die variable aber später nochmal um damit weiter zu rechnen...

    @Tachyon: iwie versteh ich die bedingung in der do-while schleife nicht ganz...?

    sry bin noch anfänger in der sache...

    schonmal danke für euere hilfe



  • fireman schrieb:

    @Scheppertreiber: ich brauch die variable aber später nochmal um damit weiter zu rechnen...

    @Tachyon: iwie versteh ich die bedingung in der do-while schleife nicht ganz...?

    sry bin noch anfänger in der sache...

    schonmal danke für euere hilfe

    Die Schleife teilt tmp immer durch 10, und läuft solange, wie tmp nicht null wird. Ausgeschrieben steht dort immer tmp = tmp / 10 (kurz tmp /= 10 ). Dadurch werden die Stellen von b ermittelt.



  • müsste dann nicht schreiben while(tmp/10 > 0) bzw tmp/10 != 0 ?



  • ist exakt das Gleiche 🙂



  • oh ok dann vieeellllen dank 🙂



  • fireman schrieb:

    müsste dann nicht schreiben while(tmp/10 > 0) bzw tmp/10 != 0 ?

    Nein. while (und auch for, if etc.) prüft einen Wert auf wahr oder falsch. Unter C ist alles, was nicht 0 ist wahr, und 0 ist falsch.
    Und tmp/10 ist was anderes als tmp = tmp / 10 . Bei Deiner Variante ist tmp immer gleich (nämlich tmp / 10) und ändert sich nie.
    Ich schreibe das mal etwas ausführlicher:

    int concat(int a, int b)
    {
        unsigned potenz = 1;
        int tmp = b;
        do
        {
            potenz = potenz * 10;
            tmp = tmp / 10; //tmp / 10 und wieder an tmp zuweisen
        } while(tmp); //hier würde auch while(tmp != 0) gehen, aber das ist das Gleiche
        return (potenz * a) + b;
    }
    


  • Scheppertreiber schrieb:

    ist exakt das Gleiche 🙂

    Nö. Das ist ne Endlosschleife. 😉



  • ok - verlesen ...



  • morgen zusammen!
    habe das jetzt mal ausprobiert und es klappt eigentlich auch soweit... bloß es gibt probleme wenn am anfang eine 0 angefügt werden soll da sie einfach wieder weggelassen wird... ist zunächst ja auch logisch aber wenn ich nach der 0 noch eine andere zahl vorne hinzufügen stimmt das ergebnis ja nicht mehr... gibts dafür evtl. noch eine lösung? danke schonmal 🙂



  • fireman schrieb:

    morgen zusammen!
    habe das jetzt mal ausprobiert und es klappt eigentlich auch soweit... bloß es gibt probleme wenn am anfang eine 0 angefügt werden soll da sie einfach wieder weggelassen wird... ist zunächst ja auch logisch aber wenn ich nach der 0 noch eine andere zahl vorne hinzufügen stimmt das ergebnis ja nicht mehr... gibts dafür evtl. noch eine lösung? danke schonmal 🙂

    Ja, die von Scheppertreiber mit Strings. Eine 0 vorne anfügen ist nummerisch gesehen Blödsinn, da 05010 == 5010 ist. Und wenn Du z.B. 50 vorne anfügen willst, dann mach es doch in einem Schritt, und nicht erst eine 0 und dann eine 5.
    Für was soll das eigentlich gut sein? Ist das irgendwas, dass dargestellt werden soll (als Text auf dem Bildschirm), oder willst Du mit den Zahlen rechnen?



  • naja ich will zahlen vom dezimal ins dualsystem umrechnen und das wäre so meine idee wie ich es machen wollen würde:
    zahl durch 2 teilen und rest vor 'x' dranhängen danach wieder zahl (welche jetzt nur noch halb so groß ist) durch 2 teilen und rest vor 'x' hängen...

    über die lösung mit arrays habe ich auch schon nachgedacht... aber ich weiß ja vorher nicht wie groß die zahl wird?



  • *umkipp*

    Das geht nun wirklich einfacher ... Hier im Foum war da diese Woche ein
    Beispiel.



  • vielleicht als einzeiler?

    int link_two_numbers (int a, int b)
    {
      return b * (int)pow(10,(int)log10(a)+1) + a;
    }
    

    ^^wer kein log10 hat, kanns durch log(x)/log(2) ersetzen.
    🙂



  • ... auch nicht schlecht. Es fehlt noch eine Lösungen mit Integralen :-))))))



  • ~fricky schrieb:

    vielleicht als einzeiler?

    int link_two_numbers (int a, int b)
    {
      return b * (int)pow(10,(int)log10(a)+1) + a;
    }
    

    ^^wer kein log10 hat, kanns durch log(x)/log(2) ersetzen.
    🙂

    Die Lösung ist aber deutlich langsamer (Reihenentwicklungen, Potenz, float -> int).
    Außerdem ist es gar nicht das, was der TO eigentlich will. Wenn Du alles gelesen hättest, wüsstest Du das.



  • Tachyon schrieb:

    Die Lösung ist aber deutlich langsamer (Reihenentwicklungen, Potenz, float -> int).

    woher willst du wissen, wie seine maschine pow und log berechnet oder ob speed überhaupt eine rolle spielt?

    Tachyon schrieb:

    Außerdem ist es gar nicht das, was der TO eigentlich will. Wenn Du alles gelesen hättest, wüsstest Du das.

    er will zwei zahlen zusammenkleben. deine concat-funktion von seite 1 macht auch nichts anderes.
    🙂



  • ~fricky schrieb:

    er will zwei zahlen zusammenkleben. deine concat-funktion von seite 1 macht auch nichts anderes.
    🙂

    fireman schrieb:

    naja ich will zahlen vom dezimal ins dualsystem umrechnen und das wäre so meine idee wie ich es machen wollen würde[...]



  • Tachyon schrieb:

    fireman schrieb:

    naja ich will zahlen vom dezimal ins dualsystem umrechnen und das wäre so meine idee wie ich es machen wollen würde[...]

    ok, mein vorschlag gehört noch zur ersten frage.
    🙂



  • Habs jetzt geschafft... mit einer rekursiven funktion oder wie sich das nennt... danke für eure Hilfe - schönes Forum hier 🙂



  • fireman schrieb:

    naja ich will zahlen vom dezimal ins dualsystem umrechnen und das wäre so meine idee wie ich es machen wollen würde:
    zahl durch 2 teilen und rest vor 'x' dranhängen danach wieder zahl (welche jetzt nur noch halb so groß ist) durch 2 teilen und rest vor 'x' hängen...

    oder mit shiften und testen eines bits (entweder des höher- oder niederwertigsten bits, kommt drauf an, in welche richtung man schiebt). das ganze in einer schleife, wenn der wert 0 ist, ist man fertig.

    fireman schrieb:

    über die lösung mit arrays habe ich auch schon nachgedacht... aber ich weiß ja vorher nicht wie groß die zahl wird?

    wenn du die binärdarstellung speichern willst, brauchste sowieso arrays. mach die arrays einfach alle so gross, dass alle bits des grössten datentyps rein passen.
    🙂


Anmelden zum Antworten