Das ist keine Hausaufgabe, sondern entstammt einem kürzlich online bei
Spektrum der Wissenschaft erschienenen Artikel. Ich nehme an, der TO
möchte einfach nur (aus Neugierde?) etwas den Artikel vertiefen und
etwas mit der Formel praktisch herumspielen.
Also kein Grund, gleich im ersten Antwort-Post gleich so agressiv zu
werden. Leute, würdet Ihr Jemandem bei einem Bier auch so rotzig
daherkommen?
Peter T. schrieb:> Wie würde man diese> Gleichung in> C oder irgendeiner Phantasie-Programmiersprache angehen?
So, wie es da steht. Allerdings musst du selber herausfinden, ob die
Rekursion auch mal abbricht, oder n so groß wird, daß es den
Zahlenbereich deiner Variablen überschreitet, oder was da sonst noch so
passieren kann.
Oliver
Peter T. schrieb:> Wie würde man diese Gleichung in C oder irgendeiner> Phantasie-Programmiersprache angehen?
In "phantastischem" Haskell:
1
m n | n ≤ 100 = m (m (n + 11))
2
| n > 100 = n - 10
Das ist die Originalformel mit etwas anders angeordneten Elementen.
Da die zweite Bedingung (n > 100) alle verbleibenden Fälle abdeckt, kann
man sie auch durch "otherwise" ersetzen:
Thilo L. schrieb:> gleich so agressiv zu werden.
Ich war zu keiner Zeit aggressiv.
Es gehört zum guten Ton sich selbst erst mal etwas Mühe zu geben und
nicht einfach eine Aufgabe hier rein zu posten die nach einer
Hausaufgabe / Übung aussieht.
Siehe: Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"
Yalu X. schrieb:> In "phantastischem" Haskell:
Was hat das mit der Frage zu tun? Willst du hier rumposen mit deinem
akademisch-nutzlosen Sprachspielzeug?
Herbert B. schrieb:> Spektrum wird auch immer schlechter. Solchen trivialen Mist bauschen die> zum Artikel auf, naja von nem Astronomen kann man auch nicht mehr> erwarten.
Ich habe mich gefragt, warum überhaupt McCarthy, von dem die Formel
stammt, solchen "trivialen Mist" veröffentlicht hat. Der Autor des
Spektrum-Artikels hat es leider versäumt, mehr zu den Hintergründen zu
erzählen.
Gerade entdeckt:
https://en.wikipedia.org/wiki/McCarthy_91_function
Da gibt es auch Code-Beispiele in verschiedenen Programmiersprachen.
Herbert B. schrieb im Beitrag #7526476:
> Wenn dich so ein Kinderkram schon geistig überfordert, lass die> Finger vom Programmieren.
Oh, die Formel mag trivial erscheinen, aber die Lösung zwingt den
"Mikrocontroller" dazu, zur Laufzeit emsig die Register auszutauschen!!!
Wenn da mal nicht der Stackpointer überläuft!!! 😄
Ich bin das Problem gänzlich falsch angegangen, ich dachte, ich müsste
ein Array aufmachen und jedes Element markieren als undefiniert oder
berechnet. Die fertige Lösung ist da fast trivial, man (ich) sollte sie
um Ausgaben ergänzen, so dass man sieht, was der uC macht!!!
Herbert B. schrieb:> Yalu X. schrieb:>> In "phantastischem" Haskell:> Was hat das mit der Frage zu tun?
Es ist die (bzw. eine) Antwort darauf.
> Willst du hier rumposen mit deinem akademisch-nutzlosen> Sprachspielzeug?
Der Titel des Spektrum-Artikels lautet "Auch sinnlose Formeln haben
ihren Wert". Für "sinnlose" Formeln ist doch ein "akademisch-nutzloses
Sprachspielzeug", wie du es nennst, geradezu prädestiniert :)
Herbert B. schrieb:> Yalu X. schrieb:>> In "phantastischem" Haskell:> Was hat das mit der Frage zu tun? Willst du hier rumposen mit deinem> akademisch-nutzlosen Sprachspielzeug?
So, damit du dich noch mehr ärgerst und dein Blutdruck steigt, mal sehen
ob ich das noch in Erlang hin bekomme.
Jeweils mit einer Guard-Sequence:
Peter T. schrieb:> Oh, die Formel mag trivial erscheinen, aber die Lösung zwingt den> "Mikrocontroller" dazu, zur Laufzeit emsig die Register auszutauschen!!!> Wenn da mal nicht der Stackpointer überläuft!!! 😄
Im oben verlinkten Wikipedia-Artikel wird auch eine endrekursive
Variante der Funktion vorgestellt, die die meisten C-Compiler in eine
einfache Schleife (ohne Rekursion) übersetzen.
Hallo
Herbert B. schrieb im Beitrag #7526476:
> Wenn dich so ein Kinderkram schon geistig überfordert, lass die> Finger> vom Programmieren.
Eine ziemlich arrogante und weltfremde Aussage.
Geh mal in eine Fußgängerzone, einen Discounter, eine Werkstatt,... und
frage was Rekursion ist....
Unter 100 Leuten werden dir vielleicht 2 Leute das beantworten können.
(Und nein, der Campus einer technischen Hochschule oder die Halle, in
der eine Matheolympiade stattfindet, sind nicht "zugelassen")
Besuche mal eine Schulklasse, die aus Kindern -ist ja Kinderkram (und
nicht Jugendliche aus der Oberstufe eines Gymnasiums) besteht und zeige
ihnen gerne zusammen mit der Lehrerin die Kinderkramformel...
Du wirst erstaunt sein festzustellen, dass diese Formel kein Kinderkram
ist.
Ich würde dir raten, mal im normalen Leben anzukommen und ein wenig über
deine Wortwahl und Bewertung deiner Mitmenschen nachzudenken.
Wer überhaupt nur andeutungsweise etwas mit solchen Formeln und
Begriffen anfangen kann, wird ganz bestimmt nicht so leicht geistig
überfordert und besitzt mehr mathematische Fähigkeiten als wohl 90% der
Weltbevölkerung.
Rolf M. schrieb:> Yalu X. schrieb:>> ≤>> Ist das tatsächlich ein Operator in Haskell?
Der Operator ist in Prelude.Unicode aus dem Package base-unicode-symbols
definiert:
1
import Prelude.Unicode
Neben ≤ und ≥ kommt man damit u.a. in den Genuss der Operatoren ≠, ∧, ∨
∈ und ∉ sowie der Variable π und der Datentypen ℤ und ℚ. In anderen
Modulen sind noch weitere Unicode-Symbole definiert.
> Wie tippe ich den ein?
In Vim:
Strg+K = <
In X (mit Compose-Key, bei mir ist das die rechte Strg-Taste):
<compose> < =
Herbert B. schrieb im Beitrag #7526476:
> Wenn dich so ein Kinderkram schon geistig überfordert, lass die Finger> vom Programmieren.
Wenn Dich der Umgang mit Dich nicht interessierenden Fragen überfordert,
lass die Finger von diesem Forum!
Yalu X. schrieb:> Neben ≤ und ≥ kommt man damit u.a. in den Genuss der Operatoren ≠, ∧, ∨> ∈ und ∉ sowie der Variable π und der Datentypen ℤ und ℚ. In anderen> Modulen sind noch weitere Unicode-Symbole definiert.
Das ist zwar irgendwie nett, wäre mir aber zu umständlich einzugeben.
Rolf M. schrieb:> Yalu X. schrieb:>> Neben ≤ und ≥ kommt man damit u.a. in den Genuss der Operatoren ≠, ∧, ∨>> ∈ und ∉ sowie der Variable π und der Datentypen ℤ und ℚ. In anderen>> Modulen sind noch weitere Unicode-Symbole definiert.>> Das ist zwar irgendwie nett, wäre mir aber zu umständlich einzugeben.
Man muss diese Unicode-Zeichen nicht benutzen, und die wenigsten Leute
tun dies. Auch ich bin grundsätzlich der Meinung, dass im Quelltext von
Programmen außerhalb von String-Literalen ausschließlich ASCII-Zeichen
verwendet werden sollten, also bspw. auch keine Umlaute in Identifiern.
Mir ging es bei der obigen Verwendung von ≤ hauptsächlich darum, eine
möglichst große Ähnlichkeit zur Originalformel zu erreichen. Das war mir
einen zusätzlichen Tastendruck (Strg-Taste vor dem <=) wert ;-)