Autor Beitrag
Mr. Fussel
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 05.09.13 23:57 
Hi,

ich bin der Neue hier :)
hier ein paar Worte vorab:
Habe im Studium C-Programmierung gelernt und versuche mich nun an den typischen Point & Click Adventures, auch Windowsapp genannt^^
Kurz gesagt: ich habe Fragen, viele Fragen...hehehe

Aber erst mal eine vielleicht mehr oder doch weniger schwierige Frage die mich dennoch in den Wahnsinn treibt:
Z.Zt schreibe ich mir ein Programm zum lernen von QM das mir zufallsausgesuchte Fragen aus einer Reihe vorher eingegebener strings ausgibt, quasi wie digitale Karteikarten. Funktioniert auch wunderbar, das Problem ist das was es aber ausgeben soll: Nämlich, wie ihr der Beschreibung ggfl. schon entnehmen konntet mathematische und physikalische Formeln.
Dabei ist mir leider nicht mit der Windows Zeichentabelle geholfen. (Als braver Forennutzer habe ich schon die Sufu bemüht ;) )
Grade die Physik hat unglaublich viele, wie ich selber manchmal finde sehr lustige Symbole, aber vorallem die Kombination in Formeln sprengt jeden Rahmen der Möglichkeiten der Zeichentabelle. Hier ein noch sehr einfaches (jaja, ich meine jetzt nicht die Physik dahinter sondern nur das Formelbild) Beispiel:
...
hmmm
...
eigentlich wollte ich hier jetzt ein Bild einfügen....
...
bin wohl zu blöd die Funktion zu finden
...
na, dann muss es halt ein Wikilink tun:
de.wikipedia.org/wik...or_(Quantenmechanik)
Wie gesagt, lasst euch nicht von der Physik abschrecken. Meine Frage ist nur wie ich alle diese Formeln die ihr dort sehen könnt in einer Windows Form ausgeben kann. Derzeit sieht meine Basisprogrammierung (stark verkürzt) so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
using System;
using System.Windows.Forms;
using System.Drawing;

public class Frames01 : Form 
{
    private Label infoLabel;
    const int RndNr;
    ...
    public Frames01() 
  {
    this.Text = "Quicky Zufallsabfrage";  
    this.Size = new Size(600400);  
                ...
                infoLabel = new Label();
    ...
    //infoLabel.Text = Frage[RndNr]; (Kommentar weil durch Zufallsgenerator festgelegt)
...

So, nachdem ihr alten Programmierhasen erstmal über meine stolprigen Anfangsversuche gelacht habt (aber mein Code funktioniert hehe), wer kann/mag mit helfen wie ich alle die in dem Link (und noch sehr viel mehr Zeichen) in einem Label, oder von mir aus auch in einer anderen Form (außer dem Einfügen von Bildern) ausgeben kann?
Gibt es vllt. Pakete die die LaTeX Syntax in C# importieren? Oder ein eigenes Paket? Gibt es spezielle Labels? Hilfe? Erdbeere?

Und vllt. noch eine zweite Frage, falls ihr noch Lust habt :)
Wie kann ich einzelne Codesegmente in zB einer externen Datei auslagern, zum Beispiel Befehlszeilen wie zB die Einstelungen this.etc um das Basisprogramm zu verkürzen und übersichtlicher zu halten (Denn wozu muss ich in der Hauptroutine die einmal Festgelegten Parameter irgendwelcher unbedeutender Programmsegmente lesen). Kann ich die über Header wie ich es in C gewohnt bin einlesen und verarbeiten?

Liebe Grüße und besten Dank für eure Hilfe
Mr. Fussel

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 06.09.13 09:51 
Hallo und :welcome:

die Formeln wirst du wohl nur exakt so in WinForms darstellen können, wenn man sie selber zeichnet (denn die Standardausgabe von Text ist nun mal zeilenorientiert - und da hilft dann wohl auch kein spezieller Zeichensatz, z.B. für Brüche oder Wurzelausdrücke), s. Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox), d.h. die Methoden der Klasse Graphics.

In welcher Form liegen denn die Formeln bei dir vor? Als String? Dann könnte dir evtl. mein Parser für mathematische Formeln helfen, um die Formelteile zu extrahieren und dann daraus dann eine Grafik zu erzeugen (auch wenn das sicherlich ein schwieriges Unternehmen sein wird!).

Und zu deiner 2. Frage: das ist die normale Komposition, d.h. du erzeugst eine Klasse in einer anderen Datei und erzeugst dann eine Instanz davon als Klassenmember in deiner Hauptklasse (evtl. den namespace beachten, d.h. mittels using [path of namespace] einbinden).

Du solltest dir vllt. zum Lernen von C# (und WinForms) erst einmal ein einfacheres Projekt suchen (denn mit C Denkweise wirst du hier nicht weit kommen). Hast du denn ein C#-Buch?
MeierZwoo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: Fr 06.09.13 13:55 
Wie der Vorredner schon sagte:

In vielen Fällen ist es sinnvoll, math. Ausdrücke per Grafik einzubinden und darzustellen, z.B.:

user defined image

In diesem Fall sind die Grafiken als (png-)Ressource eingebunden, extern als Datei(en) ist natürlich auch möglich.

Mich hat bei normaler Schreibweise schon gestört, daß z.B. ein x³ [x hoch 3] in normaler Schrift kaum zu lesen ist.

Die Entscheidung, Grafiken zu benutzen oder math. Ausdrücke durch zeichnen und schreiben darzustellen, liegt an der speziellen Anwendung.
Mr. Fussel Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 06.09.13 17:27 
Danke für die raschen Antworten,

auch wenn sie mich wirklich glücklich machen....hatte sowas aber schon befürchtet.

Die Formeln liegen bei mir nicht wirklich vor und es liegt ja auch in der Natur der Sache dass sich soetwas ständig ändert. Arbeiten schreibe ich normalerweise in LateX, d.h. die Formeln kann ich als pdf, jpg, ps, tex,.... darstellen. Da ich das Programm aber noch dieses Wochenende fertig haben möchte wirds dann wohl doch über Darstellen von png`s gehen.
Dein Parser für mathematische Formeln ist zwar sehr nett, nur hilft mir der bei diesem Vorhaben leider gar nicht, da die Formeln voller physikalischer Sonderseichen, Sitchwort Dirac-Formalismus, sind. Mein Ziel ist es halt nur ein Lernprogramm zu schreiben das mir beim Auswendiglernen Grundlegender Beweise und Ausdrücke hilft, mehr nicht.

Danke für den Tip mit dem einfacheren Projekt, klappt aber soweit ganz gut. Das Grundgerüst steht schon und funktoniert auch. Es wählt über

Random Rnd = new Random();
RandNr = Rnd.Next(NbrQ);

per Knopfdruck eine Zahl zwischen 0 und const int NbrQ aus (hab das in dem kleinen Teil oben vertauscht, war spät und habs so hingetippt :) )
NbrQ ist dabei das Stringarray in welchem die Fragen abgelegt sind mit:

string[] Frage = new string[NbrQ]{...};

welche dann ausgegeben wird. Wird die Frage dann richtig beantwortet (Bestätigung über nächsten Button) setzt das Prog eine Flag in einem int array Qstans, jenachdem welche Frage richtig beantwortet wurde, zb die 8te dann: Qstans[7]=1;, natürlich wurden vorher alle Null gesetzt. Bei falscher Antwort bleibt die Flag auf 0.
Bei jeder neuen Ziehung gleicht das Prog nun die Flags ab und sollte die Gleiche Zahl schon gesetzt sein, also if(Qstans[RndNr]==1){ ziehe erneut...}. So kann ich sicherstellen dass alle Fragen gleich oft drankommen, bzw am Ende nur noch die Übrig bleiben die ich nicht beantworten konnte.
Fand das eigentlich recht einfach zu schreiben. Die Syntax ist etwas anders als in C und der Aufbau von Fenstern und das Nutzen des Eventmanagers (oder wie das Ding heißt) ist zwar Neuland für mich aber so wild finde ich das jetzt nicht ;) , ist eigentlich sogar einfacher als C. Nur mit C alleine kann man heute keinen Blumentopf mehr gewinnen :(
Ich denke auch nicht das ich mir ein C# Buch holen werde, die msn Seite erklärt alles wunderbar und im Netz findet man auch schöne Tutorials. Für meine Zwecke denke ich reicht das und wenn ich mal nicht weiter komme kenne ich ja schon jemanden der ein Buch hat ;)
Sicherlich wird man da noch viel dran verbessern können, so habe ich zB noch nichts zur Speicherallokierung gefunden, nur Hinweise auf die Nutzung von irgendwas.Dispose (ob das das gleiche ist?), aber das werde ich auch noch rausfinden^^

Zuerst werde ich mir aber mal deinen Hinweis mit namespace und using[...] vorknöpfen und beim nächsten Projekt mal ausprobieren. Denn wenn ich zB einen Eventzweig (oder wie man das nennt) abgeschlossen habe muss ich ja beim schreiben weiterer Routinen nicht immer darüber scrollen...obwohl npp schon diese schöne Klammer-Schrumpf-Funktion hat, finde das nur so irritieren wenn auf Zeile 218 die Zeile 487 folgt...??? und ggfl. kann man Teilroutinen ja in anderen Programmen wiederverwerten statt neu zu schreiben, bin halt faul ^^

So, aber jetzt kommen erst noch ein paar kosmetische Veränderungen dran und anschließend wollen rund 50 Formeln getecht und eingebunden werden.

Für die Tips und den coolen Hinweis mit namespace
ein fettes

Danke