Anfänger oder Fortgeschrittener?Versuche dich an der Aufgabe

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Anfänger oder Fortgeschrittener?Versuche dich an der Aufgabe

Beitrag von fat-lobyte » Di Sep 02, 2008 5:00 pm

[edit]Dieser thread ist aus dem OS der Zukunft Thread abgespalten, und soll dazu dienen alle unsere Überflieger sanft (oder auch weniger sanft) Landen zu lassen.[/edit]

Ich habe einen Vorschlag:

Schreib einen vermeintlich einfachen (Taschen-) Rechner, der folgende Bedingungen Erfüllt:
  • Unterstützte Rechenoperationen: +, -, *, /, potenzen, wurzeln
  • Eingabe von beliebig komplexen Termen, gruppierung von Termen mithilfe von Klammern
  • Richtige Präzedenz der Operatoren
  • Kompilierbar und Ausführbar auf Linux und Windows
  • Eingabe und Ausgabe in mehreren Zahlenformaten (zumindest: Binär, Oktal, Dezimal und Hexadezimal)
  • Selbstverständlich müssen bei allen Mathematisch und Syntaktisch richtigen Termen die richtigen Ergebnis herauskommen. (leichte Rundungsfehler durch Floating- Point benutzung werden verziehen)
Dabei solltest du auf Externe Tools verzichten. (Obwohl du kaum ohne Parser generator auskommen wirst).
Die Programmiersprache ist dir überlassen: Tu dir allerdings selbst einen gefallen und verwende C dafür.

Wenn du das erfüllt hast, kommst du nochmal hierher in diesen Thread. Dann wirst du wahrscheinlich eine ungefähre Vorstellung von dem Ausmaß eines Betriebssystems haben. Dann lässt sich vielleicht besser über "Mitarbeiter" diskutieren.

Bis dahin: Happy Coding. Oder eher Happy Learning.

ps.: Diese Aufgabe zu meistern würde ich übrigens auch allen anderen unseren Überfliegern empfehlen. Glaubt mir, da werdet ihr ziemlich schnell auf dem harten Boden der Tatsachen landen, denn dabei können selbst recht erfahrene Programmierer noch einiges lernen.
Haters gonna hate, potatoes gonna potate.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: OS der Zunkunft

Beitrag von nufan » Di Sep 02, 2008 5:07 pm

fat-lobyte hat geschrieben:Schreib einen (Taschen-) Rechner, der folgende Bedingungen Erfüllt:


Unterstützte Rechenoperationen: +, -, *, /, potenzen, wurzeln
Eingabe von beliebig komplexen Termen, gruppierung von Termen mithilfe von Klammern
Richtige Präzedenz der Operatoren
Kompilierbar und Ausführbar auf Linux und Windows
Eingabe und Ausgabe in mehreren Zahlenformaten (zumindest: Binär, Oktal, Dezimal und Hexadezimal)
Wenn er nur "ein bisschen Basic" kann ist das schon schwer.
Mal sehen...
Punkt 1: kein Problem. für Wurzeln muss man halt die Formel zu Berechnung raussuchen.
Punkt 2 & 3: wird schon etwas komplizierter...
Punkt 4: sollte kein Problem sein, hängt jedoch von Punkt 2 & 3 ab.
Punkt 5: ist auch nicht sonderlich schwierig. Binär muss man halt berechnen (oder geht das auch mit printf?)

Nur so nebenbei: "Windows und Linux" Muss man bei Programmen für MacOS auch irgendwas beachten, etwas was es dort nicht gibt (wie conio und Linux)? Würd mich mal nur so interessieren...

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OS der Zunkunft

Beitrag von Xin » Di Sep 02, 2008 5:09 pm

fat-lobyte hat geschrieben:Schreib einen vermeintlich einfachen (Taschen-) Rechner, der folgende Bedingungen Erfüllt:
Standardaufgabe für alle, die bei mir programmieren lernten, frag' mal redliner. Der durfte das in schicken GTK+ machen ;-)

Wozu sollte er einen Parser brauchen? Das ist mit Parametern doch alles schon Kleinkram:

$ calc 4 + 5 * 3

Ich erzähle ja nicht umsonst immer, dass ich von scanf() nix halte und die Anfänger sich die Parameter ansehen sollen ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: OS der Zunkunft

Beitrag von fat-lobyte » Di Sep 02, 2008 5:17 pm

dani93 hat geschrieben:Punkt 1: kein Problem. für Wurzeln muss man halt die Formel zu Berechnung raussuchen.
Ach tatsächlich? Und wie würdest du einen Algorthus implementieren, der die 23. Wurzel aus einer Zahl zieht?
dani93 hat geschrieben:Punkt 2 & 3: wird schon etwas komplizierter...
Das wird nicht "etwas komplizierter", sondern das ist der Knackpunkt des ganzen. Wer das geschafft hat, der hat viele wichtige mathematische und programmiertechnische Konzepte begriffen. Das kann kein Anfänger einfach so.
dani93 hat geschrieben:Punkt 5: ist auch nicht sonderlich schwierig. Binär muss man halt berechnen (oder geht das auch mit printf?)
Selbst hier muss man sich einige gedanken machen - Allerdings ist es ein recht guter einstiegspunkt, denn das ist mit einigem Nachdenken bereits lösbar.
dani93 hat geschrieben:Nur so nebenbei: "Windows und Linux" Muss man bei Programmen für MacOS auch irgendwas beachten, etwas was es dort nicht gibt (wie conio und Linux)? Würd mich mal nur so interessieren...
MacOS hat große Ähnlichkeiten mit Linux: denn es ist ein UNIX basiertes, POSIX konformes betriebssystem, dass ebenfalls den gcc (oder einen Branch dessen) als Hauptcompiler verwendet. Allerdings habe ich gelesen, dass es bei verschiedenen bibliotheken doch das eine oder andere Problem geben könnte.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: OS der Zunkunft

Beitrag von fat-lobyte » Di Sep 02, 2008 5:21 pm

Xin hat geschrieben:Wozu sollte er einen Parser brauchen? Das ist mit Parametern doch alles schon Kleinkram:

$ calc 4 + 5 * 3

Ich erzähle ja nicht umsonst immer, dass ich von scanf() nix halte und die Anfänger sich die Parameter ansehen sollen ^^
Was hälst du von: calc 0x123+ radix(0x194, 7) / 7^(2*3))

Wie würdest du das lösen?
Haters gonna hate, potatoes gonna potate.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: OS der Zunkunft

Beitrag von nufan » Di Sep 02, 2008 5:39 pm

fat-lobyte hat geschrieben:Ach tatsächlich? Und wie würdest du einen Algorthus implementieren, der die 23. Wurzel aus einer Zahl zieht?
Ok, an das hab ich nicht gedacht.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: OS der Zunkunft

Beitrag von nufan » Di Sep 02, 2008 5:50 pm

fat-lobyte hat geschrieben:Was hälst du von: calc 0x123+ radix(0x194, 7) / 7^(2*3))

Wie würdest du das lösen?
Da wären wir wieder, wo wir vorher waren: Man kann nichts lösen, dass man nicht versteht (ich jedenfalls nicht). 0x deutet auf Hexadezimal hin, radix ist wahrscheinlich irgendeine mathematische Funktion. Das kann man jetzt leicht sagen, aber dazu ein Programm zu schreiben ist schon etwas ganz anderes...

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OS der Zunkunft

Beitrag von Xin » Di Sep 02, 2008 7:39 pm

fat-lobyte hat geschrieben:
Xin hat geschrieben:Wozu sollte er einen Parser brauchen? Das ist mit Parametern doch alles schon Kleinkram:

$ calc 4 + 5 * 3

Ich erzähle ja nicht umsonst immer, dass ich von scanf() nix halte und die Anfänger sich die Parameter ansehen sollen ^^
Was hälst du von: calc 0x123+ radix(0x194, 7) / 7^(2*3))

Wie würdest du das lösen?
Hmm... so:

Code: Alles auswählen

echo "print 0x123 + radix( 0x194, 7 ) / pow( 7, 2*3 );" > calc.g; gc -r calc.g
Okay, ich gebe zu, meine MatheLibs können quasi gar nix, aber ich habe die notwendigen Mathebücher da. Dort würde ich nachschlagen für radix.
Das eigentliche Problem, also die Beachtung der Prioritäten der Operatoren oder die Funktionsaufrufe funktionieren.

Geht ein Compiler als Taschenrechner durch?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: OS der Zunkunft

Beitrag von fat-lobyte » Di Sep 02, 2008 7:45 pm

Xin hat geschrieben:Okay, ich gebe zu, meine MatheLibs können quasi gar nix, aber ich habe die notwendigen Mathebücher da. Dort würde ich nachschlagen für radix.
Das war eigentlich nur Pseudocode, und den begriff "radix" habe ich als Umkehrfunktion für "pow" verwendet. Also z.B. die dritte Wurzel aus 8. Keine ahnung, wie das in echt heißt, aber sqrt ist eben nur "sqare root", also die zweite wurzel.
Xin hat geschrieben:Das eigentliche Problem, also die Beachtung der Prioritäten der Operatoren oder die Funktionsaufrufe funktionieren.
Genau das meinte ich - und dafür bräuchte man einen Parsergenerator, der einen "Ausdrucksbaum" erstellt, und somit die einzelnen ausdrücke berechnen kann.
Xin hat geschrieben:Geht ein Compiler als Taschenrechner durch?
Nachdem was ich gerade geschrieben habe würde ich sagen, ja, ein Compiler geht ganz sicher als Taschenrechner durch, denn zur kompilierzeit werden (oder sollten) alle ausdrücke die noch so kompliziert sind (aber nur Konstanten enthalten) berechnet werden.
Haters gonna hate, potatoes gonna potate.

jan040793
Beiträge: 19
Registriert: Mi Jul 09, 2008 8:20 am
Wohnort: Schleswig-Holstein
Kontaktdaten:

Re: OS der Zunkunft

Beitrag von jan040793 » Di Sep 02, 2008 8:05 pm

Die Umkehrung von Exponentialfunktionen sind Logaritmen ^^

Als ich versucht habe einen Taschenrechner zu programmieren bin ich irgendwo bei der Parameter-Übergabe angeeckt. Dann bin ich zu dem Schluss gekommen, dass ich wohl doch besser vorher ein Objekt daraus gemacht hätte und habe das Teil dann halb fertig liegen lassen ^^

Antworten