syntax unklarheiten!



  • Hallo!

    Ich hab hier folgende Aufgabe und bin mir bzgl. Syntax nicht ganz im klaren
    (bin c++ anfänger sollt ich dazu sagen):

    "Gegeben Sei die folgende Rekursion:

    int f(unsigned no, unsigned div) {
    	if (!no) return div;
    	if (!div) div=1;
    	if (no % 2)
    		return div + f(no/div, div*2);
    	else
    		return no % 10 + f(no/2, div);
    }
    

    a)no=7084, div = 1; Geben Sie den kompletten Aufrufgraphen an, der zu diesem Ergebnis führt.
    b) Schreiben Sie eine iterative (nicht rekursive) Funktion f_it(unsigned no, unsigned div), die für beliebige
    Eingaben dasselbe Ergebnis liefert, wie ein Aufruf der Funktion f mit denselben Parametern"

    Also unsigned ist mir klar. Aber was wenn ich hier gar keinen Typ angebe?
    ist das automatisch int oder passen sich die Parameter den Typ an des den sie bekommen?!

    Außerdem frag ich mich was mit if(!no) und if(!div) überprüft wird?! Ich geh mal davon aus ich hab da die int-Zahl 7084. Wann wäre das denn jetzt true oder false? Mit 0 springt er jedenfalls nicht rein. Hab das in einer IDE getestet und funktioniert nicht. Was bedeutet denn "Nicht 7084" ?! hab ich nen denkfehler?

    Würde mich über etwas aufkärung freuen



  • if (x) ist äquivalent zu if (x != 0), ! dreht das um, also ist if (!x) äquivalent zu if (x == 0). Was die Funktion ohne Rückgabetyp angeht, das ist so gar nicht erlaubt, ich vermute da wurde einfach ein int vergessen.



  • Außerdem frag ich mich was mit if(!no) und if(!div) überprüft wird?!

    Skalare ( int , short , Zeiger, usw.) können implizit zu bool konvertiert werden, wobei dieser bool true ist, wenn sie einen Wert ungleich 0 hatten, und false , wenn sie den Wert 0 hatten.

    Das heißt,

    if(!div)
    

    ist äquivalent zu

    if(div == 0)
    

    Letzteres ist IMHO auch vorzuziehen.

    Also unsigned ist mir klar. Aber was wenn ich hier gar keinen Typ angebe?
    ist das automatisch int oder passen sich die Parameter den Typ an des den sie bekommen?!

    In C durfte man soweit ich weiß einfach nur const schreiben, das war dann automatisch int . Das ist in C++ zum Glück nicht mehr erlaubt.



  • Super danke!! Jetzt ist es mir klar! 🙂



  • Edit: wtf wo kommt dieser Post her Oo



  • cooky451 schrieb:

    Edit: wtf wo kommt dieser Post her Oo

    Was war denn drin bevor du es bearbeitet hast?


Anmelden zum Antworten