13 schwere Kurzfragen



  • Wann kommen denn eigentlich die schweren Kurzfragen?



  • hab aber auch schon lehrbücher gesehen, in denen stand expizit drin "die türme von hanoi lassen sich nicht iterativ lösen."

    Also so eine Aussage wäre auch unsinnig - man kann JEDE Rekursion in eine Iteration umwandeln (notfalls indem man die rekursiven Aufrufe durch einen eigenen Rechenstack nachbildet).

    volkard schrieb:

    auch wenn ich in der problemstellung eine rekursive definition benutze?

    Für was für ein Problem willst du denn eine rekursive Beschreibung nutzen? (Ein Problem schreibt man normalerweise in der Form "ich habe A und will B erreichen - was muß ich tun?" - wenn du an der Stelle schon über Rekursion nachdenkst, machst du etwas falsch)



  • CStoll schrieb:

    Also so eine Aussage wäre auch unsinnig - man kann JEDE Rekursion in eine Iteration umwandeln (notfalls indem man die rekursiven Aufrufe durch einen eigenen Rechenstack nachbildet).

    Dann werf ich einfach mal die Ackermann- oder Ulam-Funktion in den Raum ^^

    Die Türme ließen sich afaik durch Permutationsbildung iterativ lösen. Mein Prof hatte mal ein Programm, dass das machte. Es geht auf jeden Fall.



  • CStoll schrieb:

    hab aber auch schon lehrbücher gesehen, in denen stand expizit drin "die türme von hanoi lassen sich nicht iterativ lösen."

    Also so eine Aussage wäre auch unsinnig - man kann JEDE Rekursion in eine Iteration umwandeln (notfalls indem man die rekursiven Aufrufe durch einen eigenen Rechenstack nachbildet).

    das gilt nicht. gemeint war, daß es iterartiv nicht gehe, außer mit dem notfall-trick.



  • CStoll schrieb:

    volkard schrieb:

    auch wenn ich in der problemstellung eine rekursive definition benutze?

    Für was für ein Problem willst du denn eine rekursive Beschreibung nutzen? (Ein Problem schreibt man normalerweise in der Form "ich habe A und will B erreichen - was muß ich tun?" - wenn du an der Stelle schon über Rekursion nachdenkst, machst du etwas falsch)

    du sagst mir gerade, daß ich was falsch mache, nur weil ich mehr sachen kenne? respekt!

    ich denke konkret an eine rekursive definition im buch über formale begriffsanalyse von wille und ganter. die war wirklich happig und da wäre es kein fehler, davon auszugehen, daß man iterartiv keinen ordentlichen zugang hat. das buch liegt mir im moment nicht vor und ich kann nicht nachblättern.

    denken wir und erstmal ganz einfach die definition "ein elefant ist jemand, dessen beide eltern elefanten sind". das ist nicht irgend eine eine lösungsstrategie für die frage, ob jemand ein elefant ist, sondern es ist die definition. aber die läßt sich jetzt von eventuellen problemstellungen abkoppeln. daher denke ich weiter daran, die problemstellung (evtl ein wenig hintertückisch) miteinzubeziehen wie im berühmten "was ist die größte zahl, die sich nicht mit worten darstellen läßt?" (eine wort-darstellung einer zahl ist "die größte zahl, die sich nicht mit worten darstellen läßt" und schnell wird's absurd, was aber nix an der problemstellung ändert).



  • Hallo,

    Volkard meinte der Zeiger auf eine nicht Klassenmethode ist 2/3 mal so groß wie ein Zeiger auf eine "normale" 😉 Funktion.
    Ich dachte das wäre ein ganz normaler Zeiger auf eine Funktion, die quasi implizit den this-Pointer als Parameter mitbekommt. Lass mich gerne belehren.



  • volkard schrieb:

    das gilt nicht. gemeint war, daß es iterartiv nicht gehe, außer mit dem notfall-trick.

    Kann man immer unterscheiden, ob ein Algorithmus diesen "Trick", auch verschleiert, anwendet oder "echt iterativ" ist?


  • Mod

    1. Wieviel Speicherplatz belegt ein Zeiger bei einem 32-Bit breiten Adressbus?

    fangfrage: der 80286 hat einen 24bit breiten datenbus, das heisst noch lange nicht, dass pointer dort 24bit breit sind. und ein far-pointer auf x86 32bit architektur hat 48 bit.
    @volkard: standard-konforme pointer auf member-funktionen sind immer gleich gross, dass visual c++ hier unterschiede macht, ist eine proprietäre erweiterung). das ergibt sich einfach darsu, dass ein reinterpret_cast zu einem beliebeigen anderen pointer auf memberfunktion und zurück den ursprünglichen pointer ergeben muss.

    1. Beschreiben SIe drei Möglichkeiten Ergebniswerte einer Funktion an das aufrufende Programm zurückzugeben. Je ein Beisp.

    möglicherweise sind hier mechanismen gemeint: also per-value als funktionswert, per-referenz (mittels referenz oder pointer) über funktionsparameter, per exception. könnte aber auch anders gemeint sein.



  • camper schrieb:

    @volkard: standard-konforme pointer auf member-funktionen sind immer gleich gross, dass visual c++ hier unterschiede macht, ist eine proprietäre erweiterung).

    ich meinte nicht einen zusatztrick des msvc, sondern 2*sizeof(void*) bzw 3*sizeof(void*) weil verschiedene compiler das verschieden implementieren.

    kann natürlich auch jede andere größe sein, aber ich hab bisher nur diese beiden größen angetroffen.



  • is ja toll, dass ihr jetzt schon für faule Säcke die Hausaufgaben macht 🙄



  • eigeninitiative schrieb:

    is ja toll, dass ihr jetzt schon für faule Säcke die Hausaufgaben macht 🙄

    du kannst gerne formblatt 17a ausfüllen und an marc++us schicken und damit beantragen, daß wie deine hausaufgaben nicht machen.



  • volkard schrieb:

    das gilt nicht. gemeint war, daß es iterartiv nicht gehe, außer mit dem notfall-trick.

    Schlicht Bullshit. Rekursive Definitionen lassen sich IMMER in eine Iterative Form umwandeln und umgekehrt. Beide sind im Sinne von Turing "gleichmächtig". Beweisen kann man das über den Aufbau der partiell rekursiven bzw. iterativen Programme (While). Kauf dir ein gutes Buch zur theoretischen Informatik (Schöning z.B.), da sind die Beweise drinn.



  • ert schrieb:

    volkard schrieb:

    das gilt nicht. gemeint war, daß es iterartiv nicht gehe, außer mit dem notfall-trick.

    Schlicht Bullshit. Rekursive Definitionen lassen sich IMMER in eine Iterative Form umwandeln und umgekehrt. Beide sind im Sinne von Turing "gleichmächtig". Beweisen kann man das über den Aufbau der partiell rekursiven bzw. iterativen Programme (While). Kauf dir ein gutes Buch zur theoretischen Informatik (Schöning z.B.), da sind die Beweise drinn.

    Schlicht Bullshit. Rekursion als Programmiertechnik betrachtet ist manchmal nicht sinnvoll vermeidbar. Ist sich hier nicht nur Theorie. Außerdem redest Du auf einmal über rekursive Definitionen. Und über die steht in deinen Büchern nix, die Bücher behandeln nur Verfahren und Maschinen, gell?



  • volkard schrieb:

    1. Wieviel Speicherplatz belegt ein Zeiger bei einem 32-Bit breiten Adressbus?
      mindestens 32 bit. üblich sind genau 32 bit für datenzeiger. üblich sind 8 bit pro char. sicher ist sizeof(char)==1. üblich ist also sizeof(void*)==4. funktionszeiger auf globale funktionen sind normalerweise genausolang. methodenzeiger auf nicht-static-methoden sind doppelt so lang oder dreimal so lang. solche auf static methoden werden ebhandelt wie zeiger auf globale funktionen.
      edit: nee, kann nen 16-bit-compiler auf meinem 32-bit-prozessor benutzen. also kann der void* größer oder kleiner als 32 bit sein.

    Wieso sind Methodenzeiger auf nicht-static-methoden doppelt/dreimal so lang also 8/12 byte? 😕



  • bluecode schrieb:

    Wieso sind Methodenzeiger auf nicht-static-methoden doppelt/dreimal so lang also 8/12 byte? 😕

    Weil du hier virtuelle methoden beachten musst. Und da braucht man etwas mehr informationen als nur die adresse der funktion um dann die richtige aufrufen zu koennen.



  • eigeninitiative schrieb:

    is ja toll, dass ihr jetzt schon für faule Säcke die Hausaufgaben macht 🙄

    Das liegt an dem Wort schwierig in der Aufgabenstellung, da meinen hier einige sich sofort angesprochen fühlen zu müssen...



  • 😃 👍



  • Hatte auch den Verdacht, dass sich da jemand nur das Selberdenken ersparen wollte...


Anmelden zum Antworten