# C++ Starter



## Betagurke (20. Januar 2012)

Hallo Forum,

mich hat irgendwie das Programmier-Fieber gepackt und ich habe mich in C++ versucht, doch nun meine Frage: Sind diese ganzen Sachen wie Hello World überhaupt notwendig? Klar sind das Grundlagen, aber reicht es nicht auch, wenn man sie die einzelnen Befehle/Codes so einprägt. Ach ja, wie schreibt man ein Programm, dass im Hintergrund ausgeführt wird, also ohne dass dieses .cmd/.bat Fenster aufgeht bzw. wie Verknüpft man ein solches Programm mit einer eigenen "Grafik-Engine"? Ich habe nur wenig Ahnung, deswegen weiß ich nicht, wie ich es ausdrücken soll. 

Naja, danke im Voraus!

(Wäre einer so lieb und könnte mein "kleiner" Support sein, d.h. jemand der sich Zeit nimmt um Fragen zu beantworten, die von Zeit zu Zeit aufkommen, ich erwarte natürlich keinen 24 Stunden Service für Lau!)


----------



## KonterSchock (20. Januar 2012)

schau in youtube vorbei 

hier teil 1 C++ Tutorial deutsch 1 "Hallo Welt" - YouTube


----------



## Skysnake (20. Januar 2012)

Fragen kannste immer, aber NIMM DIR BITTE! DIE ZEIT FÜRS LERNEN!

Mach die Aufgaben, auch wenn du denkst, das Sie stumpfsinnig sind. Programmieren muss dir in Fleisch und Blut über gehen, und bei vielen Tutorials triffst du auch mal auf einen Fehler, weil die Tutorials einfach falsch sind  Oder veraltet oder whot ever. Dann läuft das nicht und du musst schauen warum, und das Problem eben lösen. So lernst du programmieren. Denn oft ist es einfach nur ein "Wie schaff ich dass der Mist so funktioniert wie ich es mir überlegt habe.... "

Klar, Algorithmen etc. sind auch wichtig, aber das kommt entweder mit der Zeit von allein, oder man muss richtig dafür paucken. Oft machen so was auch Mathematiker. Also nichts mit dem du dich beschäftigen wirst.


----------



## Crysis nerd (20. Januar 2012)

Ich kann Skysnake zustimmen, man sollte sich Zeit dafür nehmen. Es muss in Fleisch und Blut übergehen.
Es ist wie bei fast jeder Beschäftigung, die man lernen kann: Je länger man es macht, je besser ist man. Ab einer Woche intenvisem Training/Übung kannst du mir bestimmt die wichtigsten Befehle aufsagen, die Syntax runterbeten und alles was man sonst noch so wissen muss. Trotzdem wirst du lange nicht so gut Programmieren, wie jemand, der schon ein halbes Jahr programmiert. Es ist einfach immer wieder die Erfahrung, die einen richtig gut macht.

Deswegen: Mach die Aufgaben, die dir sinnlos erscheinen. Wenn du später an zu schwere Aufgaben rangehst, dann verzweifelst du, und hast keine Lust mehr. Glaub mir. Fang klein an, arbeite dich hoch und irgendwann hast du das geniale Gefühl: Jetzt kann ich C++!

"Wer sich zu wichtig für kleine Aufgaben hällt, ist meist zu klein für wichtige Aufgaben" - weiß ich nich
Tolles Zitat, halte dich dran 

Und naja, wenn du gerade anfängst zu programmieren, muss ich dich leider enttäuschen: Mit Grafik Engine wirste da nix groß anfangen können, Kollege. Solange du nicht sowieso in dem Bereich sehr gut bist und einen IQ von 1337 hast, wird bis zu deiner eigenen Grafikengine einiges an Zeit vergehen.
Um noch deine Frage zu beantworten: Um ein Programm im Hintergrund ablaufen zu lassen, muss man die Hauptfunktion nicht int main() nennen sondern irgendwie anders. Aber ich bin mir auch nicht sicher, ich meine das nur noch zu wissen....


Aber trotzdem: Viel Spaß beim Lernen und diese Community hilft dir sicher gerne 

mfg
Lukas


----------



## Skysnake (21. Januar 2012)

Unter Linux gehts einfach "./Programmname &" Und schon wird es im Hintergrund gestartet 

Und mit "nohup ./Programmname &" Kannste sogar die Console wieder zu machen, oder alternativ "screen" nutzen 

Überhaupt rate ich dir dazu, Linux zu verwenden und gvim(<-kann mögliche Befehle listen) oder geedit(<- reiner Texteditor), weil du da einfach nicht den Windowsmüll mit an der Backe hast, und eben das Zeug wirklich C/C++ ist, wie es spezifiziert ist, ohne Extrawürste, die sonst nirgends funktionieren -.- Ich hab mich dadurch teils SEHR schwer getan auf linux zu programmieren, weil ich die ganzen Windows Extrawürste intus hatte, insbesondere von MS Visual C++, ohne es zu wissen. Das hat mich sehr sehr sehr viele Stunden arbeit gekostet, bis ich das wieder drausen hatte....

Und zur Graphig-Engine. Also wie schon gesagt wurde, vergiss das mal schnell mit der eigenen, und selbst mit einer API wirst du mehr als genug Probleme haben. DAS gehört nämlich mit zu den anspruchvollsten (ok, anspuchsvoll nicht wirklich, eher LÄSTIG) Sachen, die man so machen kann. Es gibt immer sehr viele Befehle, und sehr sehr sehr viel Overhead, den man erst mal erledigen muss, bis überhaupt etwas graphisch ausgegeben werden kann. 

Ich hab QT mal in einem Semester genutzt, und es was Grauenhaft. Hat sehr sehr sehr viel Zeit gekostet und es war sehr sehr sehr sehr sehr sehr sehr!!!! schwer, zu verstehen, warum 99,99% identischer Code manchmal komplett unterschiedliche Sachen gemacht hat. Da sind wir teils mit 10 Leuten dran gesessen und haben versucht raus zu finden, warum manchmal komische Sachen passieren. 

Also wie gesagt, graphische Ausgabe ist in >>50% der Fälle reine Kür.


----------



## Betagurke (21. Januar 2012)

Vielen Dank für die netten Antworten. Mal noch eine Frage, muss man mathematisches Genie sein, um programmieren zu können? Oder reicht es wenn man in Mathe gut bis mäßig ist?


----------



## bingo88 (21. Januar 2012)

Das kommt drauf an. Wenn du bspw. numerisch irgendwelche dicken Differntialgleichungen beackern möchtest, solltest du da schon den mathematischen Background zu haben. Aber allgemein ist ein fundiertes Mathe-Wissen nicht zwingend erforderlich, allerdings auch nicht schädlich


----------



## zøtac (22. Januar 2012)

Was ich empfehlen kann ist das Buch "C++ von A bis Z", da werden eig. alle Fragen beantwortet. Hat mir persönlich extrem geholfen.


----------



## Skysnake (22. Januar 2012)

Jup, dem kann ich zustimmen. Das ist auch ein Buch, das dich dein ganzes Programmiererleben lang begleiten kann. 

Ich schau da hin und wieder auch rein. Leider hat unsere UB das Ding aussortiert und nur noch im FreiHand-Bereich


----------



## Crysis nerd (22. Januar 2012)

Bücher kann ich auch nur hoch loben, immer ein gute Nachschlage werk zu haben ist Gold wert, gerade am Anfang.
Und zu Mathekenntnissen: 
Wie gesagt, kommt drauf an was du machst. Aber für Graphic Engine wirst du das wahrscheinlich brauchen und eine gute Räumliche Vorstellungskraft. 
Wenn du zb. ein Spiel programmieren möchtest, brauch deine Engine auch noch eine Physic berechnung und sowas. Also du kannst dich bei vielen Anwendungen darauf einstellen, dass du Mathe brauchst. Es werden zwar immer viele Funktionen bereitgestelt, die dir komplizierte Aufgaben wie Matrizen multiplikation abnehmen, aber manchmal kommst du nicht drum rum.

Ich will dir nicht den Teufel an die Wand mal , aber Mathe ist doch schon mehr oder weniger wichtig  Aber naja du kannst erstmal lange Zeit programmieren ohne Großartige Mathekenntnisse.

mfg
Lukas


----------



## Skysnake (22. Januar 2012)

Crysis nerd schrieb:


> Wenn du zb. ein Spiel programmieren möchtest, brauch deine Engine auch noch eine Physic berechnung und sowas. Also du kannst dich bei vielen Anwendungen darauf einstellen, dass du Mathe brauchst. Es werden zwar immer viele Funktionen bereitgestelt, die dir komplizierte Aufgaben wie Matrizen multiplikation abnehmen, aber manchmal kommst du nicht drum rum.


Ähmmmm... Matrixmultiplikation kompliziert? 

Äh... also ich will ja nix sagen, aber das sind im Optimalfall 5 Zeilen Code oder so. Wenn ich es grad richtig im Kopf hab, sind es 3 for-schleifen für die naive Implementierung. 

Klar, das Ding kann man auch auf 100+ Zeilen Code aufblähen, wie ich das schon gemacht habe um maximale Performance raus zu holen, aber das ist halt was ganz anderes als einfach das Problem zu lösen.

Mathe brauchste wie schon gesagt wurde mehr oder weniger, aber du brauchst es immer. Wenn du nur eine Namensverwaltung oder so was schreibst, wirst du es kaum brauchen, wenn du ne Berechnung von irgendwelchen physikalischen Vorgängen machen willst, brauchste verdammt viel Mathe. 

Kommt halt wie gesagt immer drauf an. Du kannst aber in deinem Leben NIE genug Mathe können, wenn du in die Informatik geht. Nur so viel dazu.

Und zur Graphik noch was. Du musst für Beleuchtung meist/immer die Normalen von irgendwelchen Triangles berechnen. Da brauchste also auch wieder Mathematik, wobei das eher rechnen ist, da man solche Sachen überall nachschlagen kann. Das hat nichts mit Mathematik zu tun. Das ist einfach nur Rechnen. 

Und was ein Prof mal gesagt hat "Wir machen hier Mathematik und rechnen nicht. Rechnen kann ich auch nem Affen beibringen!"


----------



## Crysis nerd (22. Januar 2012)

Skysnake schrieb:


> Ähmmmm... Matrixmultiplikation kompliziert?
> 
> Äh... also ich will ja nix sagen, aber das sind im Optimalfall 5 Zeilen Code oder so. Wenn ich es grad richtig im Kopf hab, sind es 3 for-schleifen für die naive Implementierung.
> 
> Klar, das Ding kann man auch auf 100+ Zeilen Code aufblähen, wie ich das schon gemacht habe um maximale Performance raus zu holen, aber das ist halt was ganz anderes als einfach das Problem zu lösen.


 
Was ich meine ist der mathematische Hintergrund dazu. Also ich bin irgendwie jetzt in der 13. Klasse ohne je mit Matrizen ge"rechnet" (  ) zu haben. Und ich denke, dass ich nciht der einzige bin. Und wenn man da einfach mal ein Objekt im 3D raum drehen will, kommt man nach einiger Zeit eventuell auf den Wikipedia Artikel Drehmatrix. Und ich bleibe bei meiner Behauptung und finde, dass es verdammt schwer ist da sofort durchzusteigen. 
Das war nur ein Beispiel für die mathematischen Grundlagen, die man dafür braucht. 

mfg


----------



## Skysnake (22. Januar 2012)

Naja, um zu verstehen, wie die Matrix angewendet wird, bzw. was Sie macht, ja, da muss man kurz 5 min Hirnschmalz rein stecken, um das zu verstehen. (Je nach Vorbildung auch sehr viel mehr)

Aber die Matrixmultiplikation ist hatl einfach eine Rechenvorschrift. Nicht mehr und nicht weniger. Das ist halt wie gesagt "Rechnen". Den Hintergrund dazu macht man dann in Lineare Algebra, ergo Mathematik. Das ist dann auch anspruchsvoller. Ein Informatiker kann das aber oft nicht. Machen ja wenn überhaupt nur die an der Uni, und selbst die sind ja oft nicht gerade die Mathe Genies. Also nichts gegen Informatiker, aber das sind halt meist nicht die Leute, die sich überlegen ein Mathestudium zu machen. Ist zumindest meine Erfahrung


----------



## Frezy (13. Februar 2012)

Hey,



> mich hat irgendwie das Programmier-Fieber gepackt und ich habe mich in C++ versucht, doch nun meine Frage: Sind diese ganzen Sachen wie Hello World überhaupt notwendig? Klar sind das Grundlagen, aber reicht es nicht auch, wenn man sie die einzelnen Befehle/Codes so einprägt.


 
Ich sags mal so. Ich habe in meiner Schullaufbahn geschätzte 50 (ACHTUNG bisschen übertrieben!) Schüler-, Lehrer-, Taxi- und sogar Mistkübelverwaltungen geschrieben. Mein Lehrer meinte es wäre nötig um die Grundlagen wirklich zu beherrschen. Einerseits glaube ich, hätte ich das auch mit der hälfte davon gecheckt. Aber andererseits muss ich sagen, dass es sicher nicht schlecht war.



> Ach ja, wie schreibt man ein Programm, dass im Hintergrund ausgeführt wird, also ohne dass dieses .cmd/.bat Fenster aufgeht bzw. wie Verknüpft man ein solches Programm mit einer eigenen "Grafik-Engine"? Ich habe nur wenig Ahnung, deswegen weiß ich nicht, wie ich es ausdrücken soll.


 
Hmm... verstehe nicht was du meinst. Ich glaube du meinst sowas wie Bibliotheken. Bibliotheken stellen dir eine Sammlung von Methoden usw. bereit. Du wirst sie sicher schon einmal gesehen haben diese .dll files. Dort kannst du Methoden, Klassen, etc. definieren und als .dll bereitstellen und in anderen Programmen benutzen.
Sonst weiß ich leider nicht was du mit verstecken meinst. 
Oder meinst du verstecken damit der User nichts davon mitbekommt? Virus etc.?  In Windows musst du da in die Tiefen vom Explorer. Aber den Code will ich hier nicht preisgeben. (Aber Google verrät sehr viel.)

Mit freundlichen Grüßen,
Frezy


----------



## Ahab (13. Februar 2012)

Ich will hier nur nochmal auf die Mathematik eingehen, den Rest haben die Herren zuvor bereits sehr richtig beschrieben. 

Umfangreiche Mathekenntnisse sind hervorragend zum Programmierung, aber irgendwie auch ein kleiner Luxus und nicht zwingend nötig.  Es reicht wenn du einfach... naja... nicht zu doof bist dafür.  Das heißt im Klartext: Mathematik _auf Halde_ zu lernen, um perfekt auf alle möglichen Probleme vorbereitet zu sein, ist sehr sehr schwer. Viele Probleme wirst du erst in deinem Schaffensprozess kennenlernen, manchmal sind es Probleme die du sogar schon in der Schule hattest.  

Das gute an der Sache ist: wenn du im Rahmen deiner Programmierarbeit ein mathematisches Problem lösen musst, gehst du mit einer vollkommen anderen Einstellung an die Sache, als es vielleicht zuvor in der Schule der Fall war, wo dir die Sachen eventuell zu abstrakt waren. Du bist deutlich motivierter, das Problem zu lösen. Dadurch bist du beharrlicher und hängst dich mehr rein. Ein Programm dazu zu bringen, dass es funktioniert, wie du es willst, ist ja auch viel cooler und interessanter, als ein schnödes Gleichungssystem lösen zu müssen - dabei kann es durchaus das gleiche sein.  

Ich bin auch kein Mathe-Genie muss ich sagen, trotzdem bin ich nach Regelstudienzeit im Sommer beim Bachelor.  In Informatik/Ingenieurswesen natürlich. Wenn man nur will, kann man sich problemlos auch nicht gerade trivialen mathematischen Problemen stellen und wenn du es tatsächlich nicht aus eigener Kraft schaffst, gibt es sicher Leute, die dir mit ihrem Wissen helfen können.  

Motivation, Interesse, Begeisterung - die drei sind wichtiger, als Talent und Vorwissen.


----------



## Skysnake (13. Februar 2012)

Mit so ner Aussage wäre ich aber vorsichtig.

Bei uns müssen die Informatiker AnaI und LAI hören, und die Durchfallquote liegt da bei geschätzten >50%. Ist mit dem Bachelor wohl etwas besser geworden, aber wenn man an die Uni will, sollte man fit in Mathe sein. Haben schon genug Leute ihr Informatikstudium geschmissen, weil Sie die Mathevorlesungen nicht gepackt haben.


----------



## Mashed (13. Februar 2012)

Wenn du Informatik studierst, brauchst du Mathekenntnisse(gibt dann auch entsprechende Vorlesungen), damit du die theoretischen Grundlagen verstehen kannst.

Wenn du einfach nur programmieren willst, reicht es auch, wenn du logisch und strukturiert denken kannst.(was auch für Mathematik eine Voraussetzung ist) Ab und zu stolperst du vielleicht über ein mathematisches Problem beim Programmieren, aber normalerweise nichts, was sich nicht mit etwas Intelligenz + Internet lösen lässt.


----------



## UnnerveD (13. Februar 2012)

Skysnake schrieb:


> Mit so ner Aussage wäre ich aber vorsichtig.
> 
> Bei uns müssen die Informatiker AnaI und LAI hören, und die Durchfallquote liegt da bei geschätzten >50%. Ist mit dem Bachelor wohl etwas besser geworden, aber wenn man an die Uni will, sollte man fit in Mathe sein. Haben schon genug Leute ihr Informatikstudium geschmissen, weil Sie die Mathevorlesungen nicht gepackt haben.


 
Die Kenntnisse sind nicht nur an einer Uni entscheidend - an Hochschulen ist es mindestens genauso gefragt. Den Unterschied machen in der Regel die unterschiedlichen Abschlussarten (Bachelor / Diplom / Master) aus, ob und wieviel Mathe man können muss. Gerade im Master musste ich feststellen, dass man Mathe nicht mehr in 5min begreift und auch zu Hause mal drüber grübeln muss.

Ganz verrückt wird es dann bei der grafischen Programmierung  (OpenCL, dx), weil das mMn nur noch wenig mit Programmieren, denn mit Mathematik zu tun hat (authentische Lichtbrechnung, Wasserdarstellung, Schatten, ...). Als Anfänger, um die Basics um Schleifen/ Ausnahmen / Objektprogrammierung etc. zu lernen sind Mathekenntnisse eher zweitrangig.


----------



## Zappzarrap (14. Februar 2012)

Stimme meinen Vorrednern zu. Komme jetzt ins 5 Semester Informatik
und stelle fest das Mathe zwar nicht zwingend erforderlich, aber absolut
hilfreich ist. Zumal dir in den Mathe VL auch eine Denkweise beigebracht 
wird, die beim Programmieren sehr hilfreich ist. Bin jetzt seit dem 2. Sem.
Mathe Tutor und werde immer wieder gefragt "Brauch ich das überhaupt?"
Das ist die falsche Frage, besser: "Wie kann ich das Wissen, das mir in den
Mathe Vorlesungen vermittelt wird anwenden?" Und da gibt es eine Menge
Situationen. Banales Beispiel: Wir haben in einem Flashspiel eine 
Windquelle gehabt und brauchten den Winkel des Windes um die Auswirkung
auf unsere Spielfigur zu erfahren. Da hilft es schon wenn man mal von 
Pythagoras gehört hat  Auch in anderen Fächern, wie Bildverarbeitung 
oder Computergrafik fliegen dir nur so die Vektoren / Matritzen um die Ohren.
Räumliche Vorstellungskraft hin oder her, wenn du nicht weisst wie damit
rechnen kannst, kommst du nicht weit...Mathe hat mir persöhnlich bisher
immer geholfen.

Aber das sind alles Probleme, mit denen du dich anfangs nicht beschäftigen
solltest, wie unnerved sagte. Eins sollte dir klar sein: Eine Programmiersprache
ist nur das Handwerkszeug. Code hinzuschreiben hat mit Programmieren
mMn nicht viel zu tun, das ist schnell gelernt. Die Kunst oder das was ich
als Programmierne bezeichnen würde ist Probleme zu erkennen und einen
Algorithmus für die Lösung zu finden - Wenn du dir den erstmal ausgedacht
hast, ist der rest nicht viel mehr als hinschreiben...


----------



## Skysnake (14. Februar 2012)

Mehr muss man dazu nicht sagen. Sehr treffend zusammen gefasst.


----------



## thysol (15. Februar 2012)

Skysnake schrieb:


> Ein Informatiker kann das aber oft nicht. Machen ja wenn überhaupt nur die an der Uni, und selbst die sind ja oft nicht gerade die Mathe Genies. Also nichts gegen Informatiker, aber das sind halt meist nicht die Leute, die sich überlegen ein Mathestudium zu machen. Ist zumindest meine Erfahrung


 
Also Matrix-Multiplikationenen aber wir im ersten Semester gemacht. Also mir wäre das eigentlich neu das Informatiker keine ahnung von Mathe haben.


----------



## Skysnake (15. Februar 2012)

Thysol, zwischen ner MAtrix-Mul und zu zeigen/beweisen, dass Matrizen Abbildungen sind und gewisse Eigenschaften haben, sind 2 paar Stiefel.

Du brauchst die Mathe aber immer wieder, vor allem, wenn du dann mal irgendwelche Analysen machen musst, wie Stabil dein Löser z.B. für Differentialgleichungen ist. Da sitzen dann aber normal auch ein paar Mathematiker mit dabei, denn das geht dann schon sehr weit in die Mathematik rein, wo ich mir selbst als Physiker dann schwer tu und das gern auf einen Mathematiker abschieb, der sich dann um den Beweiskram kümmern kann.


----------



## thysol (17. Februar 2012)

Skysnake schrieb:


> Thysol, zwischen ner MAtrix-Mul und zu zeigen/beweisen, dass Matrizen Abbildungen sind und gewisse Eigenschaften haben, sind 2 paar Stiefel.
> 
> Du brauchst die Mathe aber immer wieder, vor allem, wenn du dann mal irgendwelche Analysen machen musst, wie Stabil dein Löser z.B. für Differentialgleichungen ist. Da sitzen dann aber normal auch ein paar Mathematiker mit dabei, denn das geht dann schon sehr weit in die Mathematik rein, wo ich mir selbst als Physiker dann schwer tu und das gern auf einen Mathematiker abschieb, der sich dann um den Beweiskram kümmern kann.


 
Sorry, hab den falschen Quote genommen. Ich wollte eigentlich den User zitieren der meinte das Matrix-Multiplikationen schwer sind.


----------



## Skysnake (17. Februar 2012)

Ach so 

Ich dachte schon


----------



## Betagurke (28. Februar 2012)

Borr, ich hab mir das grade alles durchgelesen und bin schockiert und motiviert zugleich, schockiert von den Begriffen dir ihr hier verwendet und anderseits motiviert, auch mal Ahnung von dem was ihr das sagt zu haben. Naja, Danke an alle für die Antworten.
Übrigens, für alle die es nicht kennen, ich würde euch das Buch "Daemon" und den Nachfolger "Darknet" empfehlen, besonders für Leute die sich in diesem Bereich beschäftigen. Klasse Bücher, hat mich z.T wieder motiviert das zu lernen. 
Ich werde jetzt nochmal bei 0 Anfangen und mir ggf. Lektüre dazu zulegen.


----------



## Skysnake (29. Februar 2012)

Mach das 

C/C++ ist wirklich nicht schwer. Man darf sich NUR NICHT! zu hohe Ziele stecken. 

Kleines Beispiel. MatrixMultiplikation:

Vanilla (einfachste/naive) Implementierung: na so ca 20-30min, wobei das ganze Zeug zum testen, das auch alles richtig läuft wohl am längsten dauert.
Version mit, slices, Ausnutzung der spezifischen Cache Größen, 1D Array, usw.: Hmm 4-8h?
Portierung auf GPU mit allem was davor auch war: ~50h 

Wie du siehst, das Problem war für mich absolut kein Ding zu lösen und absolut trivial, man kann aber wirklich SEHR SEHR viel Zeit versenken, wenn man etwas besonders geschickt machen will/muss, damit das Programm auch schnell ist.

Deswegen nicht zu viel vornehmen


----------



## slayerms (6. März 2012)

programmieren lernt man nur durch immer und immer wiederes wiederholen und ausporbieren und slebst porgrammieren es hilft also nicht bei einem problem gleich er google oder per forum eine hilfe zu suchen sondern was ich auch immer ganz nett fand den "AHA" effekt auszunutzen wenn man aalleine drauf kommt das gibt ein, ein lernn erfolgs erlebnis


p.s. C++ will ich mir auch noch antun wenn ich die zeit finde da ich zurzeit nur html css und php beherrsche

lg slayerms


----------

