PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ist C die richtige Sprache für dieses Problem?



dvdjimmy
18-04-2006, 07:34
Hallo,

ich hätte gerne einmal eure Meinung zu folgendem Programmierproblem gehört.

Ich habe eine Textdatei mit ca. 18000 Zeilen oder größer, welche in einer bestimmten Syntax 9 Zahlen immer über 2 Zeilen verteilt. Die ersten 9 Zahlen, welche zusammengehören, sind also Zeile1 und Zeile2. Die nächsten Zeile 3,4 usw..

Zunächst will ich die zusammengehörigen 9 Zahlen in eine Array-Zeile schreiben. Dazu brauche ich also 9 Spalten. Da ich zu Beginn nicht genau weiß, wieviele Zeilen ich in der Datei habe, sollte das Array dynamisch erweitert werden können und nicht bereits bei der Programmerstellung eine feste Größe haben.

Nun will ich diese Zahlen als 3D Plot darstellen. Also beispielsweise die ersten 3 Spalten einer Zeile entsprechen X,Y,Z und ich will daraus einen Plot machen um ungefähr zu sehen ob mein Eingabefile passt.

Anschliessend will ich mit den Zahlen ein klein wenig rechnen. Also Spalte 6 mit 1 oder 2 multiplizieren, nichts wirklich aufregendes.

Ist das abgeschlossen, sollen die neuen berechneten Zahlenwerte in einer bestimmten Syntax in ein Ausgabefile geschrieben werden.

Den Teil bis hierher habe ich aktuell in Matlab realisiert. Ist leider sehr langsam weswegen ich hier eine andere Lösung suche.

Der folgende Teil ist jetzt ein wenig kniffliger.

Ich habe zwei Maschinen. Eine davon kann ich über eine API ansteuern und ihr Punkte aus meinem File über die Api schicken, welche sie dann anfährt. Die zweite Maschine ist ein Roboter, welcher in einer Robotersprache programmiert wird. Hier muss zunächst ein DDCMP Protokoll implementiert werden um Daten zwischen Steuerpc und Roboter auszutauschen. Zunächst steht jetzt also die Programmierung eines Protokolls an......Davor habe ich am meisten Bammel, da ich so etwas noch nie gemacht habe.

Steht das Protokoll, wird der Ablauf wie folgt aussehen: Der Roboter fährt zu einem Punkt, welcher auch in dem Array ist, welches wir ganz zu Beginn in die Ausgabedatei geschrieben haben. Gleichzeitig sendet er die Zeilenposition also in welcher Zeile der Punkt ist (zeile 1 oder zeile 5000) an den Steuerrechner. Der sucht die Zeile und schickt über die Api an die andere MASCHINE einen veränderten Punkt. sobald die andere Maschine den Punkt erreicht hat, sendet sie ein Signal und der Roboter kann den nächsten Punkt anfahren.

So ist meine Idee. Leider habe ich keine Ahnung in welcher Programmiersprache ich so etwas entwickeln soll. Aktuell nehme ich wie gesagt Matlab. Leider ist das zum einschlafen langsam und irgendwann brauche ich dann ja auch eine standalone version davon. Perl war auch noch eine Idee von mir, aber da bin ich mir bezüglich des API-Zugriffs auf die maschine nicht so sicher ob das funktioniert. Ansonsten habe ich geringe C-Kenntnisse und würde es dann über C probieren.

Vielen Dank schon einmal für eure Beiträge.

Grüße,

dvdjimmy

quinte17
18-04-2006, 09:00
also grundsätzlich kann man sagen, dass C für alles die richtige sprache ist :P
naja spaß beiseite.
des datengewurschtl kannst in C schon recht schnell machen, und dynamische speicherverwaltung sowieso.

die schnittstelle sollte mit C auf alle fälle auch recht "einfach" machbar sein.

das einzige was mir kopfzerbrechen bereitet ist die grafische darstellung. da bist du glaub ich in anderen sprachen besser aufgehoben, weil in C sehr viel zeugs noch rum muss. (außer du hast schon erfahrungen in gui programmierung unter C).
wenn er allerdings "nur" eine bitmap erzeugen soll, die du dann mit einem anderen programm anschaust, dann ist dies in C wieder relativ einfach und schnell.

greetz

Andi_Rostock
18-04-2006, 09:40
Nimm doch C zum Datengewurschtl und gnuplot zum plotten. Da gibt´s auch ne Schnittstelle zu C.

dvdjimmy
18-04-2006, 10:12
Hallo,

erstmal vielen Dank für die Infos. Das plotten der Punkte dient nur dazu, dass ich zumindest eine Vorstellung habe, ob die Koordinaten stimmen können.

GNUPlot sollte mir hier also gut reichen.

Ist es denn nach Fertigstellung des Programms sehr schwer, mit Visual C++ den Code zu verwenden und so eine Oberfläche aufzubauen? Oder muss ich da dann alles in c++ programmiert werden?

Perl ist wohl hier nicht wirklich euer Favorit, oder :)

Viele Grüße,

Joachim

quinte17
18-04-2006, 10:25
also in vc++ kannst du ja auch C verwenden (soweit ich des in erinnerung habe)

oder du machst eine cli für den C teil, und nur die GUI in vc++, welches dann die parameter für des C teil setzt.

somit kannst du dich dann erstmal auf die funktionalität konzentrieren, und in c++ kannst du dich dann aufs aussehen stürzen

greetz

Caveman
18-04-2006, 10:28
Auf den ersten Blick hätte ich gesagt, nimm doch Perl.
Ich befürchte aber, dass Du da Probleme mit der Geschwindigkeit bekommen könntest.

quinte17
18-04-2006, 11:47
grundsätzlich wäre perl bestimmt nicht die schlechteste wahl.
des ist ja immerhin darauf ausgelegt strings zu manipulieren. müsste eigentlich auch recht schnell zu schreiben sein.

greetz

dvdjimmy
18-04-2006, 13:47
ich denke, ich werde das Ganze jetzt mit c angehen und anschliessend die Oberfläche bei Bedarf mit Visual C++ dazubauen.

Ich hoffe ich kann mich bei Problemen an euch wenden, da es für euch wohl nicht so das Problem darstellen sollte :)

Vielen Dank für eure Beiträge.

Gruß,

Joachim

locus vivendi
18-04-2006, 14:43
ich denke, ich werde das Ganze jetzt mit c angehen und anschliessend die Oberfläche bei Bedarf mit Visual C++ dazubauen.
Du kannst übrigens auch mit C++ in einem Stil programmieren, der einem C-artigen Stil sehr ähnlich ist. Wäre vielleicht eine Überlegung wert, weil du dann nicht mit C und C++ Compilern herumhantieren musst.

dvdjimmy
19-04-2006, 11:24
Hmm,

wie funktioniert das, dass ich c in c++ programmiere. Zur Information: ich kann wirklich nur c und kein c++ und das leider auch nicht besonders gut :(

Viele Grüße,

Joachim

peschmae
19-04-2006, 12:49
Nun, das ist Grundsätzlich kein Problem. Du programmierst einfach wie immer und lässt das ganze von einem C++ statt von einem C-Compiler kompilieren.

Der C++-Compiler sieht gewisse Details etwas strenger oder anders als der C-Compiler (aber wenn du nicht wirklich gut C kannst wirst du das erst mal gar nicht merken). Der Vorteil: Wenn du nachher z.B. mit C++ ne GUI dazu basteln willst kompiliert der C++-Compiler dein Programm erst schon mal problemlos.

MfG Peschmä

panzi
20-04-2006, 01:32
Ich würde trotzdem C++ bevorzugen. Denn z.B. das mit dem "dynamischen array" schreit gerade zu nach einem std:vector. Da brauchst du dich selber net um das Speicherhandling kümmern, das macht für die STL (standard template library, bzw. halt die std::vector Klasse).

Und in C++ kannst du alles machen was du in C machen kannst. Du kannst ein C Programm (wenn es nicht ganz spezielle Konstrukte beinhaltet) ganz einfach mit einen C++ Kompiler kompelieren. D.h. C++ ist C kompatiebel. (naja, net zu 100%, aber das sind eben ganz spezielle Spezialfälle, in denen es nicht kompatiebel ist.)

Und programmier das Ding halt als library (.so bzw. .dll). Danach kannst du es in jedem C++ Programm verwenden.