brauche bitte mal hilfe :)



  • Und zwar ich Lerne gerade C und nehme da das Buch von Jürgen Wolf C von A bis Z (www.pronix.de) und bin gerade bei einer aufgabe die ich mir selber irgendwie nicht erklären kann.
    BTW: Was würdet ihr einen Einsteiger in die Programmier/Skripting Welt für eine Sprache raten?
    Ich hab mal paar web sachen geschrieben ala DHTML (Html + JavaScript) usw..

    Also nun hier das Programm

    #include <stdio.h>
    #include <stdlib.h>
    #define ulong unsigned long

    #include <stdio.h>
    #include <stdlib.h>
    #define ulong unsigned long
    
    void dez2bin(ulong dez) 
    {
       if(dez) 
        {
          dez2bin(dez / 2);
          printf("%lu ", dez % 2);
        }
    
    }
    
    int main(void) {
       ulong dezimal;
    
       printf("Dezimalzahl in Dualzahl konvertieren\n");
       printf("Welche Zahl : ");
       scanf("%lu",&dezimal);
       printf("Dezimal = %lu Dual = ",dezimal);
       dez2bin(dezimal);
       printf("\n");
       return EXIT_SUCCESS;
    }
    

    Man sieht es handelt sich hier um eine einfache umrechnung dezimal zu dualzahl.
    So jetzt meine Frage: wer oder was ruft hier andauern die Funktion auf bzw. wer ändert hier den Wert von dez?
    Ich dachte mir das dez2bin(dez/2) den Wert ändert aber irgendwie kann ich mir das nicht erklären es wird doch nur der Wert / 2 gerechnet und keine neue Wertzuweisung initialisiert. 😕

    Für jede Hilfe danke ich 😃

    Jetzt Fragen sicher viele warum ich nich im Forum der Webseite poste, das problem ist ich kann mich dort nicht registrieren.

    mfg
    dalini



  • Erster Aufruf (Bsp. dezimal == 10):

    dez2bin(dezimal);
    

    Zweiter Aufruf (dez == 10, dez / 2 == 5):

    dez2bin(dez / 2);
    

    Dritter Aufruf (dez == 5, dez / 2 == 2):

    dez2bin(dez / 2);
    

    usw..



  • void dez2bin(ulong dez)
    {
       if(dez)
        {
          dez2bin(dez / 2);    // <<< Rekursion
          printf("%lu ", dez % 2);
        }
    
    }
    

    Das ist eine Rekursive-Funktion, sie ruft sich selbst immer wieder auf solange dez != 0 ist, dabei wird bei jedem neuen aufruf der Wert von dez / 2 als neues unsigned long als Parameter dez verwendet.

    mfg hohesC



  • also danke für die hilfe jetzt wird mir einiges klarer. 👍



  • was ich mich denoch frage wenn sich dez2bin(dez / 2) immer wieder selbst aufruft solange dez != 0 ist wann kommt dann der printf... zum zuge?

    Oder wird zuerst die if Schleife beendet und dann ruft dez2bin(dez / 2) sich wieder selbst auf?

    Ich weiss bin noch ein noob 🤡

    Aber ich hoffe ihr könnt mir da helfen *g*

    mfg
    dalini



  • Tipp: Debug doch mal und schaus dir an 🤡



  • Wenn die Funktion mit einem Aufruf fertig ist, kehrt sie in der nächsthöheren Ebene an den Punkt hinter diesem Aufruf zurück - danach kommt als nächste Anweisung das printf().



  • ok ich habs endlich habs mit dem debugger versucht.

    Also danke an alle die mir da geholfen haben.

    mfg
    dalini


Anmelden zum Antworten