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