uwe87: Funktionen

Hi Leute,

  
function u(z) {  
  var i = 0;  
  while (z > 0) {  
    i = i * 10 + z % 10;  
    z = Math.floor( z / 10);  
  }  
  return i;  
}  
var z = parseInt( prompt("Geben Sie eine ganze Zahl ein: "));  
var p = z;  
do { p = p + u(z); }  
  while ( p != u(p) );  
alert("p(" + z + ") = " + p );  

Wenn ich hier 10 eibgebe, bekomme ich als Ausgabewert 11 raus.
wenn ich 39 eingebe, kommt 969 raus.

Meine frage nun an euch ist, was genau wird hier gemacht.
Ich kann die Ausgabewerte nicht nachvollziehen.
Ich blick gar nicht mehr durch .

  1. Hallo,

    Meine frage nun an euch ist, was genau wird hier gemacht.

    Addiert, Multipliziert, Schleifen durchlaufen, Modulo gerechnet, usw.

    Meine Frage wäre, was du nicht verstehst?

    Ich kann die Ausgabewerte nicht nachvollziehen.

    In solchen Fällen bietet sich eine sog. Handsimulation an. Schreibe dir eine Tabelle auf, in der du schrittweise die Belegung aller (interessanten) Variablen einträgst. Dann erkennt man relativ schnell das System dahinter.

    Grüße

  2. Hallo,

    Hi Leute,

    function u(z) {
      var i = 0;
      while (z > 0) {

    solange z größer 0

    i = i * 10 + z % 10;

    i ist gleich i mal 10 plus den rest von z geteilt durch 10 (modulo)

    z = Math.floor( z / 10);

    z ist gleich abgerundet z geteilt durch zehn.

    }

    wenn fertig damit (also z kleiner 10, dann wird ja z durch 10 abgerundt 0)

    return i;

    gib i zurück.

    }
    var z = parseInt( prompt("Geben Sie eine ganze Zahl ein: "));
    var p = z;
    do { p = p + u(z); }

    mach p gleich p plus das was bei der funktion u rauskommt

    while ( p != u(p) );

    solange p nicht gleich dem wert ist, der bei u(p) rauskommt.

    alert("p(" + z + ") = " + p );

    zeige an p und klammer auf dann den wert von z, dann klammerzu ist gleich, dann den wert von p

    
    >   
    > Wenn ich hier 10 eibgebe, bekomme ich als Ausgabewert 11 raus.  
    > wenn ich 39 eingebe, kommt 969 raus.  
    >   
    > Meine frage nun an euch ist, was genau wird hier gemacht.  
    > Ich kann die Ausgabewerte nicht nachvollziehen.  
    > Ich blick gar nicht mehr durch .  
      
    Was ein verquaster algoryhtmus. wozu soll der gut sein?  
      
    Gruß  
      
    jobo
    
    1. @@jobo:

      nuqneH

      Was ein verquaster algoryhtmus. wozu soll der gut sein?

      Zur Hausaufgabe, vermutlich.

      Und was eine verquaste Schreibweise.  ;-)

      Algorithmus schreibt sich mit i. Und th. Und großem A, natürlich.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hallo,

        Was ein verquaster algoryhtmus. wozu soll der gut sein?

        Zur Hausaufgabe, vermutlich.

        Und was eine verquaste Schreibweise.  ;-)

        Algorithmus schreibt sich mit i. Und th.

        merci.

        Und großem A, natürlich.

        Na: http://www.edition-westfront.de/kleins.html

        Qapla'

        Gruß

        jobo

        1. Hallo,

          Und großem A, natürlich.

          Na: http://www.edition-westfront.de/kleins.html

          eine extrem schwer lesbare Kleinbuchstabenwüste, die von weiterer Lektüre abschreckt - aber das weißt Du sicher noch.

          Freundliche Grüße

          Vinzenz

          1. Hallo Vinzenz,

            Na: http://www.edition-westfront.de/kleins.html

            eine extrem schwer lesbare Kleinbuchstabenwüste, die von weiterer Lektüre abschreckt - aber das weißt Du sicher noch.

            Der Mensch ist eben eine Gewohnheitstier. Fragt sich eben, woran er sich gewöhnt hat, gewöhnen mag etc.pp.. Gleichzeitig ist das Hirn recht flexibel.

            Du knnsat das raetliv uporbltmeascih lseen. Obwohl es ja alles durcheinander geht. Mir ist dennoch klar, dass man am liebsten das liest, was man gewohnt ist. Denn auf Groß-Kleinschreibung stellt sich das Hirn sicherlich ein. Ich glaube aber beim Englischen, dass mir die paar großgeschriebenen Worte nicht wirklich helfen oder es mir vereinfachen. Abgesehen davon aber interessant, wie sich solch ein Trend oder Ansätze durch die Jahrhunderte wiederfinden.

            Gruß

            jobo

  3. @@uwe87:

    nuqneH

    i = i * 10 + z % 10;

    z % 10 liefert den Rest von z bei Divion durch 10, also die letzte Stelle von z.

    z = Math.floor( z / 10);

    Teilt durch 10 und schmeißt den Nachkomma-Anteil weg, liefert also alle Stellen von z bis auf die letzte.

    Damit dürfte sich Funktion u(z) erschließen.

    do { p = p + u(z); }
      while ( p != u(p) );

    Wo wir nun wissen, was u(p) zurückgibt, wissen wir auch, wann die Schleife abbricht. Bis dahin wird einfach aufaddiert.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. @@Gunnar Bittersmann:

      nuqneH

      […] wissen wir auch, wann die Schleife abbricht.

      Nächster Teil der Hausaufgabe: Terminiert der Algorithmus für alle ganzen Zahlen z? Warum?

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. @@Gunnar Bittersmann:

        nuqneH

        Nächster Teil der Hausaufgabe: Terminiert der Algorithmus für alle ganzen Zahlen z? Warum?

        Hehe, macht hier niemand Hausaufgaben?

        Sei z eine N-Stellige natürliche Zahl, in Ziffern: [latex]z = z_{N-1} z_{N-2} \ldots z_1 z_0[/latex]

        u ist die Zahl mit den Ziffern von z in umgekehrter Reihenfolge: [latex]u = z_0 z_1 \ldots z_{N-2} z_{N-1}[/latex]

        Der Algorithmus generiert die Glieder der arithmetischen Folge [latex]p_n = z + n u, \quad n \in \mathbb N[/latex] und terminiert, wenn [latex]p_n[/latex] ein Palindrom ist.

        Die Frage ist nun: Gibt es für jedes z ein n derart, dass [latex]p_n[/latex] ein Palindrom ist, der Algorithmus also terminiert?

        Ja. Beweis:

        Für [latex]n = 10^N[/latex] ist [latex]p_n = 10^N u + z = z_0 z_1 \ldots z_{N-2} z_{N-1} z_{N-1} z_{N-2} \ldots z_1 z_0[/latex] ein Palindrom.

        Anmerkung: Es ist hier irrelevant, ob der Algorithmus schon früher terminiert. Wichtig war zu zeigen, dass es für jedes z ein n gibt, bei dem er spätestens terminiert.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Hi Gunnar.

          Nächster Teil der Hausaufgabe: Terminiert der Algorithmus für alle ganzen Zahlen z? Warum?

          Nein. Für z <= 0 ist u(z) = 0, p ist konstant == z, und wenn z kein Palindrom ist, terminiert er nicht.

          Sei z eine N-Stellige natürliche Zahl

          Ach so ;-)

          Für [latex]n = 10^N[/latex] ist [latex]p_n = 10^N u + z = z_0 z_1 \ldots z_{N-2} z_{N-1} z_{N-1} z_{N-2} \ldots z_1 z_0[/latex] ein Palindrom.

          [latex]p_n[/latex] ist kein Palindrom, wenn [latex]z_0 = 0[/latex] ist, und dann hält der Algorithmus i.a. auch nicht mit [latex]p_n[/latex]: etwa für [latex]z = 10[/latex] ist [latex]N = 2[/latex], [latex]n = 100[/latex] und [latex]p_{100} = 110[/latex], damit hält der Algorithmus nicht.

          Hehe, macht hier niemand Hausaufgaben?

          Offenbar nicht ;-)

          Viele Grüße,
          der Bademeister

          1. @@Bademeister:

            nuqneH

            Nein. Für z <= 0 ist u(z) = 0, p ist konstant == z, und wenn z kein Palindrom ist, terminiert er nicht.

            Ja, schon die Aufgabenstellung prompt("Geben Sie eine ganze Zahl ein: ") ist falsch. Es dürfen nur natürliche Zahlen zugelassen werden.

            [latex]p_n[/latex] ist kein Palindrom, wenn [latex]z_0 = 0[/latex] ist

            Da hast du wohl recht. Muss man eine Fallunterscheidung machen. Der Beweis für [latex]z_0 = 0[/latex] ist trivial. Ich hätte ihn hier hingeschrieben; leider reicht der Platz nicht.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Der Beweis für [latex]z_0 = 0[/latex] ist trivial. Ich hätte ihn hier hingeschrieben; leider reicht der Platz nicht.

              :-)

              Hoffentlich war das nicht Gunnars letzter Satz.

              Viele Grüße,
              der Bademeister

              1. @@Bademeister:

                nuqneH

                Hoffentlich war das nicht Gunnars letzter Satz.

                *g*

                Gut, dann folgen wir mal der Geschichte der Mathematik und nehmen uns die Spezialfälle einzeln vor.

                Wenn kein Übertrag auftritt, wenn also [latex]z_k + z_{N-k-1} < 10[/latex] für alle k ∈ ℕ, 1 ≤ k ≤ N - 2*, dann ist
                [latex]p_1 = z + u = z_{N-1} z_{N-2} \ldots z_1 0 + z_1 \ldots z_{N-2} z_{N-1} = z_{N-1} (z_{N-2}+z_1) \ldots (z_1+z_{N-2}) z_{N-1} [/latex] ein Palindrom.

                Und in drei Jahrhunderten wird vielleicht jemand mit einem Quantencomputer den allgemeinen Beweis führen.

                Qapla'

                * Es genügt auch 1 ≤ k ≤ ½(N - 1), um alle zu erwischen.
                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)

                1. @@Gunnar Bittersmann:

                  nuqneH

                  Ich wollte in bester Guttenberg-Manier hier einen Beweis präsentieren, hab aber keinen gefunden.

                  Vielleicht ergibt er sich aus der Lösung der Aufgabe 4, die sich von unserem Problem nur durch den Offset z unterscheidet.

                  Bittersmannsche Vermutung: Jede arithmetische Folge, deren Differenz benachbarter Glieder nicht durch 10 teilbar ist, enthält ein Palindrom.

                  Verallgemeinerung: Jede arithmetische Folge, deren Differenz benachbarter Glieder nicht durch b teilbar ist, enthält ein Palindrom im Zahlensystem zur Basis b.

                  Vielleicht lässt sich das einfach zeigen. Vielleicht auch nicht.

                  Ändert man den Algorithmus an einer Stelle   do { p = p + u(z); } while ( p != u(p) );
                                                                              ▼
                  ab in                                        do { p = p + u(p); } while ( p != u(p) );

                  Dann wird statt   93 + 39 = 132, 132 +  39 = 171
                                                          ▼
                  gerechnet         93 + 39 = 132, 132 + 231 = 363

                  Und es ist bislang ungeklärt, ob der Algorithmus für alle Zahlen terminiert oder nicht.

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
  4. Hallo,

    function u(z) {

    var i = 0;
      while (z > 0) {
        i = i * 10 + z % 10;
        z = Math.floor( z / 10);
      }
      return i;
    }

      
    was \*soll\* diese Funktion denn tun?  
    Wenn die Initialisierung und die Schleifen-Abbruchbedingung stimmen würde, könnte sie als Ergebnis die Zahl liefern, bei der die Ziffern in umgekehrter Reihenfolge stehen wie bei z. Aber ist das der Zweck?  
      
    
    > do { p = p + u(z); }  
    >   while ( p != u(p) );  
      
    Und das leuchtet mir erst recht nicht ein - zumindest nicht der Sinn dahinter.  
    Kommentierter, dokumentierter Quellcode ist halt was Feines. ;-)  
      
    Ciao,  
     Martin  
    
    -- 
    F: Was macht ein Offizier, der in der Nase bohrt?  
    A: Er holt das Letzte aus sich heraus.  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    
    1. @@Der Martin:

      nuqneH

      Wenn die Initialisierung und die Schleifen-Abbruchbedingung stimmen würde

      Stimmen sie nicht?

      könnte sie als Ergebnis die Zahl liefern, bei der die Ziffern in umgekehrter Reihenfolge stehen wie bei z.

      Hehe, nicht verraten!

      Aber ist das der Zweck?

      Pst.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hi,

        Wenn die Initialisierung und die Schleifen-Abbruchbedingung stimmen würde
        Stimmen sie nicht?

        äh, anscheinend doch. Ich hatte beim Probedurchlauf im Kopf z und i durcheinandergebracht, und mich außerdem noch davon verwirren lassen, dass Uwe schreib, er bekäme 10->11 und 39->969. Dabei dachte ich, er meinte nur das Ergebnis von p(z).

        Aber ist das der Zweck?
        Pst.

        Okay, das ist vielleicht die Aufgabe. Mit Zweck meinte ich: Was kann man damit anstellen? Wo/wie kann man das nutzen?

        Ciao,
         Martin

        --
        Husten kann böse Folgen haben.
        Besonders im Kleiderschrank.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hi Martin,

          hier bitteschön

          Ist eine Klausuraufgabe!
          Was dieser Quelltext tut, das weiß ich nicht.

          Wir sollen für bestimmte Zahlen z Die Programmausgaben bestimmen.

          1. Hi Martin

            Ist eine Klausuraufgabe!
            Was dieser Quelltext tut, das weiß ich nicht.

            Wir sollen für bestimmte Zahlen z die Programmausgaben bestimmen

            Gruß
            Uwe

            Musterklausur

            1. Hallo,

              Was dieser Quelltext tut, das weiß ich nicht.
              Wir sollen für bestimmte Zahlen z die Programmausgaben bestimmen

              ziemlich stumpfsinnige Aufgabe ... :-(

              Musterklausur

              Nix Musterklausur. Ich laufe auf ein Login-Formular bei der TU Cottbus auf.
              Interne, login-pflichtige Ressourcen hier zu verlinken, ist relativ zweckfrei.

              Ciao,
               Martin

              --
              Ein Patriot ist jemand, der bereit ist, sein Land gegen seine Regierung zu verteidigen.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Hi,

                Nix Musterklausur. Ich laufe auf ein Login-Formular bei der TU Cottbus auf.

                Ich nicht - da das SSL-Zertifikat nicht vertrauenswürdig ist, komm ich gar nicht erst soweit ...

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                O o ostern ...
                Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
                1. Hallo,

                  Nix Musterklausur. Ich laufe auf ein Login-Formular bei der TU Cottbus auf.
                  Ich nicht - da das SSL-Zertifikat nicht vertrauenswürdig ist, komm ich gar nicht erst soweit ...

                  ach so - die Warnung kam bei mir zwar auch, aber ich bin nicht ganz so paranoid und hab's einfach akzeptiert. Ich bin ja schließlich nicht im Begriff, private oder geheimhaltungswürdige Daten zu übertragen.

                  Ciao,
                   Martin

                  --
                  Der Professor sitzt beim Essen in der Mensa. Ein Student setzt sich ihm unaufgefordert gegenüber.
                  Professor: Seit wann essen denn Schwein und Adler an demselben Tisch?
                  Student:   Na gut, dann flieg' ich eben zum nächsten Tisch.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  5. @@uwe87:

    nuqneH

    var z = parseInt( prompt("Geben Sie eine ganze Zahl ein: "));
    var p = z;
    do { p = p + u(z); }
      while ( p != u(p) );

    Nächster Teil der Hausaufgabe: Wie könnte man das deutlich effizienter machen?

    Wenn ich hier 10 eibgebe, bekomme ich als Ausgabewert 11 raus.
    wenn ich 39 eingebe, kommt 969 raus.

    Du siehst die Gemeinsamkeit der Zahlen 11 und 969?

    Qapla'

    PS: Sowohl mein Geburtstag, -monat und -jahr sind (jedes für sich) ebenfalls solche Zahlen – allerdings nicht im Dezimal-, sondern im Dualsystem.

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. @@Gunnar Bittersmann:

      nuqneH

      PS: Sowohl mein Geburtstag, -monat und -jahr sind (jedes für sich) ebenfalls solche Zahlen – allerdings nicht im Dezimal-, sondern im Dualsystem.

      Verdammt, hab ich gerade mein Alter verraten? ;-)

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
  6. Erstmal danke an alle, die versuchen mir zu helfen.
    Soweit hab ich es verstanden.

    Dass was eigentlich meine Frage war, wenn ich z.B 39 eingebe welche einzelnen Schritte werden durchgeführt bis ich zum Ergebnis 969 komme. Das war nämlich mein Problem.

    Zu der Fragestellung noch, sie ist aus einer alten Zwischenklausur.

    Gruß
    Uwe