Forum: PC-Programmierung C++ für Projekt geeignet?


von Enrico S. (key-board)


Lesenswert?

Ahoi
Für meine Studienarbeit will ich einen Simulator für die 
Energieverteilung in Netzen Programmieren. Er soll in der Lage sein ich 
sag mal beliebig viele und komplexe Simulationen von 
Energieanlagen(Erzeuger, Verbraucher,...) verarbeiten zu können, wobei 
der Simulator als Plattform zu verstehen ist und die Energieanlagen 
extra programmiert werden. Zusätzlich soll die Datenauswertung sowohl 
Grafisch auf dem Rechner als auch über D I/O auf einem Externen Display 
(einfache LED's) ausgegeben werden. In "Echtzeit" soll es auf 
Veränderungen welche von außen eingegeben werden reagieren.

meine einfache Frage, weil ich bislang nur Grundkenntnisse im 
Programmieren hab und sowiso mich in eine Programmiersprache einarbeiten 
muss. Ist C++ in Verbindung mit Visual C++ dafür geeignet?

Der Simulator soll später vorrangig auf Windowsrechnern laufen.

von Salewski, Stefan (Gast)


Lesenswert?

Die Frage ist eher, ob Du für C++ geeignet bist.
Richtig C++ zu lernen ist schon etwas Aufwand. Und C++ ist nicht 
unbedingt die schönste Sprache -- aber schnell und einigermassen 
portabel. Aber unter Windows nimmt man wohl eher C#.

C++ macht schon Sinn, wenn Performance wichtig ist und man eventuell C++ 
Bibliotheken verwenden muss.

Kurz gesagt -- ich weiß es nicht.

von Jörn (Gast)


Lesenswert?

Enrico S. schrieb:
> Zusätzlich soll die Datenauswertung sowohl Grafisch auf dem Rechner

Mit Visual C und/also MFC als Klassenbibliothek bekommst du mit 
"Grundkenntnissen im Programmieren" keine brauchbare Oberfläche hin. Das 
erfordert eine Menge Erfahrung. Wenn das mit Grundkenntnissen klappen 
soll, musst du was auf .NET nehmen, also C# oder VB.NET. Ich würde C# 
nehmen.


Enrico S. schrieb:
> In "Echtzeit" soll es auf
> Veränderungen welche von außen eingegeben werden reagieren.

Mal wieder der vielgeschundene Echtzeitbegriff. Was verstehst du 
darunter? Echtzeit kann ein Bruchteil einer µS sein oder 2 Tage, das 
hängt vom Prozess ab! Wenn ich richtig interpretiere was du vor hast, 
wird ein 10 Jahre alter Aldi-PC dabei sein halbes Leben mit warten 
verbringen.

von Dieter H. (Gast)


Lesenswert?

Um das Projekt ohne nennenswerte Programmiertkentnisse durchzuziehen 
wirst du ganz schön ackern müssen, viel Spaß! Falls du etwas 
ordentliches lernen willst, dann wäre meine Empfehlung Ada2012 zu 
nehmen. Leicht zu benutzen und zu lernen - wenn man sich auf die 
Grundlegenden Features beschränkt! - und für ein solches Projekt 
passend: OOP, ordentliches Modulkonzept, Generics, Echtzeitfeatures, 
Nebenläufigkeit (tasks).
Als Bonus bekommst du einen Compiler, der dir klare Fehlermeldungen gibt 
und wenn ein Programm kompiliert, dann läuft alles in 99% der Fälle 
genau so, wie man es erwartet. Außer natürlich man baut grobe oder 
semantische Fehler ein. Dadurch hat man zwar ca. 25% mehr Schreibarbeit, 
aber spart sich ca. 60% - 80% Debugging-Zeit.

Material findest du hier http://www.adaic.org/learn/materials
Das wikibook ist recht ordentlich, ansonsten kann ich die Bücher von 
Barnes und das von Cohen empfehlen. Außerdem hat ACT diese neue Seite 
aufgezogen http://university.adacore.com/

von eddy (Gast)


Lesenswert?

Jörn schrieb:
> Mal wieder der vielgeschundene Echtzeitbegriff. Was verstehst du
> darunter? Echtzeit kann ein Bruchteil einer µS sein oder 2 Tage, das
> hängt vom Prozess ab! Wenn ich richtig interpretiere was du vor hast,
> wird ein 10 Jahre alter Aldi-PC dabei sein halbes Leben mit warten
> verbringen.

Echtzeit bedeutet lediglich, dass sich ein Programm in der Zeit-Domäne 
deterministisch verhält. Genauso wie man bestimmt, dass 3+4=7, oder auch 
8 - wenn man lustig ist - ergibt, legt man hier nun eben fest, welche 
Ergebnisse nach welcher Zeitspanne oder zu welchem Zeitpunkt zustande 
gekommen sein sollen. Von daher kann auch vorgegeben werden, wielange 
ein Programm für eine Berechnung brauchen soll. "Echtzeit" umfasst also 
mehr als du denkst. Ergo: jokes on you

von Jan H. (j_hansen)


Lesenswert?

eddy schrieb:
> Jörn schrieb:
> Ergo: jokes on you

Genau das hat er ja geschrieben und deshalb nachgefragt.

Aber vielleicht habe ich auch den Kontext, in dem du "Joke's on you" 
verwendet hast falsch verstanden.

von Max (Gast)


Lesenswert?

eddy schrieb:
> Echtzeit bedeutet lediglich, dass sich ein Programm in der Zeit-Domäne
> deterministisch verhält.

Ist mir total neu, dass echtzeitfähig was mit Determinismus zu tun hat.


Enrico S. schrieb:
> Ist C++ in Verbindung mit Visual C++ dafür geeignet?

Wie schon erwähnt wurde lernt man C++ nicht gerade mal innerhalb ein 
paar Wochen, das macht man generell mit keiner Sprache. Ich würde dir 
auch zu den .Net Sprachen raten. Mit VB.Net kannst du GUIs recht schnell 
und relativ einfach zusammenbauen. Das nutze ich immer noch wenn ich mal 
ne GUI für ein Projekt mit einem Controller brauche.
Ansonsten freunde ich mich immer mehr mit Qt an aber dafür solltest du 
halkt C++ können.
Python kann man auch noch relativ schnell lernen und da gibt es auch 
Addons für GUIs aber damit habe ich keine Erfahrung.

von benwilliam (Gast)


Lesenswert?

wenn es für windows ist, definitiv C#
wenn es platform unabhängig ist würde ich es immernoch eher mit Java 
probieren

von Enrico S. (key-board)


Lesenswert?

Ahoi
Danke schonmal für eure Tipps die Programmiersprache und Umgebung 
betreffend.
Ich werd mich da auf jeden fall kundig machen.
Bevor ihr euch wegen dem "Echtzeit" begriff zerfleischt.
Ich meinte damit eigentlich nur, dass die Reaktion auf die Aktion nicht 
unendlich lange auf sich warten lässt sondern innerhalb weniger Sekunden 
die Auswirkungen des Handelns sichtbar werden.
Ich weiß dass ich den Begriff nicht korreckt nach Definition benutzt 
habe deshalb die "".

Dass der Simulator nicht viel Rechenzeit benötigt hoffe ich, da er ja 
"nur" als Vermittler zwischen den Daten fungieren soll und als erster 
Schritt bzw Baustein für die Gesamte Simulation verstanden werden soll.

Ich denke das alle Weiteren Modelle der Energiesysteme aufwendig genug 
sein werden, und genügend Rechenzeit brauchen werden.

von Udo S. (urschmitt)


Lesenswert?

Dieter H. schrieb:
> Falls du etwas
> ordentliches lernen willst, dann wäre meine Empfehlung Ada2012 zu
> nehmen.

Prust, frei nach dem Motto: "Nicht für das Leben, für die Tonne lernen 
wir"

Wie kannst du dem Armen eine Programmiersprache empfehlen, die so tot 
ist?
Für die Studienarbeit eine doch recht komplexe Simulation entwickeln und 
sich zusätzlich C++ beibringen ist ganz schön happig.
Ich weiss wovon ich rede, ich habe mir in meiner Dipl. Arbeit damals C 
beigebracht, aber die Aufgabe war eher leichter.

Ich würde mich den Vorrednern anschliessen nimm C#, der Vorteil hier ist 
daß man wesentlich weniger Potential hat um Schweinereien zu 
programmieren.
C++ ist zu mächtig um es so schnell gut genug zu lernen und noch die 
eigentliche Arbeit zu machen.

Das Thema ist wie geschaffen für OOP.

Viel Erfolg.

von Kaj (Gast)


Lesenswert?

Ich könnte noch Python in verbindung mit PyQt empfehlen. Die Sprache ist 
leicht zu erlernen und man hat viele möglichkeiten. Es gibt viiiiele 
Module zum erstellen von Grafiken und Beispiele gibt es auch ne ganze 
Menge.
Ich arbeite mit C/C++ und Python und würde dir für sowas eher zu Python 
raten. Schon alleine aus dem Grund, weil du schneller Erfolge vorweisen 
kannst. Und Platformunabhängig ist es auch noch. Ebenso kannst du ja 
auch Teile in C++ schreiben und dann in Python einbinden.

Grüße

von Rolf Magnus (Gast)


Lesenswert?

Enrico S. schrieb:
> Der Simulator soll später vorrangig auf Windowsrechnern laufen.

"Vorranggig" heißt, daß es nicht ausschließlich dort laufen soll? Das 
würde dann nämlich auch wieder eher für C++ mit z.B. Qt sprechen.

Jörn schrieb:
> Mal wieder der vielgeschundene Echtzeitbegriff. Was verstehst du
> darunter? Echtzeit kann ein Bruchteil einer µS sein oder 2 Tage, das
> hängt vom Prozess ab!

Manchmal wird mit dem Begriff auch was ganz anderes gemeint. Im Berech 
Computerspiele oder eben auch Simulation bedeutet es, daß die simulierte 
Zeit der realen Zeit entspricht und nicht erheblich langsamer oder 
schneller abläuft oder manchmal gar komplett stehenbleibt oder in einer 
Art Einzelschrittmodus durchlaufen wird.

von Enrico S. (key-board)


Lesenswert?

Dass es ziemlich Happig ist weiß ich. Nur lieber jetzt wärend dem 
Studium wo ich zeit hab als später. Zumal ich damit einerseits ein 
weiteres Lehrwerkzeug für die FH an der ich studiere schaffe und 
andererseits damit einen Grundstein für meine Geschäfftsidee schaffe. 
Sprich ich will das in Zukunft weiterentwickeln und nutzen. Daherwäre 
eine "tote sprache" vll eher unpassend.
Zukünftige Studenten sollen die Möglichkeit erhalten Weitere Module für 
den Simulator zu entwickeln.
Das Vorrangig soll bedeuten. Die FH hat überall Windowsrechner stehen. 
Aber ich kann nicht vorraussetzen das Studenten die das später evt 
nutzen oder Module afür programmieren auch Windows nutzen oder eher auf 
Angebissenes Obst oder Flugunfähige Vögel stehen.

Achso Ich hab mir vorgestellt, dass der Simulator Intern mit einer 
beschleunigten "Echtzeit" Arbeitet.
als Beispiel Ein Kohlekraftwerk braucht in echt 4h um ans Netz zu gehen. 
Im Simolator entspricht das vll 4 min.

: Bearbeitet durch User
von Udo S. (urschmitt)


Lesenswert?

Wenn es hardwareunabhängig sein soll, dann ist Java auch eine gute 
Option. Von der reinen Rechengeschwindigkeit für rechenintensive 
Funktionen etwa Faktor 2 langsamer als optimierter C Code (Die 
Vergleiche waren auf Windows Rechnern und sind schon einige Zeit her) 
und so plattformunabhängig wie nur möglich. Speziell auch in Bezug auf 
Datenbank Anbindung.
Ich rede von Java und nicht von Javascript.

von Karl H. (kbuchegg)


Lesenswert?

> ... ein weiteres Lehrwerkzeug für die FH an der ich studiere
> schaffe ....

Darauf würde ich nicht bauen.

> und andererseits damit einen Grundstein für meine
> Geschäfftsidee schaffe. Sprich ich will das in Zukunft
> weiterentwickeln und nutzen.

Der Grundstein wird eher sein: so gehts nicht.

Ich will dich ja nicht bremsen. Aber es ist illusorisch, dass du mit 
Grundkenntnisse in der Programmierung auf Anhieb ein brauchbares System 
hinkriegst.
Es ist ok, wenn du dir dieses Thema als Zielsetzung nimmst. Aber 
realistisch betrachtet ist deine Version 0.9 für die Tonne. In einem 
Jahr, wenn du Erfahrung gesammelt hast, sieht die Sache allerdings 
anders aus. Dann baust du deine Version 0.99 auch anders auf und dann 
bestehen auch realistische Chancen, dass du eine 1.0 kriegst, auf der 
man dann tatsächlich aufbauen kann.

Das geht nicht gegen dich. Das ist uns allen so gegangen. Programmierung 
ist nun mal nichts, was man an 3 Nachmittagen lernt. Übung und Erfahrung 
ist alles (und natürlich das Beherrschen seines Werkzeugs, der 
Programmiersprache). Das dauert seine Zeit. Wenn du weiterkommen willst, 
dann leg das Thema momentan mal zu den Akten, besorg dir ordentliche 
Literatur, die auch als eine Art 'Kurs' fungieren kann (in der 
Buchhandlung reinschmöckern!) und nach jedem Kapitel Aufgaben hat. Und 
das ackerst du erst mal durch. Und erst dann versuchst du dich an deinem 
eigentlichen Problem. Das wird dann, je nachdem wieviel du übst, so in 
vielleicht einem halben Jahr sein. Vielleicht ein wenig früher, 
vielleicht auch ein wenig später.
Und hab auch keine Angst davor, Code den du geschrieben hast, auch mal 
wegzuwerfen wenn du drauf kommst, dass du dich in eine Sackgasse 
manövriert hast. In einem gut aufgebauten OOP System, fallen die 
Einzelteile wie passende Puzzlestücke ineinander. Muss man seltsame 
Klimmzüge machen, dann stimmt meistens am Klassenaufbau bzw. an der 
Zuständigkeitsverteilung an die Klassen was nicht. Anfänger tendieren 
meistens dazu, nur bloss keinen Code wegzuwerfen und auf Biegen und 
Brechen weiterzubenutzen, egal wie unsinnig das Gesammtsystem dann wird.

: Bearbeitet durch User
von bastus (Gast)


Lesenswert?

hier bleibt eigentlich nur .Net oder Java evtl in Verbindung mit 
Datenbanken.
(vb. net oder c# (ist jeweils in die andere Sprache problemlos 
übersetzbar)

Deine "Echtzeit" hat hier nix mit Echtzeit sondern einfach nur einer 
Simulationsgeschwindigkeit zu tun.

Ich selbst entwickel seit 3 Jahren beruflich Software und behaupte aber 
mal ganz easy sagen zu können, dass dir für das Problem absolut die 
Erfahrung fehlt, denn hier gilt absolute Modularität zu gewährleisten, 
damit dein Code irgendwann noch mal gelesen werden kann, vor allem wenn 
praktisch unerfahrene Studenten daran arbeiten. Das ganze sollte dann 
auch in ein Teamentwicklungssystem eingebunden werden.
Oft ist es so das Dinge die nen unerfahrener Softwareentwickler in 5 
Seiten schreibt, nach etwas Erfahrung oft nur noch paar Zeilen lang ist, 
daher ist Dokumentation hier das A und O.

von bastus (Gast)


Lesenswert?

Udo Schmitt schrieb:

> Ich würde mich den Vorrednern anschliessen nimm C#, der Vorteil hier ist
> daß man wesentlich weniger Potential hat um Schweinereien zu
> programmieren.

=== naja :D mit der Aussage wäre ich vorsichtig!

von Udo S. (urschmitt)


Lesenswert?

bastus schrieb:
> === naja :D mit der Aussage wäre ich vorsichtig!

C hat schon viel Möglichkeiten geboten, c++ ist so ziemlich die 
ultimative Sprache um Schweinereien zu programmieren.
Ich sage nur Operator overloading, Mehrfachvererbung, der genial Mix aus 
primitiven Datentypen und Objekten und die Möglichkeit objektorientierte 
und prozedurale Konzepte wild zu mischen.
Man muss nicht, aber man kann.
Je mächtiger eine Sprache ist, desto besser kann man damit auch Murks 
bauen.

von Quak (Gast)


Lesenswert?

Enrico S. schrieb:
> Zusätzlich soll die Datenauswertung sowohl
> Grafisch auf dem Rechner als auch über D I/O auf einem Externen Display
> (einfache LED's) ausgegeben werden.

Irgendwie ist dieser Teil unter gegangen. Wie soll das denn aussehen? 
Hast du eine Skizze davon?

von Robert L. (lrlr)


Lesenswert?

>Der Simulator soll später vorrangig auf Windowsrechnern laufen

das 1. was du als Programmierer lernen solltest:
wenn etwas zu 99% "A" machen muss, und zu 1% "B" machen muss
solltest dich auf "B" konzentrieren!


man könnte jetzt natürlich auch mal lazarus in die runde werfen

RAD, OO, schöne Sprache, lauft am raspberry (der hat gleich die 
passenden I/O's) usw.

von Rainer Brüderle (Gast)


Lesenswert?

Wie wär's mit Excel?
Ansonsten würde ich auch Python nehmen.

von Rolf Magnus (Gast)


Lesenswert?

Robert L. schrieb:
>>Der Simulator soll später vorrangig auf Windowsrechnern laufen
>
> das 1. was du als Programmierer lernen solltest:
> wenn etwas zu 99% "A" machen muss, und zu 1% "B" machen muss
> solltest dich auf "B" konzentrieren!

Der Rat ist gar nicht mal schlecht. Denn wenn du dich erstmal voll auf A 
konzentrierst, hast du nachher einen Riesenaufwand, das nach B portiert 
zu bekommen.

von F. F. (foldi)


Lesenswert?

Ob und wie es C++ für dein Projekt geeignet ist, kann ich nicht wirklich 
beantworten, aber zu den Unkenrufen darüber schon.

Muss mal etwas ausholen.
Ich fing an mit Arduino und wollte dann gleich mit C++ anfangen. Also 
kaufte ich mir ein Buch - über 1000 Seiten lang - aber schon im Anfang 
merkte ich, diese Sprache scheint mir zu liegen. Alles war für mich klar 
und verständlich.
Ich habe es trotzdem wieder in den Schrank gestellt und es wartet 
darauf, dass ich irgendwann mit C fertig bin, weil mir alle zu C rieten 
und nun wirklich fast alles C ist, was man im Netz zu Mikrocontrollern 
findet.

Also, wenn du Zeit hast, dann lerne C++. Wenn das schnell gehen muss, 
dann schau mal hier: http://www.processing.org/ nach.
Processing nimmt dir auch viel ab und (bin mir nicht ganz sicher) es 
werkelt wohl auch ein C++ Compiler im Hintergrund.

von Oliver R. (superberti)


Lesenswert?

Also, ich kann Karl Heinz nur recht geben.

Ich entwickle nun schon über 20 Jahre lang Software in C/C++ und C# und 
kann Dir ganz sicher sagen, dass für eine Studienarbeit Dein Vorhaben 
einige Größenordnungen zu mächtig ist. Du schreibst was von 
"Datenauswertung grafisch", hast aber nur Grundkenntnisse von 
Programmiersprachen. D.h. Du hast noch nie mit einem 
Oberflächenframework gearbeitet. Das ist aber noch einmal eine ganz 
andere Geschichte und hat mit der Programmiersprache gar nicht so viel 
zu tun.
Machst Du C# und möchtest z.B. eine schöne Oberfläche in WPF 
programmieren, dann wird Dich alleine der Einstieg in WPF mehr Zeit 
kosten, als Du Dir für Deine Studienarbeit vorstellst. Es gibt simplere 
Frameworks, aber auch die benötigen recht viel Einarbeitungszeit bevor 
man wirklich was Brauchbares damit anstellen kann.
Ich würde mir auf keinen Fall solch eine Studienarbeit ans Bein binden, 
schließlich willst Du doch auch noch einmal mit Deinem Studium fertig 
werden, oder?

Gruß, Oliver

von Udo S. (urschmitt)


Lesenswert?

Oliver R. schrieb:
> dann wird Dich alleine der Einstieg in WPF mehr Zeit
> kosten, als Du Dir für Deine Studienarbeit vorstellst.

Es kommt darauf an wie umfangreich eine Studienarbeit ist. Bei und 
damals war die Studienarbeit regulär 6 Monate, die Diplomarbeit 3 
Mionate, bei Studienarbeiten wurde aber zum Teil über 1 Jahr gearbeitet 
während die Dipliomarbeit eine wirklich fixe Deadline hatte. Der Umfang 
hängt hier massiv von der Uni und dem Fachbereich ab.

von Hans-Georg L. (h-g-l)


Lesenswert?

Enrico S. schrieb

>Für meine Studienarbeit will ich einen Simulator für die
>Energieverteilung in Netzen Programmieren. Er soll in der Lage sein ich
>sag mal beliebig viele und komplexe Simulationen von
>Energieanlagen(Erzeuger, Verbraucher,...) verarbeiten zu können, wobei
>der Simulator als Plattform zu verstehen ist und die Energieanlagen
>extra programmiert werden. Zusätzlich soll die Datenauswertung sowohl
>Grafisch auf dem Rechner als auch über D I/O auf einem Externen Display
>(einfache LED's) ausgegeben werden. In "Echtzeit" soll es auf
>Veränderungen welche von außen eingegeben werden reagieren.

>Dass der Simulator nicht viel Rechenzeit benötigt hoffe ich, da er ja
>"nur" als Vermittler zwischen den Daten fungieren soll und als erster
>Schritt bzw Baustein für die Gesamte Simulation verstanden werden soll.

> Achso Ich hab mir vorgestellt, dass der Simulator Intern mit einer
> beschleunigten "Echtzeit" Arbeitet.
> als Beispiel Ein Kohlekraftwerk braucht in echt 4h um ans Netz zu gehen.
> Im Simolator entspricht das vll 4 min.

Lieber Enrico,

wenn ich das so lese ist die Programmiersprache oder das Betriebssystem 
nicht dein Hauptproblem ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.