Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Flyff
You last visited: Today at 14:11

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Selber Programmieren

Discussion on Selber Programmieren within the Flyff forum part of the MMORPGs category.

Reply
 
Old   #1
 
klucki's Avatar
 
elite*gold: 0
Join Date: Nov 2007
Posts: 9
Received Thanks: 3
Selber Programmieren

Huhu,
ich wollte mal fragen, mit welcher Programmiersprache ich Programme programmieren kann, mit denen ich mir in FlyFF (auch andere Games) einen Vorteil verschaffen kann. Zum Beispiel wie FlyFF Termination oder auch FlyFF Augmentation.

Meines wissens brauche ich C/C++, aber bin mir nicht so ganz sicher. Ich bin bereit mir die Bücher zum erlernen der Programmiersprachen zu kaufen.

Nunja... . Die eigentliche Frage: Ist C++ gut geeignet, um Programme wie FlyFF Augmentation, Termination zu programmieren?

Ich bin recht unerfahren und besitze nur das Wissen zum Taschenrechner programmieren (beherrsche Sprache PASCAL)


MFG klucki
klucki is offline  
Old 11/07/2007, 15:49   #2
 
321meins's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 287
Received Thanks: 40
Das klingt jetzt ein bisschen blöd, weil ich diese Methode hier ja fördere, aber meiner Meinung nach, kann man sich C/C++ nicht wirklich gut selber beibringen, wie z.B. von zu Hause übers Internet. So wie das bei PHP zum Beispiel einfacher möglich ist.
Ich selbst habe es in der Schule gelernt. Auch mit der ganzen Theorie. Struktogramme, Sequenzdiagramme, Zustandsdiagramme, usw. All das hat dazu gehört, ist aber weniger wichtig. Wichtig ist, denke ich, das Hintergrundverständis "Was läuft da eigentlich ab, wenn ich xyz mache?". Wenn man versteht, was C/C++ eigentlich macht, wie ein Compiler, Linker usw. arbeitet, dann kann man sagen, dass man C/C++ programmiert. Wenn man richtig einrückt, sauber schreibt und ein paar kleine Regeln einhält.
Am schlimmsten sind diese schlampigen "Hacker"-Codes (Hacker hier nicht im Sinne von Verbrechner ). Also haltet euch ein diese wenigen Regeln, die folgen werden, und ihr werdet vielleicht etwas erfolgreicher beim Programmieren!

Regeln

Nun ja, wozu Regeln? Ganz klar: Wenn man irgendwann mal komplexere Programme schreibt, oder sogar in die Spieleentwicklung geht - sei es kommerziell oder privat - dann ist Teamarbeit angesagt. Man kann kein Spiel wie Gothic 3 im 1-Mann-Projekt durchziehen. Da muss die Arbeit aufgeteilt werden ... Engine, 3D Grafik, logische Abläufe im Spiel ... Aber von Spieleprogrammierung möchte ich jetzt garnicht weiter reden, da das sowieso mehr als Programmierung erfordert!

Also hier nun ein paar Regeln:

* Einrücken
* Benennung der Dinge
* Sprache
* Kommentare


Einrücken: Rückt nach einer geschweiften Klammer immer 3 oder 4 Leerzeichen vor, damit man den Quelltext später noch gut lesen kann, und selber auch nach einem Monat noch versteht. Auch anderen Programmierern, sei es im Team oder Leute, die einem helfen sollen, fällt es so einfacher, das Programm zu verstehen!

Benennung der Dinge: Benennt die Variablen, Klassen usw. immer nach dem, was sie tun oder was sie sind. Benennt zum Beispiel keinen Integer "Integer1, Integer2, Integer3" usw.

Sprache: Einigt euch selbst auf eine Sprache! Wenn ihr die Bennenung der Dinge und die Sprache einhaltet, dann werdet ihr euer Programm später wie ein Buch lesen können. Ich bevorzuge Deutsch, da ich alleine programmiere und die Groß- und Kleinschreibung auch einiges an Übersicht schafft.

Kommentare: Sind nicht unbedingt erforderlich. Aber, wenn ihr mal ein Programm schreibt, das euch Schwierigkeiten bereitet hat, dann solltet ihr den Teil, den ihr vielleicht nicht auf Anhieb wieder verstehen werdet, kommentieren.

So, ihr werdet auch in meinen weiteren Tutorials sehen, was genau ich damit meine. Wenn euch das gefällt, dann werde ich mehr Tutorials schreiben, tiefer auf Dinge eingehen und euch noch ein paar nette Dinge zeigen. Wichtig ist Geduld. Ihr könnt es auf jeden Fall vergessen, wenn ihr noch nie zuvor Programmiert habt, dass ihr in 2 Wochen auf dem Stand seid, dass ihr euer eigenes 3D-Spiel programmiert. Aber wie ihr Ping Pong programmiert, kann ich euch auf jeden Fall demnächst zeigen. Und Bewertungen geben mir dementsprechend ein Feedback, ob es Anklang findet

Nun zur Sache...

Programm

Damit sich das ganze hier nicht - wie jedes andere Einsteiger Tutorial - mit der einfachen Textausgabe beschäftigt, erweitere ich es noch um ein paar Kleinigkeiten, nicht viel, aber etwas
Um einen lauffähigen Compiler müsst ihr euch leider selbst kümmern. Ich programmiere mit dem Borland C++ Builder 5. In diesem Tutoria dürfte das keine Rolle spielen. Hauptsache ihr habt einen lauffähigen Compiler.

Also los gehts: Grundgerüst ist für uns erstmal die main() Funktion. Ich weiß, ich habe gesagt, dass ich mich für die deutsche Sprache entschieden hab. Bei dieser Funktion mache ich jedoch eine Ausnahme, ich glaube, man muss sie sogar so nennen, da sie die Hauptfunktion ist und sie demnach aufgerufen wird.

Code:

void main() { }


So siehts aus! Die Funktion ist vom Typ void, das bedeutet, sie hat keinen Rückgabewert. Wäre sie z.B. vom Typ Integer (int main()), dann müsste man einen Integerwert zurück geben mit z.B. return 0. Da wir aber keinen Rückgabewert brauchen, weil wir keine Verwendung für ihn hätten, lassen wir es erst mal so.

Durchcompiliert macht das Programm noch garnichts. Es beendet sich auch am Ende wieder. Das wollen wir natürlich nicht, deshalb fügen wir noch die Funktion getch() ("Get Charakter") hinzu. Diese wartet auf einen Tastendruck vom Benutzer. Um diese Funktion zu benutzen müssen wir die Bibliothek conio.h einbinden. Am besten binden wir sie am Anfang des Programms ein, dann kennt alles darunter die Funktion. Bibliotheken werden eingebunden mit #include, Bibliotheken des Compilers stehen in einer spitzen Klammer (#include <conio.h>), eigene Dateien, die man einbinden, werden mit Einführungsstrichen eingebunden (#include "EigeneCPPDatei.cpp"). So wird sie aus dem Pfad der .exe Datei eingefüht. Bei eigenen Dateien müsst ihr also ggf. den entsprechenden Pfad angeben. Der Includebefehl wird nicht mit einem Strichpunkt beendet, da dieser eine Compileranweisung ist und kein C++ Befehl. Der Compiler fügt an dieser Stelle einfach nur den Quelltext der eingefügten Header(*.h)- / C++ Datei ein. Damit entwickelt sich noch ein Problem, auf das ich in einem eigenen Tutorial noch beschreiben werde. Hier wird es noch keine Probleme geben.
Der getch() Befehl muss innerhalb der main() Funktion aufgerufen werden. Außerhalb hat er keinerleis Auswirkung. Außerhalb sind demnach nur Funktionsdeklarationen und ausprogrammierte Funktionen.
An dieser Stelle muss ich noch erklären, was eine Deklaration ist. Eine Deklaration ist das alleinige "in's Leben rufen" einer Funktion oder Variable, ohne Zuweisung von Werten oder Inhalt. So wie z.B. int Wert;. Der Integer "Wert" hat jetzt theoretisch keinen Inhalt. Er wird jedoch irgendeinen wirren Inhalt aus dem Speicher haben, wenn man ihn nun aufruft.

Code:

#include <conio.h> void main() { getch(); }


So, jetzt sollte das Programm noch irgendetwas machen! Also als bestes Beispiel ist eine Ein-/Ausgabe. Ich bevorzuge nicht cin und cout, sondern printf(). Die Funktion printf() gibt einen String auf dem Bildschirm aus, also einen Text oder Zahlen oder Zeichen. Der Text steht innerhalb der Klammern. Um die Funktion zu benutzen, müssen wir allerdings eine weitere Bibliothek einfügen: stdio.h, für Standardfuntionen. Also wieder wie oben, per #include!
Wenn man einen festen Text ausgeben will, würde das so aussehen (ein konstanter Text steht in Anführungsstrichen!):

Code:

#include <conio.h> #include <stdio.h> void main() { printf("Hello World!"); getch(); }


Und was sehen wir nach dem Compilieren? Auf dem Bildschirm erscheint "Hello World!". Da wir aber eine Ein-/Ausgabe planen, brauchen wir eine Ausgabe, die nicht konstant, sondern variabel ist. Also brauchen wir eine Variable, die ausgegeben werden muss. Wir wollen nur Rechnen, also geben wir einen Integer ein und aus. Eine Fließkommzahl (Datentyp float) wäre natürlich auch möglich, aber schauen wir uns erstmal die Ganzzahlen (Datentyp int) an!

Wir legen also drei Integer an. Das ist die Mindestanzahl, die wir für eine Rechnung brauchen (a + b = c, a - b = c, a / b = c, a * b = c). Man könnte natürlich auch eine eingegebene Zahl mit einer Konstanten verrechnen, doch selbst dann bräuchten wir mindestens drei Integer! Also deklarieren wir erstmal die Integer. Ich bevorzuge es, aufgrund der Übersicht, sie nicht in einem Zug (int a, b, c) zu deklarieren, sondern untereinander (siehe Code).

Code:

#include <conio.h> #include <stdio.h> void main() { int a; int b; int c; printf("Hello World!"); getch(); }


So, nun muss jede Variable noch eingelesen werden. Um euch zu zeigen, was sonst raus kommen würde, geben wir erstmal die Variablen nur aus. Also müssen wir das printf() verändern. Wir geben in das printf() ein: a + b = c. Damit er jedoch nicht den Text ausgibt, sondern die Variablen, müssen wir das kennzeichnen.

Code:

[...] printf("%i", a); [...]


So gibt man mit printf() einen Integer (%i) aus. Weitere Datentypen sind auch möglich, dementsprechende Kürzel müssen verwendet werden. Um mehrere Variablen in einem printf() auszugeben, schreibt man sie einfach nach dem Komma in der Reihenfolge, wie sie ausgegeben werden sollen. Demensprechend viele %i müssen auch im printf() zur Verfügung stehen!

Code:

#include <conio.h> #include <stdio.h> void main() { int a; int b; int c; printf("%i + %i = %i", a, b, c); getch(); }


Nach dem Compilieren wird bei mir zum Beispiel "1 + 256 = 1" ausgegeben, was natürlich nicht stimmt. Wir haben ja noch keine Werte eingegeben, also kommen irgendwelche Werte, die vorher jemand anders mal in den Speicher gesetzt hat raus. Jetzt brauchen wir also eine Abfrage. Diese machen wir mit scanf()! Damit der Benutzer weiß, was er wann eingeben muss, setzen wir noch ein printf() vor jede Eingabe. Die Funktion scanf() benötigt wieder Datentyp und einen Zeiger auf die Variable. Wir zeigen auf eine Variable mit dem & Operator.
Da der Integer c das Ergebnis aus a und b sein soll, wird dieser logischerweise nicht eingelesen.

Code:

#include <conio.h> #include <stdio.h> void main() { int a; int b; int c; printf("a = "); scanf("%i", &a); printf("b = "); scanf("%i", &b); printf("%i + %i = %i", a, b, c); getch(); }


So, das einzige, was uns jetzt noch fehlt, ist eine Rechnung. Damit der Benutzer auch weiß, was gerechnet wird, geben wir vor der Abfrage noch die Formel aus. Wir benutzen vorerst a + b = c, so wie es schon da steht. In unserem Integer c steht später das Ergebnis. Also weisen wir dem Wert die Rechnung zu. In C++ wird das rechte immer dem linken zugewiesen, also c = a + b. a + b = c würde nicht funktionieren.
Da die Rechnung mit unserer Eingabe stattfinden soll, muss sie natürlich nach der Eingabe geschehen. Würde man c = a + b vor das scanf() setzen, würde das Programm mit falschen Werten rechnen.

Code:

#include <conio.h> #include <stdio.h> void main() { printf("a + b = c\n\n"); int a; int b; int c; printf("a = "); scanf("%i", &a); printf("b = "); scanf("%i", &b); c = a + b; printf("%i + %i = %i", a, b, c); getch(); }


Bei der Ausgabe von "a + b = c" habe ich zwei mal "\n" angehangt. Eines davon bewirkt einen Zeilenumbruch. Andernfalls würde die Ausgabe "a =" gleich hinten angehängt werden. Ihr könnt diese Zeilenumbrüche so oft ihr wollt in eure anderen printf() Funktionen einfügen, um die Darstellung euren Wünschen anzupassen.

So, wenn ihr jetzt das Programm ausführt, dann rechnet es auch a + b aus. Die Eingabe von negativen Zahlen ist auch möglich, so rechnet das Programm zum Beispiel: -5 + 5 = 0. Das könnte man auch verhindern, indem man zum Beispielen einen unsigned int verwendet, jedoch würde das in diesem Fall keinen Sinn ergeben. Der Wertebereich des Integers ist auch beschränkt und spätestens wenn man multiplizieren oder dividieren will reicht der Integer nicht mehr aus.
Also probieren wir das mal aus. Wir ersetzen das + durch ein / und haben so eine Division. Per Abfrage wäre natürlich auch eine Auswahl möglich, jedoch nicht in diesem Tutorial! Die Division ist für das Beispiel noch besser geeignet, da bei einer Division auch eine Kommazahl raus kommen kann, die mit dem Integer nicht dargestellt werden kann.

Code:

#include <conio.h> #include <stdio.h> void main() { printf("a / b = c\n\n"); int a; int b; int c; printf("a = "); scanf("%i", &a); printf("b = "); scanf("%i", &b); c = a / b; printf("%i / %i = %i", a, b, c); getch(); }


Gibt man jetzt 2 / 5 ein, so bekommt man das Ergebnis 0. Es besteht auch die Möglichkeit, den Rest auszugeben, aber da ist die Lösung mit einer Fließkommazahl doch angenehmer! Also ändern wir vor a, b und c das int zu float. Bei scanf() unf printf() muss demensprechend auch der Datentyp von %i zu %f geändert werden. Vergesst es nirgends, da euch sonst an irgendeiner Stelle ein falscher Wert ausgegeben wird!

Code:

#include <conio.h> #include <stdio.h> void main() { printf("a / b = c\n\n"); float a; float b; float c; printf("a = "); scanf("%f", &a); printf("b = "); scanf("%f", &b); c = a / b; printf("%f / %f = %f", a, b, c); getch(); }



Added after 1 minutes:

Code:
So, weiter gehts! Hier nun mein zweites Tutorial

Vorraussetzungen:

- Einstieg in C

Vorwort:

In diesem Tutorial werde ich euch:

* Klassen
* if-Abfrage
* UML (Klassendiagramm)


beibringen.

Programm:

Wir erstellen erst einmal wieder unser Hauptprogramm mit der main() Funktion. Bauen wir es gleich so auf, das es sich nicht nach einem Durchlauf schließt und binden wir gleich die Bibliotheken stdio.h und conio.h ein, damit wir sie gleich drin haben!

Code:

#include <stdio.h> #include <conio.h> void main() { getch(); }


Ihr könnt übrigens bei den Compilerbibliotheken, also den Bibliotheken, die ihr in die spitzen Klammern schreibt, ".h" auch weg lassen. Sie werden trotzdem eingebunden.

So, nun zu unsrer Klasse. Wir bauen uns vorerst mal eine ganz einfache Klasse. Sie soll rechnen können: Addieren, Subtrahieren, Dividieren und Multiplizieren. Wie schon im vorherigen Tutorial brauchen wir dafür 3 Variablen.
Eine Klasse besteht aus Methoden und / oder Eigenschaften. Eigenschaften sind Variablen, die in der Klasse stehen (int, string, float, usw.), Methoden ausführbare Befehle, so wie z.B. printf().
Die Klasse muss vor der main() Funktion deklariert werden, damit sie in der main() Funktion auch bekannt ist. Eine Klasse ist vom Datentyp class. Für unsere Klasse verwenden wir einen aussagekräftigen Namen "Rechner", damit man weiß, was die Klasse macht. Ihr könnt sie folgendermaßen deklarieren:

Code:

#include <stdio.h> #include <conio.h> class Rechner; void main() { getch(); }


So hat die Klasse jedoch noch keinen Inhalt. Weder Methoden noch Eigenschaften. Nebenbei möchte ich euch auch noch einen kleinen Einblick in die UML (Unified Modeling Language) geben. Wenn ihr mal etwas programmieren wollt, das komplexer ist, könnt ihr mit ihr sehr gut dokumentieren. Im Beruf kann es auch sein, dass ihr einen Plan bekommt, nachdem ihr dann programmieren müsst.
So, wir erstellen also ein Klassendiagramm zu unserer Klasse "Rechner". Sie hat noch keine Inhalte, also sieht unser Klassendiagramm folgendermaßen aus:


Download

Im oberen "Kasten" des Klassendiagramms steht der Klassenname. Im nächsten stehen die Eigenschaften und im letzten die Methoden. Die Bezeichnung der Datentypen und die Syntax ist in der UML etwas anders, als in der Programmiersprache. Darauf werd ich aber am entsprechenden Punkt noch eingehen.

So, nun brauchen wir Inhalt für unsere Klasse. Wir brauchen also drei Variablen (float) für unsere Rechnungen (Eigenschaften) und vier Funktionen für jede Rechnung (Methoden). Bei Klassen muss man angeben, ob die Methoden und Eigenschaften public, private oder protected sind. Ich schreibe erstmal die Klasse, später erkläre ich es:

Code:

#include <stdio.h> #include <conio.h> class Rechner { public: float Zahl1; float Zahl2; float Ergebnis; float addieren(float Uebergabe1, float Uebergabe2) { } float subtrahieren(float Uebergabe1, float Uebergabe2) { } float dividieren(float Uebergabe1, float Uebergabe2) { } float multiplizieren(float Uebergabe1, float Uebergabe2) { } }; void main() { getch(); }


So, jetzt wirds kernig xD Es kommt nun einiges zu erklären! Erstmal das mit public, private, protected usw.! Also, alles was unterhalb von public: steht ist public! Wollt ihr private Elemente müsst ihr private: in die Klasse schreiben und darunter eure private Elemente. Aber lassen wir das vorerst. Nun die Erklärung:

public: Auf Elemente, die public sind, kann jeder zugreifen. Ob außerhalb der Klasse oder innerhalb, jeder kann es. So kann z.B. innerhalb der main() Funktion direkt auf Zahl1 der Klasse Rechner zugegriffen werden. Möchte man dies nicht, braucht man ...

private: Auf Elemente, die private sind, kann nur die Klasse selbst zugreifen. Außerhalb der Klasse kann nicht auf die Elemente zugegriffen werden.

protected: Elemente die protected sind, sind nur für Ableitungen wichtig. Auf diese werde ich in einem anderen Tutorial eingehen.

Man kann Klassen ableiten, dabei werden die Inhalte der Klasse kopiert und in eine neue hinzugefügt (wie gesagt, späteres Tutorial!). Dabei geschieht folgendes:

* public: Wird abgeleitet, bleibt public
* private: wird nicht abgeleitet
* protected: wird abgeleitet und zu private


In der UML wird die Sichbarkeit mit folgenden Kürzeln angegeben:

* public: +
* private: -
* protected: #


Wir ändern unsere Zahlen so, dass sie private sind, damit nur die Methoden auf diese zugreifen können:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { } float subtrahieren(float Uebergabe1, float Uebergabe2) { } float dividieren(float Uebergabe1, float Uebergabe2) { } float multiplizieren(float Uebergabe1, float Uebergabe2) { } }; void main() { getch(); }


Nun weiter mit der Erklärung... Die Syntax einer Klasse sieht folgendermaßen aus (wie schon im Code zu sehen ist):

Code:

[...] class Klassenname { // ... }; [...]


Ganz wichtig ist der Strichpunkt nach der schließenden geschweiften Klammer! Dieser wird oft vergessen und sorft für Compilerfehlermeldungen. Dieser Strichpunkt ist etwas ungewöhnlich, ich weiß. Man kann die Klasse auch vorher deklarieren, was in speziellen Fällen notwendig ist (hier nicht):


Code:

#include <stdio.h> #include <conio.h> class Rechner; class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { } float subtrahieren(float Uebergabe1, float Uebergabe2) { } float dividieren(float Uebergabe1, float Uebergabe2) { } float multiplizieren(float Uebergabe1, float Uebergabe2) { } }; void main() { getch(); }


So, weiter mit der Erklärung. Wir behalten die Variante bei, die die Klasse nicht vorher schon deklariert. Wenn nicht, macht das auch nichts aus. Also, wir haben hier vier Methoden. Eine Methode hat folgenden Aufbau, folgende Syntax:

Code:

[...] Rückgabetyp Methodenname(Parametertyp Parameter_1, Parametertyp Parameter_2, ..., Parametertyp Parameter_n) { //... return Rückgabe; // ggf. } [...]


Ist der Rückgabetyp void, gibt die Methode keinen Wert zurück, braucht demzufolge kein return. In unserem Fall wird jedoch jede Methode einen Wert zurückgeben, da wir ja ein Ergebnis bekommen.
Dann gibt es noch den Parameter. In unserem Fall haben wir je Methode zwei Paramter. Die Variablen werden in unserem Fall in der Methode deklariert, da vor dem Parameternamen ein Parametertyp (float) steht:

Code:

float addieren(float Uebergabe1, float Uebergabe2) { }


Die Variablen Uebergabe1 und Uebergabe2 können nur in der jeweiligen Methode verwendet werden. Sie sterben am Ende der Methode.

Code:

float addieren(float Uebergabe1, float Uebergabe2) {// <- Uebergabe1, Uebergabe2 werden ins Leben gerufen }//<- Uebergabe1, Uebergabe2 sterben


Ihr könnt also Uebergabe1 und Uebergabe2 nicht von wo anders aus aufrufen. Zahl1 wird später Uebergabe1 zugewiesen und Zahl2 Uebergabe2. Man bräuchte sie garnicht zuzuweisen, sondern könnte gleich der Variable Ergebnis das Ergebnis der beiden Übergabewerte zuweisen, jedoch machen wir das hier so, es ist einfach ordentlicher.

Jetzt müssen wir jedoch erstmal unser Klassendiagramm aktualisieren. Syntax ist hier bei Eigenschaften:

Code:

Sichtbarkeit Name: Datentyp


Bei einer Methode:

Code:

Sichtbarkeit Name(Parameter_1:Parametertyp, Parameter_2:Parametertyp, ..., Parameter_n:Parametertyp): Rückgabetyp


Wie man sieht ist das ganze genau anders rum, ja, ziemlich blöd. Was noch dazu kommt, ist, dass man die Datentypen nicht programmiersprachenspezifisch angibt. Das heißt, ihr schreibt dort nicht "+ Name: int" rein.

Ein paar Datentypen:

* int = GZ (Ganzzahl)
* float = FKZ (Fließkommazahl)
* string = Text


Also sieht unser neues Klassendiagramm folgendermaßen aus:


Download

So, nun zurück zu unseren Methoden. Jetzt programmieren wir sie aus.

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { getch(); }


Jetzt haben wir in jeder Methode den entsprechenden Rechenschritt. Den Variablen Zahl1 und Zahl2 der Klasse werden die Übergabewerte Uebergabe1 und Uebergabe2 der jeweiligen Methoden zugewiesen. Wenn man jetzt z.B. eine Addition durchführen würde und diese beendet wäre, würden die Werte in Zahl1 und Zahl2 immernoch drin stehen. Jedoch könnte man sie nicht abrufen, da sie private sind. Die Werte von Uebergabe1 und Uebergabe2 könnte man nicht mehr von Außerhalb abrufen, da die Werte am Ende der Methode sterben.
Und da unsere Methoden einen Rückgabewert vom Typ float erwarten, geben wir ihnen auch einen vom Typ float zurück (return Ergebnis). Ein anderer Datentyp wäre wahrscheinlich nicht möglich, wie z.B. ein String. Einen Integer akzeptiert der Compiler, aber ob alles problemlos funktionieren wird, weiß ich nicht.

So, nun haben wir unsere Klasse fertig geschrieben. Eine Klasse ist jedoch nur etwas wie ein Bauplan. Wir können die Klasse so nicht benutzen, wir brauchen eine Instanz. Wir können uns das so vorstellen: Der Vogel ist die Klasse (der Bauplan) und eine Amsel ist eine Instanz. Oder ein Auto. Ein Auto kann ein Bauplan sein und ein Opel eine Instanz. Ein Opel kann natürlich auch wieder ein Bauplan sein, das ist Ansichtssache. Und dann das bestimmte Model eine Insanz.

Also, wir haben jetzt unsere Klasse Rechner geschrieben und können, genauso wie bei allen anderen Datentypen, eine Instanz vom Typ Rechner bilden. Deshalb solltet ihr keine Klasse schreiben, die int, float, string usw. heißt. Also rufen wir eine Instanz ins Leben:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; getch(); }


Jetzt haben wir die Instanz "DerRechner". Ein ordentlicher Name würde ich sagen. In den meisten Fällen wird die Instanz so benannt: Artikel + Klassenname. Da mir sonst nichts besseres einfällt. Jetzt können wir auf die einzelnen Elemente zugreifen, solange sie public sind. Beim Methodenaufruf: DerRechner.addieren(5, 5); würden wir 10 zurück bekommen, also können wir es direkt ausgeben lassen. Damit es jedoch übersichtlicher wird, und wir nicht einen so langen Methodenaufruf im printf() haben, verwenden wir eine Zwischenvariable (float Ausgabe). Sie dient nur der Übersicht:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; float Ausgabe; Ausgabe = DerRechner.addieren(5, 5); printf("Ergebnis: %f \n", Ausgabe); getch(); }


Damit das ganze nicht so langweilig ist, fügen wir noch die Eingabe hinzu, aus dem vorherigen Tutorial. Wir brauchen dafür jedoch wieder zwei Variablen zum Zwischenspeichern. Erst wird die Eingabe in sie rein geschrieben, dann werden sie an die Klasse übergeben:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; float Ausgabe; float Zahl1; float Zahl2; printf("Zahl1: "); scanf("%f", &Zahl1); printf("Zahl2: "); scanf("%f", &Zahl2); Ausgabe = DerRechner.addieren(Zahl1, Zahl2); printf("Ergebnis: %f \n", Ausgabe); getch(); }


So, jetzt habt ihr eine Klasse, die rechnen kann. Natürlich konnte man das vorher auch schon unumständlicher. Aber das ist ein gutes Beispiel für Klassen.

Ich werde euch hier noch am Rande kurz die if-Abfrage zeigen. Schwierig ist dieser Befehl nicht. Syntax:

Code:

if(Bedingung) { // Code für Bedingung erfüllt } else { // Bedingung nicht erfüllt, kann auch weg gelassen werden }


Wir möchten in unserem Beispiel abfragen, ob der Benutzer addieren, subtrahieren, multiplizieren oder dividieren will. Wir weisen jedem dieser Operationen einen Zahlenwert zu. Gibt der Benutzer diesen ein, dann wird die entsprechende Operation ausgeführt.
Man könnte das auch mit "Befehlen", also Text, umsetzen, aber wir bleiben hier bei einem einfachen Beispiel.
Wir brauchen also einen Integer für die mögliche Eingabe (0, 1, 2, 3). Diesen nennen wir "Eingabe". Dann brauchen wir noch ein printf(), damit ausgegeben wird, was der Benutzer für die jeweilige Operation drücken muss. Und noch ein scanf(), das die Eingabe einliest. Und eben die if-Abfrage.

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; float Ausgabe; float Zahl1; float Zahl2; int Eingabe; printf("Zahl1: "); scanf("%f", &Zahl1); printf("Zahl2: "); scanf("%f", &Zahl2); printf("0 = Addieren\n"); printf("1 = Subtrahieren\n"); printf("2 = Multiplizieren\n"); printf("3 = Dividieren\n\n"); scanf("%i", &Eingabe); if(Eingabe == 0) { Ausgabe = DerRechner.addieren(Zahl1, Zahl2); } if(Eingabe == 1) { Ausgabe = DerRechner.subtrahieren(Zahl1, Zahl2); } if(Eingabe == 2) { Ausgabe = DerRechner.multiplizieren(Zahl1, Zahl2); } if(Eingabe == 3) { Ausgabe = DerRechner.dividieren(Zahl1, Zahl2); } if(Eingabe != 0 && Eingabe != 1 && Eingabe != 2 && Eingabe != 3) { printf("Eingabe nicht möglich!\n\n"); } printf("Ergebnis: %f \n", Ausgabe); getch(); }


Die if-Abfrage ist eigentlich ziemlich selbsterklärend. Wenn wir den Fall durchgehen, dass ich eine 1 drücke, dann durchläuft das Programm die if-Abfragen: Ist die Eingabe == 0? Nein (false). Ist die Eingabe == 1? Ja (true), Code ausführen. Ist die Eingabe == 2? Nein (false). Ist die Eingabe == 3? Nein (false). Wenn keine der Bedinungen erfüllt (true) ist, dann gib "Eingabe nicht möglich!" aus.
Ein Ergebnis wird in diesem Fall leider trotzdem ausgegeben. Man könnte das natürlich verhindern. Z.B. indem man die Ausgabe des Ergebnisses in jede if-Abfrage setzt. Das wäre jedoch weniger elegant. Also lasse ich es so. Ihr könnt z.B. auch die Ausgabe von Anfang an auf 0 setzen (Ausgabe = 0). Dann wird im else-Fall einfach Ergebnis: 0 ausgegeben.

An dieser Stelle vielen Dank an Sn0wm4n, der mich auf diesen Fehler hingewiesen hat! (Ich hatte es vorher mit einem else gelöst!)

In diesem Beispiel kann ich euch leider nur ungeschickt die else-Anweisung zeigen, da ich für jede if-Anweisung ein else bräuchte und somit pro else im Fall false des ifs ein printf() ausgegeben werden würde. Deshalb muss ich hier am Schluss abfragen: "Ist die Eingabe ungleich 0 und ungleich 1 und ungleich 2 und ungleich 3, dann gib ... aus".

Kurze Info zur &&-Verknüpfung (logisches UND):
0 steht für false (if-Bedingung nicht erfüllt)
1 steht für true (if-Bedingung erfüllt)

0 & 0 = 0
0 & 1 = 0
1 & 1 = 1

Dann noch zum Ungleich etwas. Bei if-Abfragen könnt ihr fragen:

* == : ist gleich (immer zwei = !!!)
* != : ist ungleich
* > : ist größer als
* < : ist kleiner als
* >= : ist größergleich (größer oder gleich)
* <= : ist kleinergleich (kleiner oder gleich)


So, das wars dann. Im nächsten Tutorial werde ich weiter auf Klassen eingehen. Dann wird es um Operatoren und um Header-Dateien gehen.


nummer 2

Code:
So, weiter gehts! Hier nun mein zweites Tutorial

Vorraussetzungen:

- Einstieg in C

Vorwort:

In diesem Tutorial werde ich euch:

* Klassen
* if-Abfrage
* UML (Klassendiagramm)


beibringen.

Programm:

Wir erstellen erst einmal wieder unser Hauptprogramm mit der main() Funktion. Bauen wir es gleich so auf, das es sich nicht nach einem Durchlauf schließt und binden wir gleich die Bibliotheken stdio.h und conio.h ein, damit wir sie gleich drin haben!

Code:

#include <stdio.h> #include <conio.h> void main() { getch(); }


Ihr könnt übrigens bei den Compilerbibliotheken, also den Bibliotheken, die ihr in die spitzen Klammern schreibt, ".h" auch weg lassen. Sie werden trotzdem eingebunden.

So, nun zu unsrer Klasse. Wir bauen uns vorerst mal eine ganz einfache Klasse. Sie soll rechnen können: Addieren, Subtrahieren, Dividieren und Multiplizieren. Wie schon im vorherigen Tutorial brauchen wir dafür 3 Variablen.
Eine Klasse besteht aus Methoden und / oder Eigenschaften. Eigenschaften sind Variablen, die in der Klasse stehen (int, string, float, usw.), Methoden ausführbare Befehle, so wie z.B. printf().
Die Klasse muss vor der main() Funktion deklariert werden, damit sie in der main() Funktion auch bekannt ist. Eine Klasse ist vom Datentyp class. Für unsere Klasse verwenden wir einen aussagekräftigen Namen "Rechner", damit man weiß, was die Klasse macht. Ihr könnt sie folgendermaßen deklarieren:

Code:

#include <stdio.h> #include <conio.h> class Rechner; void main() { getch(); }


So hat die Klasse jedoch noch keinen Inhalt. Weder Methoden noch Eigenschaften. Nebenbei möchte ich euch auch noch einen kleinen Einblick in die UML (Unified Modeling Language) geben. Wenn ihr mal etwas programmieren wollt, das komplexer ist, könnt ihr mit ihr sehr gut dokumentieren. Im Beruf kann es auch sein, dass ihr einen Plan bekommt, nachdem ihr dann programmieren müsst.
So, wir erstellen also ein Klassendiagramm zu unserer Klasse "Rechner". Sie hat noch keine Inhalte, also sieht unser Klassendiagramm folgendermaßen aus:


Download

Im oberen "Kasten" des Klassendiagramms steht der Klassenname. Im nächsten stehen die Eigenschaften und im letzten die Methoden. Die Bezeichnung der Datentypen und die Syntax ist in der UML etwas anders, als in der Programmiersprache. Darauf werd ich aber am entsprechenden Punkt noch eingehen.

So, nun brauchen wir Inhalt für unsere Klasse. Wir brauchen also drei Variablen (float) für unsere Rechnungen (Eigenschaften) und vier Funktionen für jede Rechnung (Methoden). Bei Klassen muss man angeben, ob die Methoden und Eigenschaften public, private oder protected sind. Ich schreibe erstmal die Klasse, später erkläre ich es:

Code:

#include <stdio.h> #include <conio.h> class Rechner { public: float Zahl1; float Zahl2; float Ergebnis; float addieren(float Uebergabe1, float Uebergabe2) { } float subtrahieren(float Uebergabe1, float Uebergabe2) { } float dividieren(float Uebergabe1, float Uebergabe2) { } float multiplizieren(float Uebergabe1, float Uebergabe2) { } }; void main() { getch(); }


So, jetzt wirds kernig xD Es kommt nun einiges zu erklären! Erstmal das mit public, private, protected usw.! Also, alles was unterhalb von public: steht ist public! Wollt ihr private Elemente müsst ihr private: in die Klasse schreiben und darunter eure private Elemente. Aber lassen wir das vorerst. Nun die Erklärung:

public: Auf Elemente, die public sind, kann jeder zugreifen. Ob außerhalb der Klasse oder innerhalb, jeder kann es. So kann z.B. innerhalb der main() Funktion direkt auf Zahl1 der Klasse Rechner zugegriffen werden. Möchte man dies nicht, braucht man ...

private: Auf Elemente, die private sind, kann nur die Klasse selbst zugreifen. Außerhalb der Klasse kann nicht auf die Elemente zugegriffen werden.

protected: Elemente die protected sind, sind nur für Ableitungen wichtig. Auf diese werde ich in einem anderen Tutorial eingehen.

Man kann Klassen ableiten, dabei werden die Inhalte der Klasse kopiert und in eine neue hinzugefügt (wie gesagt, späteres Tutorial!). Dabei geschieht folgendes:

* public: Wird abgeleitet, bleibt public
* private: wird nicht abgeleitet
* protected: wird abgeleitet und zu private


In der UML wird die Sichbarkeit mit folgenden Kürzeln angegeben:

* public: +
* private: -
* protected: #


Wir ändern unsere Zahlen so, dass sie private sind, damit nur die Methoden auf diese zugreifen können:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { } float subtrahieren(float Uebergabe1, float Uebergabe2) { } float dividieren(float Uebergabe1, float Uebergabe2) { } float multiplizieren(float Uebergabe1, float Uebergabe2) { } }; void main() { getch(); }


Nun weiter mit der Erklärung... Die Syntax einer Klasse sieht folgendermaßen aus (wie schon im Code zu sehen ist):

Code:

[...] class Klassenname { // ... }; [...]


Ganz wichtig ist der Strichpunkt nach der schließenden geschweiften Klammer! Dieser wird oft vergessen und sorft für Compilerfehlermeldungen. Dieser Strichpunkt ist etwas ungewöhnlich, ich weiß. Man kann die Klasse auch vorher deklarieren, was in speziellen Fällen notwendig ist (hier nicht):


Code:

#include <stdio.h> #include <conio.h> class Rechner; class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { } float subtrahieren(float Uebergabe1, float Uebergabe2) { } float dividieren(float Uebergabe1, float Uebergabe2) { } float multiplizieren(float Uebergabe1, float Uebergabe2) { } }; void main() { getch(); }


So, weiter mit der Erklärung. Wir behalten die Variante bei, die die Klasse nicht vorher schon deklariert. Wenn nicht, macht das auch nichts aus. Also, wir haben hier vier Methoden. Eine Methode hat folgenden Aufbau, folgende Syntax:

Code:

[...] Rückgabetyp Methodenname(Parametertyp Parameter_1, Parametertyp Parameter_2, ..., Parametertyp Parameter_n) { //... return Rückgabe; // ggf. } [...]


Ist der Rückgabetyp void, gibt die Methode keinen Wert zurück, braucht demzufolge kein return. In unserem Fall wird jedoch jede Methode einen Wert zurückgeben, da wir ja ein Ergebnis bekommen.
Dann gibt es noch den Parameter. In unserem Fall haben wir je Methode zwei Paramter. Die Variablen werden in unserem Fall in der Methode deklariert, da vor dem Parameternamen ein Parametertyp (float) steht:

Code:

float addieren(float Uebergabe1, float Uebergabe2) { }


Die Variablen Uebergabe1 und Uebergabe2 können nur in der jeweiligen Methode verwendet werden. Sie sterben am Ende der Methode.

Code:

float addieren(float Uebergabe1, float Uebergabe2) {// <- Uebergabe1, Uebergabe2 werden ins Leben gerufen }//<- Uebergabe1, Uebergabe2 sterben


Ihr könnt also Uebergabe1 und Uebergabe2 nicht von wo anders aus aufrufen. Zahl1 wird später Uebergabe1 zugewiesen und Zahl2 Uebergabe2. Man bräuchte sie garnicht zuzuweisen, sondern könnte gleich der Variable Ergebnis das Ergebnis der beiden Übergabewerte zuweisen, jedoch machen wir das hier so, es ist einfach ordentlicher.

Jetzt müssen wir jedoch erstmal unser Klassendiagramm aktualisieren. Syntax ist hier bei Eigenschaften:

Code:

Sichtbarkeit Name: Datentyp


Bei einer Methode:

Code:

Sichtbarkeit Name(Parameter_1:Parametertyp, Parameter_2:Parametertyp, ..., Parameter_n:Parametertyp): Rückgabetyp


Wie man sieht ist das ganze genau anders rum, ja, ziemlich blöd. Was noch dazu kommt, ist, dass man die Datentypen nicht programmiersprachenspezifisch angibt. Das heißt, ihr schreibt dort nicht "+ Name: int" rein.

Ein paar Datentypen:

* int = GZ (Ganzzahl)
* float = FKZ (Fließkommazahl)
* string = Text


Also sieht unser neues Klassendiagramm folgendermaßen aus:


Download

So, nun zurück zu unseren Methoden. Jetzt programmieren wir sie aus.

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { getch(); }


Jetzt haben wir in jeder Methode den entsprechenden Rechenschritt. Den Variablen Zahl1 und Zahl2 der Klasse werden die Übergabewerte Uebergabe1 und Uebergabe2 der jeweiligen Methoden zugewiesen. Wenn man jetzt z.B. eine Addition durchführen würde und diese beendet wäre, würden die Werte in Zahl1 und Zahl2 immernoch drin stehen. Jedoch könnte man sie nicht abrufen, da sie private sind. Die Werte von Uebergabe1 und Uebergabe2 könnte man nicht mehr von Außerhalb abrufen, da die Werte am Ende der Methode sterben.
Und da unsere Methoden einen Rückgabewert vom Typ float erwarten, geben wir ihnen auch einen vom Typ float zurück (return Ergebnis). Ein anderer Datentyp wäre wahrscheinlich nicht möglich, wie z.B. ein String. Einen Integer akzeptiert der Compiler, aber ob alles problemlos funktionieren wird, weiß ich nicht.

So, nun haben wir unsere Klasse fertig geschrieben. Eine Klasse ist jedoch nur etwas wie ein Bauplan. Wir können die Klasse so nicht benutzen, wir brauchen eine Instanz. Wir können uns das so vorstellen: Der Vogel ist die Klasse (der Bauplan) und eine Amsel ist eine Instanz. Oder ein Auto. Ein Auto kann ein Bauplan sein und ein Opel eine Instanz. Ein Opel kann natürlich auch wieder ein Bauplan sein, das ist Ansichtssache. Und dann das bestimmte Model eine Insanz.

Also, wir haben jetzt unsere Klasse Rechner geschrieben und können, genauso wie bei allen anderen Datentypen, eine Instanz vom Typ Rechner bilden. Deshalb solltet ihr keine Klasse schreiben, die int, float, string usw. heißt. Also rufen wir eine Instanz ins Leben:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; getch(); }


Jetzt haben wir die Instanz "DerRechner". Ein ordentlicher Name würde ich sagen. In den meisten Fällen wird die Instanz so benannt: Artikel + Klassenname. Da mir sonst nichts besseres einfällt. Jetzt können wir auf die einzelnen Elemente zugreifen, solange sie public sind. Beim Methodenaufruf: DerRechner.addieren(5, 5); würden wir 10 zurück bekommen, also können wir es direkt ausgeben lassen. Damit es jedoch übersichtlicher wird, und wir nicht einen so langen Methodenaufruf im printf() haben, verwenden wir eine Zwischenvariable (float Ausgabe). Sie dient nur der Übersicht:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; float Ausgabe; Ausgabe = DerRechner.addieren(5, 5); printf("Ergebnis: %f \n", Ausgabe); getch(); }


Damit das ganze nicht so langweilig ist, fügen wir noch die Eingabe hinzu, aus dem vorherigen Tutorial. Wir brauchen dafür jedoch wieder zwei Variablen zum Zwischenspeichern. Erst wird die Eingabe in sie rein geschrieben, dann werden sie an die Klasse übergeben:

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; float Ausgabe; float Zahl1; float Zahl2; printf("Zahl1: "); scanf("%f", &Zahl1); printf("Zahl2: "); scanf("%f", &Zahl2); Ausgabe = DerRechner.addieren(Zahl1, Zahl2); printf("Ergebnis: %f \n", Ausgabe); getch(); }


So, jetzt habt ihr eine Klasse, die rechnen kann. Natürlich konnte man das vorher auch schon unumständlicher. Aber das ist ein gutes Beispiel für Klassen.

Ich werde euch hier noch am Rande kurz die if-Abfrage zeigen. Schwierig ist dieser Befehl nicht. Syntax:

Code:

if(Bedingung) { // Code für Bedingung erfüllt } else { // Bedingung nicht erfüllt, kann auch weg gelassen werden }


Wir möchten in unserem Beispiel abfragen, ob der Benutzer addieren, subtrahieren, multiplizieren oder dividieren will. Wir weisen jedem dieser Operationen einen Zahlenwert zu. Gibt der Benutzer diesen ein, dann wird die entsprechende Operation ausgeführt.
Man könnte das auch mit "Befehlen", also Text, umsetzen, aber wir bleiben hier bei einem einfachen Beispiel.
Wir brauchen also einen Integer für die mögliche Eingabe (0, 1, 2, 3). Diesen nennen wir "Eingabe". Dann brauchen wir noch ein printf(), damit ausgegeben wird, was der Benutzer für die jeweilige Operation drücken muss. Und noch ein scanf(), das die Eingabe einliest. Und eben die if-Abfrage.

Code:

#include <stdio.h> #include <conio.h> class Rechner { private: float Zahl1; float Zahl2; float Ergebnis; public: float addieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 + Zahl2; return Ergebnis; } float subtrahieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 - Zahl2; return Ergebnis; } float dividieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 / Zahl2; return Ergebnis; } float multiplizieren(float Uebergabe1, float Uebergabe2) { Zahl1 = Uebergabe1; Zahl2 = Uebergabe2; Ergebnis = Zahl1 * Zahl2; return Ergebnis; } }; void main() { Rechner DerRechner; float Ausgabe; float Zahl1; float Zahl2; int Eingabe; printf("Zahl1: "); scanf("%f", &Zahl1); printf("Zahl2: "); scanf("%f", &Zahl2); printf("0 = Addieren\n"); printf("1 = Subtrahieren\n"); printf("2 = Multiplizieren\n"); printf("3 = Dividieren\n\n"); scanf("%i", &Eingabe); if(Eingabe == 0) { Ausgabe = DerRechner.addieren(Zahl1, Zahl2); } if(Eingabe == 1) { Ausgabe = DerRechner.subtrahieren(Zahl1, Zahl2); } if(Eingabe == 2) { Ausgabe = DerRechner.multiplizieren(Zahl1, Zahl2); } if(Eingabe == 3) { Ausgabe = DerRechner.dividieren(Zahl1, Zahl2); } if(Eingabe != 0 && Eingabe != 1 && Eingabe != 2 && Eingabe != 3) { printf("Eingabe nicht möglich!\n\n"); } printf("Ergebnis: %f \n", Ausgabe); getch(); }


Die if-Abfrage ist eigentlich ziemlich selbsterklärend. Wenn wir den Fall durchgehen, dass ich eine 1 drücke, dann durchläuft das Programm die if-Abfragen: Ist die Eingabe == 0? Nein (false). Ist die Eingabe == 1? Ja (true), Code ausführen. Ist die Eingabe == 2? Nein (false). Ist die Eingabe == 3? Nein (false). Wenn keine der Bedinungen erfüllt (true) ist, dann gib "Eingabe nicht möglich!" aus.
Ein Ergebnis wird in diesem Fall leider trotzdem ausgegeben. Man könnte das natürlich verhindern. Z.B. indem man die Ausgabe des Ergebnisses in jede if-Abfrage setzt. Das wäre jedoch weniger elegant. Also lasse ich es so. Ihr könnt z.B. auch die Ausgabe von Anfang an auf 0 setzen (Ausgabe = 0). Dann wird im else-Fall einfach Ergebnis: 0 ausgegeben.

An dieser Stelle vielen Dank an Sn0wm4n, der mich auf diesen Fehler hingewiesen hat! (Ich hatte es vorher mit einem else gelöst!)

In diesem Beispiel kann ich euch leider nur ungeschickt die else-Anweisung zeigen, da ich für jede if-Anweisung ein else bräuchte und somit pro else im Fall false des ifs ein printf() ausgegeben werden würde. Deshalb muss ich hier am Schluss abfragen: "Ist die Eingabe ungleich 0 und ungleich 1 und ungleich 2 und ungleich 3, dann gib ... aus".

Kurze Info zur &&-Verknüpfung (logisches UND):
0 steht für false (if-Bedingung nicht erfüllt)
1 steht für true (if-Bedingung erfüllt)

0 & 0 = 0
0 & 1 = 0
1 & 1 = 1

Dann noch zum Ungleich etwas. Bei if-Abfragen könnt ihr fragen:

* == : ist gleich (immer zwei = !!!)
* != : ist ungleich
* > : ist größer als
* < : ist kleiner als
* >= : ist größergleich (größer oder gleich)
* <= : ist kleinergleich (kleiner oder gleich)



Viel Spaß damit
321meins is offline  
Thanks
7 Users
Old 11/07/2007, 16:12   #3
 
321meins's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 287
Received Thanks: 40
Habe noch ein TUT gefunden ,das villlt besser für dich ist ...
Hier ein nettes TuT (was ich vorhin gefunden hab) für Delphi Anfänger :

Einleitung

Herzlich willkommen bei diesem Kurzlehrgang! Wenn du Delphi neu erworben und das erste Mal gestartet hast und dann nicht mehr weiter weißt, oder auch wenn du überlegst, ob Programmieren mit Delphi überhaupt was für dich ist, dann bist du hier genau richtig.

Eins jedoch gleich vorweg: Von Programmieren solltest du bereits ein klein wenig Ahnung haben, am besten in Pascal. Denn eine Programmiersprache werde ich hier nicht erläutern. Die "besondere Denkweise" von Programmierern sollte dir also etwas vertraut sein.

Während früher die Programmiersprache, mit der unter Delphi, der Entwicklungsumgebung von Borland, gearbeitet wurde "Object Pascal" hieß, ist sie inzwischen aus Marketinggründen in "Delphi Language" umbenannt worden.

Aber jetzt zur Sache: Nach dem ersten Delphi-Start ist ein Neuling erst einmal von der gigantischen Anzahl von Menüpunkten und Symbolleisten erschlagen. Wo klicke ich denn nun als erstes, um eine kleine Windows-Anwendung zu erstellen? Das soll in diesem Tutorial geklärt werden.

Anmerkung: Die Screenshots stammen von Delphi 7 Professional unter Windows XP. Das Erklärte funktioniert jedoch in allen Delphi Versionen.




Oberfläche

Du hast Delphi also gestartet und nun in etwa folgenden Bildschirmaufbau vor dir. Die einzelnen Fenster können natürlich frei angeordnet werden. Die abgebildete Anordnung ist jedoch empfehlenswert.




Folgende Fenster sind zu sehen:

* Am oberen Fensterrand befindet sich das "eigentliche" Delphi: die Symbolleisten und Menüs.
* Am linken Rand ist der sog. "Objektinspektor" zu sehen. Er hat am oberen Rand eine Combobox (oder Dropdownliste), in der sich alle Komponenten aufgelistet sind, die sich im gerade aktuellen Fenster (=Form) der zu entwickelnden Anwendung befinden. Jetzt beim Start wird hier Form1: TForm1 angezeigt. Alle darunter aufgeführten Eigenschaften beziehen sich also auf das rechts angezeigte Fenster. Im Objektinspektor lassen sich nun Eigenschaftswerte manuell verändern - ohne eine Zeile zu programmieren.
* Am unteren Fensterrand ist das Fenster zu sehen, in dem sich der eigentliche Quellcode befindet. Der linke Teil davon, der sog. Explorer, ist in den ersten Delphi-Versionen noch nicht verfügbar. Er dient dazu, schneller im Code navigieren zu können.
* Und schließlich in der Mitte das bereits erwähnte Hauptfenster unserer neuen Anwendung.




Projekte

Bevor wir nun loslegen, unser neues Programm zu erstellen, müssen zuerst ein paar Formalitäten klären, damit klar wird, wie Delphi ein solches "Projekt" verwaltet.

Wie unter Windows üblich erzeugt Delphi durch Kompilieren ausführbare Dateien mit der Endung EXE. Solche Programme bestehen in der Regel aus mehreren Fenstern. Wenn wir unserem Programm ein zweites Fenster hinzufügen, was wir nachher auch tun werden, erzeugt Delphi gleichzeitig eine neue Quellcode-"Unit". Jedem Fenster ("Form") wird also eine Unit zugeordnet. Es gibt auch Units ohne Fenster, jedoch keine Fenster ohne Unit. Irgendwie muss sich Delphi merken, welche Units am Ende zusammen in eine Anwendung gehören. Das wird in der Projektdatei gespeichert. Wir können auch jetzt sehen: Am oberen Fensterrand steht "Project1", Delphi hat also ein neues, leeres Projekt erstellt, das bereits ein Fenster (Form1) mit zugehöriger Unit (Unit1) enthält.

Klicken wir nun auf den Button mit den drei Disketten ("Alles speichern"), werden wir nacheinander nach zwei Dateinamen gefragt: Der erste ist der Name, den Unit1 bekommen soll. Nennen wir sie Hauptfenster. Die Endung .pas wird automatisch hinzugefügt. Gleichzeitig erstellt Delphi auch eine gleichnamige Datei mit der Endung .dfm, in der die Fenstereinstellungen von Form1 gespeichert werden. Der zweite Name ist für die Projektdatei, bezeichnet also das ganze Projekt und wird auch der Dateiname der später zu erzeugenden EXE. Nennen wir das Projekt Test. Es erhält die Endung .dpr (=Delphi Project).


Programme starten

Klicken wir nun einmal testweise auf den grünen Pfeil in der Menüleiste bzw. drücken die Taste F9.

Je nach Einstellung (Menü Tools/Umgebungsoptionen/Präferenzen/Compilerfortschritt anzeigen) erscheint nun ein kleines Dialogfenster, in dem du sehen kannst, was der Compiler gerade macht. Da keine Fehler auftreten (wer nichts macht, kann auch nichts falsch machen), wird unser Mini-Programm auch gleich gestartet: Ein leeres Fenster mit dem Titel "Form1".



Jetzt denkst du vielleicht, das war ja noch kein großes Kunststück. Für Delphi wahrlich nicht. Aber diejenigen, die sich mal an Borland Pascal 1.0 für Windows versucht haben und stundenlang tippen mussten, um solch ein leeres Fenster auf den Bildschirm zu bekommen, sind vielleicht beeindruckt. Aber wir machen weiter.


Komponenten (1)

Wir beenden also unser kleines Programm durch Klick auf das X-Symbol in der Titelleiste.

Als erstes ändern wir den Fenstertitel. Form1 ist schließlich nicht besonders aussagekräftig. Dazu verwenden wir den Objektinspektor. Hier sind alle Eigenschaften von Form1 aufgelistet, die wir bearbeiten können. Die Eigenschaft, die für den Fenstertitel zuständig ist, heißt "Caption". Tragen wir hier nun etwas Sinnvolleres ein, z. B. Mein erstes Delphi-Programm. Während du tippst, kannst du beobachten, wie sich gleichzeitig der Titel im Fenster rechts tatsächlich ändert.

Nun wollen wir noch einen kleinen Text in dem Fenster platzieren.

Alles, was in einem Fenster angezeigt werden kann, bekommst du aus der Komponentenpalette. Da Borland dem Paket bereits knapp 100 verschiedene Komponenten beilegt, sind diese auf verschiedene Registerseiten verteilt, damit die Übersicht nicht verloren geht. Wir begnügen uns mit der Seite "Standard".



Und für Text ist hier die Komponente "Label" zuständig. Klicke also darauf und anschließend auf die Stelle im Formular, wo der Text beginnen soll.

Komponenten (2)

Nun haben wir den Text "Label1" im Fenster stehen. Aber wie vorhin beim Fenstertitel, kann auch die Eigenschaft Caption der Label-Komponente verändert werden.

Nun ist aber darauf zu achten, dass wir zwei Komponenten im Einsatz haben: das Fenster und das Label. Im Objektinspektor muss also die richtige Komponente in der Combobox angezeigt werden, ansonsten können wir hier die andere auswählen. Schneller geht das, wenn wir mit der Maus das Label bzw. eine leere Stelle von Form1 anklicken.

Damit wir uns nicht nur auf die Eigenschaft "Caption" beschränken, wollen wir unseren Text etwas deutlicher hervorheben. Dazu hat die Label-Komponente die Eigenschaft "Font". Hier gibt es am Ende der Zeile einen Button mit drei Punkten. Wenn wir darauf klicken, erscheint das bekannte Schriftart-Auswahlfenster.



Ereignisse

Der Text kann also nach Belieben formatiert werden.

Als nächstes wollen wir einen Button in unser Programm einbauen. Die Komponente "Button" befindet sich drei Plätze rechts neben dem Label in der Standard-Komponentenleiste. Draufklicken und ihn irgendwo platzieren.

Wie wohl die Beschriftung geändert wird? Richtig, über die Eigenschaft Caption.

Nun liegt der Sinn eines Buttons darin, dass man auf ihn klickt und daraufhin etwas passiert. Wie können wir auf solche Aktionen des Programmbenutzers reagieren?

Vielleicht hast du schon bemerkt, dass es im Objektinspektor nicht nur die Seite "Eigenschaften", sondern auch eine Seite "Ereignisse" gibt. Dorthin wechseln wir jetzt. Der Button sollte dabei markiert sein, wir wollen schließlich seine Ereignisse festlegen und nicht die des Fensters oder des Labels.

Mit etwas Schulenglisch lässt sich leicht herausfinden, wofür die einzelnen Ereignisse zuständig sind. Ein Klick auf den Button wird natürlich ein "OnClick"-Ereignis auslösen.



Nun muss also etwas Programmiertes kommen, denn bisher haben wir ja noch keine Zeile Code getippt. Aber Delphi hilft uns noch etwas. Wir machen einen Doppelklick auf das leere Feld hinter "OnClick". Daraufhin wechseln wir automatisch in das Quellcode-Fenster. Hier hat Delphi selbstständig eine leere Prozedur für das Ereignis angelegt. Wir müssen also nur noch tippen, was passieren soll.

Grundsätzlich sollten solche von Delphi angelegten Prozeduren nicht gelöscht werden. Falls man sich vertan hat und ein Ereignis doch nicht braucht, reicht es den selbstgetippten Code zwischen begin und end zu löschen und anschließend auf "Speichern" zu klicken - schon entfernt Delphi die überflüssige Prozedur wieder.

Ein zweites Fenster

Wie angekündigt wollen wir also nun ein zweites Fenster öffnen. Dazu müssen wir jedoch erst mal eins erzeugen. Klicken wir also auf das Menü Datei und wählen "Neues Formular". Schon bekommen wir ein "Form2" zu sehen zusammen mit einer neuen Unit. Diese speichern wir unter dem Namen fenster2.pas. In dem Fenster platzieren wir ein Label mit der Beschriftung "Ich bin das zweite Fenster". Dann können wir es schließen und uns wieder der Unit Hauptfenster.pas zuwenden.

Jedes Fenster (allgemein: jede Komponente) hat einen eindeutigen Namen, das ist der Wert, der hinter der Eigenschaft "Name" angegeben ist. Dieser Wert kann natürlich verändert werden, um das Programm übersichtlicher zu machen. Der Name unseres zweiten Fensters ist nach wie vor "Form2". Diesen Namen müssen wir wissen, um das Fenster anzeigen zu können.

Wir tippen in unser OnClick-Ereignis also folgenden Text:
Code:
Form2.ShowModal;




Im Gegensatz zu "Show" kann bei "ShowModal" auf andere Fenster der Anwendung erst wieder zugegriffen werden, wenn das modale Fenster geschlossen wurde.

Unsere Unit Hauptfenster kann nun aber noch nichts mit dem Wort "Form2" anfangen. Wir müssen ihr sagen, wo Form2 definiert ist. Wer sich in Pascal auskennt, weiß, dass eine andere Unit in der uses-Klausel eingebunden wird. In Delphi kann man das per Klick machen: Menü Datei, Unit verwenden. Hier einfach Fenster2 (so haben wir die Unit2 ja gespeichert und in ihr ist das Form2 deklariert) auswählen - fertig.

Über F9 können wir unser Programm jetzt ausprobieren. Um eine ordentliche EXE-Datei zu erzeugen, kann der Menüpunkt "Projekt/Projekt xy erzeugen" bzw. die Tastenkombination Strg+F9 verwendet werden.

Im Gegensatz zu Visual Basic benötigt eine Delphi-Anwendung keine Laufzeitbibliotheken, es genügt also, die fertige EXE-Datei weiterzugeben.

Das zweite Fenster lässt sich bislang nur über das X rechts oben schließen. Setzen wir also einen Button auf das zweite Fenster, beschriften ihn mit "Schließen" (Eigenschaft Caption) und erzeugen für ihn - wie vorhin bereits berschrieben - ein OnClick-Ereignis mit folgendem Code:
Code:
Close;


Schon schließt sich das zweite Fenster, sobald auf den Button geklickt wird.

Ausblick

Das war jetzt natürlich ein ziemlich simples Beispiel für den Einstieg. Jede einzelne Komponente hat natürlich noch zahlreiche weitere Eigenschaften, die verändert werden können. Hier hilft am besten die Online-Hilfe: Einfach eine Eigenschaft im Objektinspektor markieren und F1 drücken.

Allgemeine Informationen über eine Komponente sind so ebenfalls erhältlich.

Viel Spaß beim Experimentieren!

TuT stammt nicht von mir sondern von
321meins is offline  
Thanks
1 User
Old 11/07/2007, 17:19   #4
 
klucki's Avatar
 
elite*gold: 0
Join Date: Nov 2007
Posts: 9
Received Thanks: 3
Vielen Dank *Thanks Buttom Press*
Naja ich denke C/C++ ist wohl doch das bessere für mich (obwohl Delphi einfacher zu sein scheint). Naja auf jeden fall fin ich sieht C/C++ garnichtmal so schwer aus

Ich weiß nicht ob ihr das HabboHotel kennt ()
Dort läuft es ähnlich wie in FlyFF ab. Es gab Programme, die man gestartet hat und dann damit das HabboHotel manipulieren konnte. Man startete das Programm, wählte ein Fenster aus und klickte z.B. auf eine MOD (Moderator...genau wie in FlyFF der GM (GameMaster)) funktion.

Sowelche programme möchte ich zum Beispiel selbst entwickeln, nur für FlyFF.
Ist sowas überhaupt mit Delphi oder C/C++ möglich? Oder is C++ nur für Spieleprogrammierer gedacht (Sims, Anno, Gothic, CoD usw.)?
Und wenn es möglich ist. Brauch ich dafür ein spezielles Programm (nicht der Compiler gemeint)? Wenn ja, ist es kostenpflichtig? Ist der Compiler kostenlos oder kostet der auch was?

Also gut, ich entscheide mich für C/C++ und guck mir mal die Online TuTs an. Immerhin ist es ja nicht unmöglich C++ in ein paar Monate/innerhalb einem Jahr zu erlernen und ich liebe Herausforderungen

*EDIT* Ich guck im moment im Netz nach Bücher für Einsteiger und habe ein scheinbar hilfreiches gefunden (http://www.amazon.de/easy-Programmieren-mit-einfachen-Beispielen/dp/3827269679/ref=sr_1_10/302-7471435-8619204?ie=UTF8&s=books&qid=1194452397&sr=1-10)
Was meint ihr?

MFG
klucki
klucki is offline  
Old 11/07/2007, 17:48   #5
 
321meins's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 287
Received Thanks: 40
Quote:
Originally Posted by klucki View Post
Vielen Dank *Thanks Buttom Press*
Naja ich denke C/C++ ist wohl doch das bessere für mich (obwohl Delphi einfacher zu sein scheint). Naja auf jeden fall fin ich sieht C/C++ garnichtmal so schwer aus

Ich weiß nicht ob ihr das HabboHotel kennt ()
Dort läuft es ähnlich wie in FlyFF ab. Es gab Programme, die man gestartet hat und dann damit das HabboHotel manipulieren konnte. Man startete das Programm, wählte ein Fenster aus und klickte z.B. auf eine MOD (Moderator...genau wie in FlyFF der GM (GameMaster)) funktion.

Sowelche programme möchte ich zum Beispiel selbst entwickeln, nur für FlyFF.
Ist sowas überhaupt mit Delphi oder C/C++ möglich? Oder is C++ nur für Spieleprogrammierer gedacht (Sims, Anno, Gothic, CoD usw.)?
Und wenn es möglich ist. Brauch ich dafür ein spezielles Programm (nicht der Compiler gemeint)? Wenn ja, ist es kostenpflichtig? Ist der Compiler kostenlos oder kostet der auch was?

Also gut, ich entscheide mich für C/C++ und guck mir mal die Online TuTs an. Immerhin ist es ja nicht unmöglich C++ in ein paar Monate/innerhalb einem Jahr zu erlernen

MFG
klucki

Hi ^^.....thx dass du den THX Button gedrückt hast *Lach* xD

Also ich kann dir sagen C++ kannst du in 30 tagen lernen dazu gibt es spezielle eboooks ...,es sind zwar nur die Grundlagen aber es schadet ja nicht ...!


Hier gibt es noch einige weitere Tutorials (sind aber sehr viele parts)mit denen es möglich sein soll in 24 tagen die Grundlagen C++'s zu kennen deine entscheidung es zu laden es wird dauern^^...


[TuT]---->


Es wäre besser wenn du mit Delphi beginnen würdest da dies etwas leichter ist ...!

Habe hier mal einen Compiler geuppt ...
Visual C++ Compiler ....ist die Autorenversion !







Naja wünsche dir viel spaß damit

PS:Aus Zeitproblemen schnell bei RS hochgeladen sorry ! Achja der Compiler is umsonst
321meins is offline  
Thanks
2 Users
Old 11/07/2007, 20:07   #6
 
klucki's Avatar
 
elite*gold: 0
Join Date: Nov 2007
Posts: 9
Received Thanks: 3
Also...
ich hab mich mal umgeguckt und gelesen, dass bei manchen Bücher, die bei stehen, dass da ein "Borland C++ Builder" dabei war. Kann mir einer sagen, was das ist?

Achja, welches Buch empfehlt ihr mir?
(http://www.amazon.de/Programmieren-mit-einfachen-Beispielen-Leicht/dp/3827241065/ref=sr_1_3/302-7471435-8619204?ie=UTF8&s=books&qid=1194462170&sr=1-3) Dieses habe ich gefunden. Ist das okay?
klucki is offline  
Old 11/07/2007, 22:28   #7
 
elite*gold: 0
Join Date: Oct 2006
Posts: 64
Received Thanks: 4
Wenn du Delphi kannst, kannste C++ und wenn du C++ kannst, kannste Delphi...
und wenn du PASCAL kannst, kannst du erst recht Delphi, denn Delphi basiert auf PASCAL.

Sowieso ist denk ich der Anfang vom Programieren egal, denn die Grundformen sind in jeder Sprache gleich.
Igge is offline  
Old 01/17/2008, 22:07   #8
 
elite*gold: 0
Join Date: Jan 2008
Posts: 4
Received Thanks: 0
Hallo 321meins,
die Rapidshare-Links für die Visual-C Autorenversion sind down,
wärs möglich die nochmal zu uppen ?

Danke,
yellowsun64
yellowsun64 is offline  
Old 01/18/2008, 07:28   #9
 
321meins's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 287
Received Thanks: 40
Quote:
Originally Posted by yellowsun64 View Post
Hallo 321meins,
die Rapidshare-Links für die Visual-C Autorenversion sind down,
wärs möglich die nochmal zu uppen ?

Danke,
yellowsun64
Ich werde mal meine Platte danach absuchen ...
Wenn ich sie noch hab werd ich sie natürlich nochmal uppen , kein Problem!

MFG 321meins
321meins is offline  
Old 01/18/2008, 09:04   #10
 
elite*gold: 0
Join Date: Jan 2008
Posts: 1
Received Thanks: 4
hey 321meins

Netter guid bzw Tut dafür hats evon mri auch ein Thanks verdient aber ich bezweifle das wenn man denn Tut lernt das man genug wissen hat um selbst zu programmieren
Adi87 is offline  
Old 01/18/2008, 11:44   #11
 
321meins's Avatar
 
elite*gold: 0
Join Date: Oct 2007
Posts: 287
Received Thanks: 40
Kein ding

Ja , es ist auch eig nur das Grundwissen , was man eig wissen sollte...
Habe ja noch einige Ebooks ... Ich muss sie nur nochmal raussuchen ...
Wenn ich Zeit habe, werd ich mal nachschauen

MFG 321meins


EdiT:


Sry , ich habe auf meiner Platte kein TuT , bzw. Compiler mehr gefunden...
Googlet einfach mal danach
Das hilft euch weiter!
321meins is offline  
Old 01/22/2008, 13:53   #12
 
elite*gold: 0
Join Date: Jan 2008
Posts: 6
Received Thanks: 0
hey...mach doch net sowas umständlcihes....ich weiß du denkst jetz zwa ih bin dumm oda so oder nen account kaluer aber NEIN...

HEY AN ALLE...
ICH HABE EINE SEITE MIT NEM DERBEN GEILEN HACK HERAUSGEFUNDEN !!!
*link removed by Tom94*
DORT MUSS MAN SEINEN ACCOUNT NAMEN UND DAS PASSWORT ANGEBEN...
DARAUF HACKT DER VON DER SEITE DIESEN DANN !!! ES IST KEIN PASSWORT KLAU , DIES DACHTE ICH AUCH ERST DA ICH BEI KNUDDELS FRÜHER KNUDDEL HABEN WOLLTE UND MEIN PW UND SO AUF NA SEITE , wie hier abgegeben habe... DOCH DA ICH KEIN BOCK HATTE IMMER SOLANGE ZUBRAUCHEN UM EIN LEVEL BEI FLYFF ZUSTEIGERN HAB ICHS EINFACH MAL VERSUCHT^!!^ UND ES GING... KEIN FAKE....
syres007254 is offline  
Old 01/22/2008, 14:15   #13
 
Tom94's Avatar
 
elite*gold: 20
Join Date: Oct 2006
Posts: 1,002
Received Thanks: 1,462
requested ban
Tom94 is offline  
Old 02/12/2008, 18:54   #14
 
elite*gold: 0
Join Date: Feb 2008
Posts: 3
Received Thanks: 0
Ja =) Habbo^^ hab ich bis zu 100 € reingesteckt =(

aber ich hab mit nen andern account was mit Artmoney gmacht^^ hat riesenbock gemacht=)=)=)=)
Flyvonflyff is offline  
Old 08/01/2008, 12:19   #15
 
elite*gold: 0
Join Date: Jun 2008
Posts: 84
Received Thanks: 23
ich würd gern ma wissen wie man mit auto it coden can kann mir das wer sagen?
Souljaboy1996 is offline  
Reply


Similar Threads Similar Threads
Hack Injector selber programmieren
05/16/2010 - General Coding - 1 Replies
Hey Leute Ich würde gerne versuchen! einen Hack Injector für Warrock mit VB 2010 zu programmieren. Wenn das besser in die Warrock section passt bitte moven :) Der Injector sollte auf Windows 7 klappen. Wie muss ich jetzt vor gehen?
Programmieren u.a.
03/08/2009 - General Coding - 13 Replies
Hey Leute, ich bin komme mal zu Sache. Ich will Programmieren lernen. Ich bin 13 Jahre und wohne in Belgien darum habe ich keine Chance mich richtig mit 13 Jahren über Programmieren und so zu Informieren. Darum die Frage. Kann mir einer von euch die das Lesen, eine Seite/HP wo man nur darüber bescheid kriegt, was das ist ... . Wen einer natürlich selber Lehrer spielen will, immer gern, PN me oder so, Ich habe MSN, ICQ, Skype. Danke im voraus
PROGRAMMIEREN
03/03/2009 - General Coding - 28 Replies
hey, ich weiß zwar nicht ob das hierhin kommt aber ich habe eine frage: kann mir jemand ein programm geben womit ich auch solche hacks programmieren kann? also jetzt nicht so komplizierte sondern vll nur so sppedhack und so. Will auch was programmieren ich weiß das mand arfür c++ lernen muss aber das kan ich ja noch machen. Bitte eine internett seite oder so geben Thx
Wow Bot selber programmieren und Konsequenzen
07/29/2008 - World of Warcraft - 12 Replies
Als erstes, möchte ich mich entschuldigen, dass ich hier einen extra Thread aufmachen, ich bin sicher, das haben andere vor mir gefragt. Aber ich bin neu hier, habe schon sehr viel hier gelesen und gesucht und hier steht zum Teil so viel, dass ich gar nicht weiss wo anfangen. Ursprünglich wollte ich mir einfach mal einen Farmbot zulegen und habe hier gelernt, dass es da diverse gibt und das jeder so seine vor und Nachteile hat. Eigentlich will ich den bot nicht voll hardcoremässig...
Programmieren
11/17/2007 - Off Topic - 5 Replies
Moin, Suche jemanden/eine person die mir eventuell ein bisschen programmieren beibringen könnte sprich c++.Wäre sehr nett ich hinterlass euch mal meine icq 203-149-574 Ps: Meine erfahrung bis jetzt (html/bisl php) möchte jetzt mit c++ anfangen thx Mfg Millenium



All times are GMT +1. The time now is 14:17.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.