Die Community zu .NET und Classic VB.
Menü

Calculate

 von 

Beschreibung und Download  

Calculate ist ein Taschenrechner für die Kommandozeile. Gut, unter Windows ein wenig fehl am Platze, welcher Windows-Benutzer weiß schon, was das ist, diese ominöse „Kommandozeile“. Und sowieso, bedienen kann man die auch nicht vernünftig (Tabs! Ich will Tabs!).

Aber zurück zu Calculate. Falls noch jemand außer mir tatsächlich unter Windows mit der Konsole arbeitet, dann wird derjenige vielleicht schon gemerkt haben, dass es eigentlich ziemlich anstrengend ist, diesen in seinem Funktionsumfang recht beschränkten kleinen Windows-Taschenrechner verwenden zu müssen, wenn man etwas berechnen muss. Ich könnte mich jetzt stundenlang über die mit Windows mitgelieferten Tools aufregen. Stattdessen verweise ich auf diesen kleinen Werbespot, der wahrer nicht sprechen könnte.

Aber zurück zu Calculate. Unter Linux kann man stattdessen einfach die Bash-Rechenfunktionen verwenden. Ruby-Benutzer schmeißen die irb an, Benutzer anderer Skriptsprachen verwenden halt andere Konsolentools. Unter Vista kann man in der Konsole auch recht einfach rechnen, weil dort die MSH das altbackene cmd.exe ersetzt.

Aber zurück zu Calculate! Es handelt sich um einen interaktiven Konsolen-Taschenrechner auf .NET-Basis. Der Rechner beherrscht Infix-, Präfix- und Postfixnotation. Für die meisten Benutzer ist aber wohl nur infix interessant. Der Taschenrechner wartet im wesentlichen mit drei Besonderheiten auf: Variablen, Funktionen und Listen. Der Reihe nach:

  • Variablen: Neben zwei vordefinierten Konstanten (Pi und der Eulerschen Zahl exp(1), was sonst?) kann man beliebige Variablen mit Werten belegen. Beispielsweise könnte man $pi2 definieren und ihr den Wert P * 2 geben. Natürlich kann man einer Variablen auch einen komplexen Ausdruck zuweisen, der dann einmal evaluiert und dessen Ergebnis gespeichert wird.

  • Funktionen: Will man keinen statischen Wert speichern sondern eine Berechnungsmethode, so bieten sich Funktionen ab. Beispielsweise könnte man eine Funktion log2 definieren, die den Logarithmus zur Basis 2 zurückliefert. Funktionen können beliebig viele (mindestens einen) Parameter besitzen. Außerdem können sie auch auf globale Variablen zugreifen (bei gleichem Namen überschreiben Parameter globale Variablen in einer Funktion).

  • Listen: Listen dienen dazu, mit mehreren Werten auf einmal zu rechnen. Wer sich (warum auch immer) alle Sinus-Werte von –Pi bis 3 Pi in Pi-halbe-Schritten ausgeben lassen will, der hat normalerweise ganz schön zu tippen. In Calculate gibt es zwei Arten, Wertelisten zu definieren: Einmal über Semikola (1; 3; 5) und einmal über Bereiche (1 .. 10). Letzeres würde jetzt die Zahlen von 1 bis 10 ausgeben. Wir wollen nur die ungeraden Zahlen haben? No problemo: 1 .. 10 : 2. Hier wurde die Schrittweite 2 angegeben. Zurück zu unserem Beispiel mit den Sinussen: Die Lösung lautet

    > sin(-p .. 3*p : p/2)

    Die Ausgabe wäre dann

    0       -1      0       1       0       -1      0       1       0

    Kommt, das ist schon ein wenig cool, oder?

    Übrigens können alle Rechenoperationen und alle Funktionen Bereiche übergeben bekommen. Auch selbstdefinierte Funktionen und Variablen. Folgende Eingabe trägt das noch einen Schritt weiter: Es werden die geraden Zahlen von 1 bis 10 mit den ungeraden Zahlen addiert:

    > (2 .. 10 : 2) + (1 .. 10 : 2)
    3       7       11      15      19

    Wenn eine binäre Operation auf zwei Listen ausgeführt wird, wovon eine Liste kürzer ist als die andere, so wird die kürzere Liste als zyklisch angesehen. Zum Beispiel kann man Zahlen „verdoppeln“, indem man abwechselnd 0 und 1 addiert:

    > (1 .. 10) + (1; 0)
    2       2       4       4       6       6       8       8       10      10

    Gut, ich lasse es dabei bewenden. Ihr versteht sicher, wie das funktioniert.

Der Taschenrechner kann aber noch mehr. Beispielsweise fängt er die Tastenkombination Strg+C ab und kann damit zeitintensive Berechnungen unterbrechen, was recht praktisch ist, wenn man (zu spät) merkt, dass man etwas Falsches getippt hat. Die vordefinierte Funktion ans gibt einem ein vorher berechnetes Ergebnis zurück (der Parameter der Funktion bestimmt, das wievielte Ergebnis man haben möchte). Fehlermeldungen zeigen einem nicht nur an, was man falsch eingegeben hat, sondern auch wo. Eine recht ausführliche Hilfe über die Kommandos gibt es über den Befehl :help. Für die Anzeige ist zwischen hoher und geringerer Präzision wählbar, was die Anzahl der angezeigten Nachkommastellen beeinflusst.

Das Speichern und Laden von Sessions funktioniert allerdings noch nicht. Dazu bin ich noch nicht gekommen und ich finde den Taschenrechner schon jetzt sehr verwendbar. Ich selbst verwende ihn tatsächlich am laufenden Band.

Versionshistorie

  • 1.1.2.7: Kommando clear hinzugefügt.
  • 1.1.2.6: BUG: Falsche Priorität von Präfix-Minus korrigiert.
  • 1.1.1.5: Erste Version

Projekt Calculate (calculate.zip, ca. 80 KB) 

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 24 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Felix.S am 14.06.2008 um 16:56

Gibt es das denn icht in VB6?

Kommentar von Konrad L. M. Rudolph am 26.05.2008 um 19:23

Hi Felix,

von welchen Dateien (bzw. Dateiendungen) sprichst Du denn? Das Projekt verwendet doch gar keine externen Dateien.
Und welche Eigenschaftswerte meinst Du?

Kommentar von Felix.S am 26.05.2008 um 18:35

Kann er denn keine
vernünftigen Datei-
Endungen verwenden?
Ich bin da total
verwirrt. Und wenn
ich es dann geschafft
habe, sind irgendwelche
ungültigen Eigen-
schaftswerte eingesetzt
werden.

Kommentar von Konrad L. M. Rudolph am 15.11.2007 um 21:32

> könnte mir bitte jemand erklären wie ich in ruby eine potenz berechne ohne zwei "**" zu machen??

Was spricht dagegen, es per ** zu machen? Ansonsten schreib Dir doch ne Funktion.

class Int
def power p
self ** p
end
end

Kommentar von mark am 15.11.2007 um 18:40

könnte mir bitte jemand erklären wie ich in ruby eine potenz berechne ohne zwei "**" zu machen??

Kommentar von Hans11 am 23.10.2007 um 18:25

Ich habe unten gelesen, das beim Framework auch eine VB-Code-Compiler dabei wäre.
Diese Aussage würde mich genauer interssieren.
Wo finde ich den Compiler und wie heisst er ?

Kommentar von Hans11 am 23.10.2007 um 18:24

Ich habe unten gelesen, das beim Framework auch eine VB-Code-Compiler dabei wäre.
Diese Aussage würde mich genauer interssieren.
Wo finde ich den Compiler und wie heisst er ?

Kommentar von Konrad L. M. Rudolph am 31.01.2007 um 15:59

Potenz = '**'. Also z.B. '2 ** 3'.

Prozent? Wer braucht das? ;-) Na ja, einfach / 100.

Man kann für beides natürlich auch ne Funktion basteln (oder den Quellcode entsprechend erweitern).

:def pow($x, $x) = $x ** $y
:def percent($x) = $x / 100

lg,
Konrad.

Kommentar von vbnetentwickler am 31.01.2007 um 15:06

Hi!

Spitzen Proggie! Nur eine Frage: Wie werden Potenzen berechnet? ^ geht nich, pow oder power kennt er als funktion auch nich.

Grüße,

Eric

Kommentar von Konrad L. M. Rudolph am 04.01.2007 um 13:04

Hallo,

also ich habe jetzt doch endlich mal die kompilierte Version beigefügt. Sie befindet sich im Ordner bin\Release.

An risaer:
> zu den kommentaren: weder das Programm find ich
> überflüssig (im Gegenteil) noch finde ich den Ton
> blöd. Ist eher witzig zu lesen.

Na ja, am Ton der Beschreibung wurde aber ein wenig gefeilt, ich habe da ein, zwei Sätze umformuliert, die wirklich ein wenig extrem waren.

Kommentar von risaer am 04.01.2007 um 00:00

Sehr cool - denke ich zumindest.
Kannst du aber nicht wirklich ne exe Datei draus
machen? Hab nämlich keine Ahnung, wie ich dein
Proggie ausführen (bzw. compilieren) kann.

zu den kommentaren: weder das Programm find ich
überflüssig (im Gegenteil) noch finde ich den Ton
blöd. Ist eher witzig zu lesen.

Nur weiter so :-)

Kommentar von Konrad L. M. Rudolph am 14.12.2006 um 12:49

Furion: Wenn Du kein .NET hast, kannst Du das Projekt auch nicht laufenlassen, da das .NET-Framework auch für die Exe benötigt wird. Und wenn Du das Framework hast, dann hast Du soweit ich weiß auch einen Compiler für VB-Code dabei.

Aber ich kann beim nächsten Release natürlich trotzdem gerne die Exe-Datei hinzupacken.

Kommentar von Furion am 14.12.2006 um 12:42

Hi,

kann man beim nächsten Update evtl. dem Projekt die fertig kompelierte Exe hinzupacken. Ich habe leider kein .NET aber würde diesen Rechner gerne mal ausprobieren. :-)

Gruß
Furion

Kommentar von DOS-6.22 am 06.12.2006 um 23:36

Heeey...mal langsam mit eurer Konsole-Alergie!
Als ich so jung wie ihr war, da gabs noch nischt mal Konsole, da war tippen am DOS-Prompt angesagt....hab ich übrigens heute noch bestens drauf!
Hab auf meinem Desktop ein icon für Konsoleaufruf!

Übrigens bietet Konsole den besten Dateipacker überhaupt!
Probiert mal Format C:/u aus, damit wird zB 1GB Daten auf nahezu 0 Byte gepackt....naja das Entpacken ist hierbei noch nicht implementiert:-)

Kommentar von Konrad L. M. Rudolph am 30.11.2006 um 15:16

> dann frag ich mich warum man das projekt WINDOWS und nicht
> CONSOLES nannte...

Weil Microsoft das Produkt verkaufen wollte und Fenster waren nunmal etwas neues -- die Konsole nicht (man könnte auch sagen: Namen sind Schall und Rauch). Ich finde diese ganze Diskussion auch ziemlich überflüssig -- wenn Du nicht mit der Konsole arbeiten willst, musst Du es ja nicht tun, aber versuch dann nicht zu beurteilen, wie nützlich sie ist.

Ich habe übrigens mit Calculate gerade wieder den Physik-Übungszettel gelöst. Mit einem grafischen Taschenrechner hätte ich definitiv länger gedauert. Ich kenne an der Uni auch niemanden, der für solche Übungen grafische Tools verwendet: Alle verwenden irgendwelche Konsolenanwendungen dafür.

Kommentar von Beinemann am 30.11.2006 um 12:33

dann frag ich mich warum man das projekt WINDOWS und nicht CONSOLES nannte...

Kommentar von Konrad Ludwig Moritz Rudolph am 23.11.2006 um 14:24

An Beinemann:

Ich glaube, Du hast einfach nicht verstanden, wie mächtig die Konsole ist. Ich verwende die Konsole am laufenden Band. Unter Linux arbeite ich fast nur mit der Konsole. Viele Sachen (inklusive Rechnungen ausführen) geht auf der Konsole einfach viel schneller als über grafische Oberflächen.

> das führt windows ad absurdum.

Nein. Mitarbeiter bei Microsoft selbst schreiben jede Menge Konsolenanwendungen, die sie täglich verwenden. Es war nie der Sinn einer grafischen Oberfläche, die Konsole komplett zu verdrängen.

Kommentar von Beinemann am 23.11.2006 um 09:28

nichts gegen das engagement, aber ein taschenrechner für die windowskonsole?

warum steigst du nicht direkt auf dos zurück um?

verstehe den sinn dahinter nicht. ich nutze ab udn an auch die konsole für ip ermittlung u.ä. aber damit ARBEITEN?!

das führt windows ad absurdum.

Kommentar von Konrad Ludwig Moritz Rudolph am 20.11.2006 um 14:49

Hi,

ich mische mal ein wenig mit.

An p*: Hast recht. Besser so? ;-)

An Michael: Nun, jedem das seine. Zugegeben, es gibt auch andere Möglichkeiten, schnell mal was zu berechnen. Tatsächlich verwende ich "calculate" aber in letzter Zeit mehr und mehr.

An oldmike: Mit Monad hast Du sicher recht. Leider kommt die erst für Vista, die Betaversion läuft auf aktuellen XP-Systemen nicht mehr. Leider hat Microsoft bei der MSH meiner Meinung nach auch nur halbe Arbeit geleistet. Die Scriptsprache Monad ist zwar toll aber an der "GUI" des Terminal-Emulators der MSH wurde leider überhaupt nicht gearbeitet, das ist dasselbe schwarze Fenster wie eh und je. Ist es denn wirklich so schwierig, eine gute Shell zu bauen? Ich habe doch gar keine so hohen Ansprüche. Tabs wären ja schon mal ein guter Anfang.

Kommentar von oldmike am 18.11.2006 um 22:31

Na ja, als Antwort auf die Linux Shell gibt es Monad = Power Shell. Aber dieser Calculator ist wirklich Klasse und kann sicher noch ausgebaut werden.

Kommentar von vbnetentwickler am 22.09.2006 um 20:56

Ganz genau. Nix überflüssig! Tolles Projekt!

Kommentar von philinger am 19.09.2006 um 15:52

was heißt hier überflüssig?! cool

Kommentar von Michael G am 10.09.2006 um 20:12

Überflüssig

Kommentar von p* am 27.08.2006 um 18:42

Ein bischen mehr Formalität hätte dem Artikel nicht geschadet - sprich: Der Ton in dem geschreiben wurde ist IMHO sehr duerftig...

Ansonsten gute Arbeit!