Autor Beitrag
iGoofy
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 18.11.09 16:15 
Hallo an Alle,

ich bin neu hier und bei C#, habe auch vorher keine andere Programmiersprache gelernt.

Hoffe, das gehört hier hin?!

Kann ich in den CodeDOM-Compiler eine Formel (mit Variablen) einmalig eingeben, um dann aus z.B. ArrayLists die Werte für diese Variablen wiederholt einzutragen und auszuwerten?
Ich möchte/muss 350 Wertepaare miteinander vergleichen; das Ganze etwa 200 mal. Eine Formel (mit eingesetzten Variablen) lautet also z.B. 3*0.95>=7*1.05; meine Ergebnisse sind also immer entweder "true" oder "false".

Ich würde mein Programm hier gerne hochladen, möchte aber erst einen Weg finden, diesen ordentlich zu formatieren (hier im Forum). Folgt also bei Bedarf.

Gemacht ist das Programm im Prinzip wie in dem Beispiel (nur das in meinem Programm eben vorher noch eine .txt-Datei eingelesen/verarbeitet wird):

doko-buch.de/site/Details.aspx?book=8
dort .zip-Datei Buchbeispiele aufmachen
darin unter Kapitel_28/CodeDOM1/... (...ich hoffe, das mit dem Link geht in Ordnung so?!)

Habe das jetzt alles lauffähig, es dauert aber 52 Sekunden für einen Durchlauf (bei 200 Durchläufen ist das nicht tragbar)!

Hoffentlich kann einer von euch diesen Quatsch hier nachvollziehen! *g*

Gibt es vielleicht wesentlich simplere Lösungen (mit irgendeinem bereits existierenden Parser o.ä.)?

Vielen Dank für eure Antworten schonmal und wie gesagt: Hallo an Alle!

Torsten
iGoofy Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 18.11.09 19:37 
Ha, ich habs! Man braucht ja nur einmal zu kompilieren je Formel! Das bringt die Programmlaufzeit von 2 Stunden auf 15 Minuten!
Danke für die Hilfe, für weitere Anregungen oder gar Vereinfachungen bin ich immernoch offen!

Torsten
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 18.11.09 20:23 
Wenn es noch schneller gehen soll, wäre ein existierender/selbstgeschriebener Parser sicherlich sinnvoll, du dürftest auch genügend finden, die Ausdrücke auch kompilieren. Boolesche Ausdrücke werden aber die wenigsten können; wenn du etwas Eigenes stricken willst, könntest du beispielsweise meinen denkbar einfachen Parser als Vorlage benutzen. Mit etwas mehr Arbeit könnte man dem auch Kompilieren beibringen.

Wie sehen denn deine Formeln so aus/wie viele verschiedene sind es?

_________________
>λ=
iGoofy Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 18.11.09 21:40 
Also das Kompilieren ist nicht zwingend erforderlich ( wozu ist das eigentlich gut? ).
Ich hätte allein schon aufgrund der Lern-Meilensteine große Lust dazu, mir einen eigenen Parser zu bauen. Habe noch Probleme mit den Basics und soll sowas als erstes Projekt machen. Ist aber leider ein Projekt für die Arbeit, wo ich ein Code-Snippet und eine Aufgabenstellung vorgeworfen bekommen habe. Damit soll ich auch unbedingt arbeiten, obwohl ich die Performanceverluste bereits vermutet und angemerkt habe. Ist halt immer so eine Sache mit der Zeit, wenns nicht privat ist.
Deinen Parser (unter 100 Zeilen empfinde ich als echt gut für diese Aufgabe!) müsste man dazu ja eigentlich nur um die Vergleichsoperatoren erweitern.

Es sind etwa 100-150 Formeln, alle ähnlich der oben bereits genannten. Terme sind eigentlich alle ohne Potenzen (für Klugscheisser: ^-1, ^0 und ^1 ausgenommen), müssen also beim Einlesen im Prinzip nicht berücksichtigt werden. Interessant wäre es sicherlich, mehr als zwei Terme in einer Formel miteinander zu vergleichen.


offtopic:
Wie lange braucht man etwa, bis man halbwegs anständige Programme auf die Beine stellen kann? Mich interessieren dabei vor allem I/O-Projekte mit USB, CAN-Bus-Kommunikation, Datenbanken erstellen und verwalten (Excel/Access).
Was davon ist mit der Express-Version machbar?


Grüße

Torsten