Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Taschenrechner mit natürlicher Eingabe (https://www.delphipraxis.net/171220-taschenrechner-mit-natuerlicher-eingabe.html)

Chronm 26. Okt 2012 13:27

Taschenrechner mit natürlicher Eingabe
 
Hallo Community,
ich möchte mir einen Taschenrechner programmieren, der die vom Benutzer eingegebenen Daten natürlich darstellt, also nicht sqrt(...) sondern das Wurzelzeichen mit ... . Bei der Google-Suche bekomme ich nur Kaufangebote zu Taschenrechnern.
Ich würde das mit Images lösen, auf denen die Rechnung dann aufgezeichnet wird, allerdings habe ich noch keine Idee wie ich das realisieren könnte. Habt ihr vielleicht Ideen?
Mein Vorgängerrechner läuft schon so, dass man nciht z.B. 1+1 rechnet und dann erst durch 2 teilt, sondern dass man direkt (1+1)/2 eingeben kann. Das soll dann nur noch schön grafisch dargestellt werden.

Viele Grüße
Chronm

mkinzler 26. Okt 2012 13:59

AW: Taschenrechner mit natürlicher Eingabe
 
Hier im Forum suchenTaschenrechner

p80286 26. Okt 2012 14:01

AW: Taschenrechner mit natürlicher Eingabe
 
such doch mal nach Hier im Forum suchenformel parser da sollte einiges bei herum kommen.

Gruß
K-H

blondervolker 26. Okt 2012 14:42

AW: Taschenrechner mit natürlicher Eingabe
 
Hallo,

hab da`ne Idee...:lol::lol::lol:

Delphi-Quellcode:
// in uses ... ShellApi

var
Exe: string;
begin
ShellExecute(Application.Handle,'open','calc.exe',nil,nil,SW_SHOW);
Man spart sich eine Menge Arbeit...:-D:-D:-D

mkinzler 26. Okt 2012 14:51

AW: Taschenrechner mit natürlicher Eingabe
 
Quellcode für eine Textverarbeitung:
Delphi-Quellcode:
// in uses ... ShellApi

var
Exe: string;
begin
ShellExecute(Application.Handle,'open','winword.exe',nil,nil,SW_SHOW);
:stupid:

franktron 26. Okt 2012 15:15

AW: Taschenrechner mit natürlicher Eingabe
 
Zitat:

Zitat von mkinzler (Beitrag 1188509)
Quellcode für eine Textverarbeitung:
Delphi-Quellcode:
// in uses ... ShellApi

var
Exe: string;
begin
ShellExecute(Application.Handle,'open','winword.exe',nil,nil,SW_SHOW);
:stupid:

Error winword.exe nicht gefunden :twisted:

blondervolker 26. Okt 2012 15:37

AW: Taschenrechner mit natürlicher Eingabe
 
Da isse weg, die "die.exe":shock:

DeddyH 26. Okt 2012 15:40

AW: Taschenrechner mit natürlicher Eingabe
 
Könnten wir wieder zum Thema zurückkehren? :roll:

Chronm 26. Okt 2012 16:01

AW: Taschenrechner mit natürlicher Eingabe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also einen Parser habe ich schon, aber bei zu langen Eingaben hat man irgendwann einfach keinen Überblick mehr (meiner Meinung nach). Also will ich die Eingabe des Benutzers grafisch darstellen, in etwa wie im Bild.

p80286 26. Okt 2012 16:14

AW: Taschenrechner mit natürlicher Eingabe
 
Na wenn Du den Parser hast, mußt Du Dich nur noch für die Methode der Darstellung entscheiden (GDI, OpenGL......) und Du kannst loslegen.
(und weil mir das zu fummelig war, hab ich nie nen "Taschenrechner" geschrieben. mir reicht mein TI60 )

Gruß
K-H

implementation 26. Okt 2012 18:42

AW: Taschenrechner mit natürlicher Eingabe
 
Wie arbeitet dein Parser? Baut er einen Baum auf? Dann koenntest du dir ueberlegen, einfach den Zeichenkontext (das Bitmap, Zeichenkoordinaten und evtl. noch Schriftgroesse (Exponenten kleiner)) durchzureichen und jeden Knoten sich selbst zeichnen zu lassen.
Wuerde ich in zwei Methoden aufteilen: Eine, die die Groesse des benoetigten Zeichenbereiches zurueckgibt und eine, die tatsaechlich zeichnet.

In Pseudocode koennte die Additions-Zeichen-Methode z.B. so aussehen:
Code:
Additionsknoten::zeichne(ACanvas: TCanvas, AStartpunkt: Koordinate, ASchriftgroesse: Zahl)
{
  ErsterBereich: Rechteck := ErsterUnterbaum->zeichen_groesse(ASchriftgroesse);
  ZweiterBereich: Rechteck := ZweiterUnterbaum->zeichen_groesse(ASchriftgroesse);
  OperatorBereich: Rechteck := ermittle_text_groesse("+", ASchriftgroesse);
  ErsterBereich->zeichne(ACanvas, AStartpunkt, ASchriftgroesse);
  AStartpunkt->verschiebe(ErsterBereich->X, 0);
  Canvas->zeichne_text("+", ASchriftgroesse, AStartpunkt);
  AStartpunkt->verschiebe(OperatorBereich->X, 0);
  ZweiterBereich->zeichne(ACanvas, AStartpunkt, ASchriftgroesse);
}
Bei Zahlen-Knoten musst du eben nur die enthaltene Zahl zeichnen, bei Bruch-Knoten musst du Bruchstriche zeichnen etc., aber alles nach gleichem Schema.

Chronm 26. Okt 2012 19:06

AW: Taschenrechner mit natürlicher Eingabe
 
@Implementation:
ich bin mir nicht ganz sicher ob ich dich richtig verstanden habe. Meinst du das so? http://www.delphipraxis.net/832386-post2.html. Wenn nicht bitte berichtigen :-D:-D
Das wäre zur Not eine Alternative gewesen, lieber wäre mir das wie im Bild.

sx2008 26. Okt 2012 19:46

AW: Taschenrechner mit natürlicher Eingabe
 
Zitat:

Zitat von Chronm (Beitrag 1188491)
der die vom Benutzer eingegebenen Daten natürlich darstellt, also nicht sqrt(...) sondern das Wurzelzeichen

Also darstellen wäre wohl schon noch möglich.
Hier wäre z.B. LaTex zu nennen, das Formeln grafisch so aufbereiten kann dass man es in mathematischen Büchern gebrauchen kann.
Hier ne kleine Übersicht wie das aussieht: http://www.hosi.de/latex/mathe.htm

Schon allein dieser Sourcecode, der aus einem LaTex-Dokument einen grafischen Output erzeugt ist schon ziemlich hardcore.

Noch schwieriger wäre ein Editor, der die Formel in der für Mathematiker geläufigen Form anzeigt und ein direktes Ändern erlaubt.

Sagen wir mal es würde eine Formel in dieser Schreibweise vorliegen:
Code:
y = (sin(x)/x) ^ 2
Mit einigem Aufwand wäre es vielleicht möglich, diesen String in ein LaTex-Format zu überführen; aber das wird nicht einfach.

implementation 26. Okt 2012 19:55

AW: Taschenrechner mit natürlicher Eingabe
 
Zitat:

Zitat von Chronm (Beitrag 1188559)
@Implementation:
ich bin mir nicht ganz sicher ob ich dich richtig verstanden habe. Meinst du das so? http://www.delphipraxis.net/832386-post2.html. Wenn nicht bitte berichtigen :-D:-D
Das wäre zur Not eine Alternative gewesen, lieber wäre mir das wie im Bild.

Nein, das meine ich nicht. Die interne Darstellung (wie der Ausdruck im Speicher liegt) soll eine Baumstruktur sein, und mithilfe dieser zeichnest du dann dein gewuenschtes Bild (rekursiv) ;)

Zitat:

Zitat von sx2008
Mit einigem Aufwand wäre es vielleicht möglich, diesen String in ein LaTex-Format zu überführen; aber das wird nicht einfach.

Wenn man schonmal eine Baumstruktur hat, ist auch das ganz schnell umzusetzen. Ohne ist das natuerlich eine harte Sache.

Chronm 26. Okt 2012 23:48

AW: Taschenrechner mit natürlicher Eingabe
 
Also das mit LaTeX geht auf jeden Fall in die richtge Richtung, danke dafür. Ich werd mich mal damit beschäftigen, mal gucken was dabei rum kommt. Ich komme bestimmt aber nochmal auf euch zu sprechen :)

Popov 27. Okt 2012 01:52

AW: Taschenrechner mit natürlicher Eingabe
 
Also ich versuche das Ganzen evtl. aus einer neuen Richtung zu betrachten. Einen Parser zu Progen die diese geilen LaTeX Formenln, oder wie sie auch aussehen sollen, direkt interpretiert, ist wahrscheinlich keine gute Idee. Was du evtl. angehen solltest ist zuerst einen normalen Formelparser zu progen, der diese häßlichen sqrt statt Wurzelzeichen interpretiert. Hast du einen stabilen Formelparser programmiert, hast du das halbe Problem hinter dir. Der zweite Teil deines Programms wäre dann einen grafischen Formeleditor zu programmieren. Hast du das geschafft, was an für sich schon etwas Arbeit ist, programmierst du einen Parser der die grafische Formeln in in die häßliche normale Formel umsetzt, also die mit sqrt.

In dem Fall wäre das Problem zweigeteilt. Ein Programmteil das sich um die grafische Darstellung kümmert, der zweite Teil der die Berechnung durchführt.

Olli73 28. Okt 2012 11:24

AW: Taschenrechner mit natürlicher Eingabe
 
wolframalpha.com bekommt das ganz gut hin:

http://www.wolframalpha.com/input/?i...28x%29%29+^+2+

und es gibt auch eine API dafür:

http://products.wolframalpha.com/developers/

BUG 28. Okt 2012 12:41

AW: Taschenrechner mit natürlicher Eingabe
 
Also wenn es um Formeldarstellung geht, würde ich mal gucken, wie es andere Programme machen, die LaTeX interpretieren und darstellen.
Davon gibt es viele in JavaScript, aber auch in C und Java ... eine Websuche wird da genug Quellcode finden (auch unter nicht-Copyleft-Lizenzen).

Wenn es nicht so schön wie LaTeX werden soll, würde ich einfach an den Blättern deines Formelbaumes anfangen und die dort gerenderten Formeln als Boxen betrachten, die du dann in die jeweils höhere Darstellung einbaust.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz