• Teuflische Folge

      0 comments

    Soderle,

    dann werde ich mal den Grundlagen Bereich einweihen 🙂

    Wir fangen mal nicht ganz unten mit den Grundlagen an, sondern mit einem kleinen, aber feinen Algoritmus (keine Angst, Grundlagen zu Variabeln etc. kommen auch noch :))

    Wir betrachten heute mal die teuflische Zahlenfolge. Diese ist mathematisch in der folgenden Formel definiert:

    x_{n+1} =\left\{ \begin {array} {cc} x_n/2 & wenn x_n gerade \\ (3*x_n+1)/2 & wenn x_n ungerade \end {array} \right.

    Die Formel besagt, dass wir eine beliebige Zahl n

    • wenn sie gerade ist durch 2 teilen => n/2
    • wenn sie jedoch ungerade ist, wird auf n 1 addiert, also n+1.

    Wie bilden wir nun diese doch relativ einfache mathematische Formel nun in C++ ab?

    Dazu erstellt eine Source Datei. Diese Datei hat die Endung .cpp
    Ich habe meine Datei „folge.cpp“ genannt.

    Nun müssen wir noch eine Bibliothek unserem Sourcecode hinzufügen.
    Diese Bibliothek ist nur für die Ausgabe unserer berechneten Zahlenfolgen notwendig. Natürlich hat die Bibliothek noch andere Funktionen,
    aber auf diese gehen wir in einem anderen Beitrag ein.
    Die Bibliothek die wir für die Ausgabe benötigen heisst „iostream“. Folgendermaßen wird die Bibliothek in den Sourcecode eingefügt:

    #include <iostream>

    Mit dieser #include Anweisung können noch weitere Bibliotheken in euren Sourcecode eingebunden werden, ist hier aber nicht sinnvoll.

    Um nun ein Lauffähiges Programm zu haben, brauchen wir eine Funktion, die beim Starten der Anwendung immer aufgerufen wird. Das ist die „main()“ Funktion.

    Jedesmal wenn ihr ein Programm startet, wird diese Funktion als erstes ausgeführt.
    Der einfachheit halber habe ich den ganzen Algoritmus zur Berechnung der „Teuflischen Zahlenfolge“ in die Main Funktion gepackt.
    So sieht der Code im ganzen aus:

    #include "stdafx.h"
    #include  <iostream>
     
    using namespace std;
     
    int main(int argc, _TCHAR* argv[]) 
    {
       int n = 666; //Eine Teuflische Zahl für einen Teuflischen Algoritmus
       while (n != 1) 
       {
         if ((n % 2) == 0) 
         {
    	n = n / 2;
         } 
         else 
         {
    	n = (n * 3 + 1) / 2;
         }
         cout << n << endl;
       }
       cin >> n;
       return 0;
    }

    In diesem Code haben wir verschiedene Bedingte Anweisungen und Schleifen.
    Zum einen haben wir die „while“ Schleife. Diese wiederholt den Code, der innerhalb des Schleifenrumpes steht solange, bist die Bedingung erfüllt ist,
    die im Schleifenkopf angegeben ist.
    In dem Fall durchläuft die Schleife den Schleifenrumpf, solange „n != 1“ (gesprochen: n ist ungleich 1) ist.

    Innerhalb der Schleife haben wir die Bedingte Anweisung (oder auch If-Statement genannt).
    Mit ihr können wir eine True-False Bedingung abfragen.
    Im Sourcecode steht

    if ((n % 2) == 0)

    Hier wird der Modulo von n zur Zahl 2 berechnet. Es wird also nichts anderes gemacht, als den Rest der Division von n durch 2 zu ermitteln.
    Ist das Ergebnis der Berechnung 0, ist die Zahl gerade.
    Ist das Ergebnis der Berechnung ungleich 0, ist die Zahl ungerade.
    Wers mir nicht glaubt, kanns ja selber mal nachrechnen 😉

    Nun ist es so, falls das Ergebnis der Berechnung gerade, also 0 (oder true) ist , wird der obere Teil des If-Statements „betreten“ und auch nur dieser ausgeführt.
    Somit wird die Berechnung n=n/2 ausgeführt.
    Ist das Ergebnis der Berechnung ungerade, also ungleich 0 (oder eben false), wird der „else“ Teil des If-Statements „betreten“ und ebenfalls nur dieser ausgeführt.
    Es wird praktisch der obere Teil des If-Statements übersprungen.

    Als letzes haben wir noch eine Einfache Ausgabe für die berechneten Zahlen.
    Dies wird mittels std::cout bewerkstelligt.

    Ich hoffe Ihr habt nun viel Spass mit den Teuflischen Zahlen.

    P.S.: Wer mehr erfahren will, kann auch mal nach dem „Collatz-Problem“ suchen. Das ist im Grunde genau dieses Problem hier.

    Write a comment