Inhalt des Wokshops
- 1. Teil
- Was brauche ich?
- Visual C++ 2005 Express
- Platform SDK
- Visual C++ 2005 Express
- Beispielprogramm
- Was brauche ich?
- 2. Teil
- Das erste Programm
- Bildschirmausgabe mit cout
- Was macht das std:: vor dem cout?
- Wie funktioniert cout?
- Wie starte ich mein Programm?
- Bildschirmausgabe mit cout
- Das erste Programm
- 3. Teil
- Standard Datentypen
- Standard Datentypen nach dem C99er Standard
- Definition von Variablen
- Tastatureingabe mit cin
- Übungsaufgabe
- Standard Datentypen nach dem C99er Standard
- Standard Datentypen
- Teil 4
- Strings in C++
- Strukturierte Programmierung
- Kommentare
- Strings in C++
- Teil 5
- Kontrollstrukturen
- If Abfrage
- Aufgabe
- Switch-Case Anweisung
- Aufgabe
- If Abfrage
- Kontrollstrukturen
- Teil 6
- Schleifen
- while-Schleife
- do-while-Schleife
- for-Schleife
- while-Schleife
- Schleifen
- Teil 7
- Funktionen
- Beispiel
- Erklärung
- Übung
- Beispiel
- Rekursion
- Beispiel
- Übung
- Beispiel
- Funktionen
- Teil 8
- Call By Value
- Zeiger
- Was sind Zeiger?
- Wie benutze ich Zeiger?
- Was sind Zeiger?
- Zeigervariablen übergeben
- Call By Value
- Teil 9
- Der Präprozessor
- Bedingte Kompilierung
- Makros
- Der Präprozessor
Was brauche ich?
Visual C++ 2005 Express
Ich benutze für den Workshop die IDE "Microsoft Visual C++ 2005 Express" welche es freundlicherweise bei Microsoft kostenlos zum download gibt. Für die meisten Anwendungen gerade am Anfang reicht diese Version. Um trotzdem auf die Nachteile zu den Kostenpflichtigen Versionen einzugehen unterstützt die Express Version beispielsweise keine MFC anwendungen (Vermutlich geht das den Programmieranfängern schon ein stück zu weit, aber ist nicht schlimm, ignoriert es einfach ).
Hier gibt es die Kostenlose Version der Visual C++ 2005 IDE
http://http://msdn.microsoft.com/vstudio/express/downloads/default.aspx
(VisualStudio 2005 Express Edition auswählen)
Platform SDK
Neben der IDE benötigen wir noch das Platform SDK. Dieses SDK beinhaltet diverse bibliotheken die nicht mit der Express version ausgeliefert werden.
Download details: Windows® Server 2003 R2 Platform SDK Full Download
Bei problemen mit dem Download könnt ihr auch die ISO runterladen: Download details: Windows® Server 2003 R2 Platform SDK ISO Download
Die Downloads werden denke ich einige Zeit brauchen, also heißt es jetzt erstmal abwarten...
...
Nachdem die Downloads abgeschlossen sind könnt ihr schonmal Visual C++ installieren. (Ich erinner mich grade nich ob es bei der installation was zu beachten gab, wenn ja meldet euch, dann werde ich es nochmal nachsehen und ergänzen). Ach ja.. eine Sache gabs da noch Soweit ich mich richtig erinner muss man das Visual Studio bei Microsoft registrieren. Da es aber kostenlos ist kann man das ruhig machen.
Okay, weiter im Programm. Die Installation ist abgeschlossen und nun kommt das Platform SDK. Installiert es und merkt euch den Pfad wohin ihr es installiert habt.
Startet das Visual Studio und navigiert zu den Optionen:
Klickt jetzt auf "Projekte und Projektmappen" und dann auf "VC++ Verzeichnisse"
Dort seht ihr jetzt eine Liste in denen einige Pfade angezeigt werden. Über der Liste gibt es 2 Combo boxen. Die erste ("Plattform"), ist nicht relevant. Die zweite brauchen wir um durch die verschiedenen Verzeichnislisten zu navigieren. In der ersten Liste (Ausführbare Dateien) legt ihr eine neue Zeile an in der ihr dann das Bin verzeichnis der Plattform SDK angebt (z.B.: "C:\programme\plattform SDK 2003...\Bin"
Dementsprechend navigiert ihr oben in der Verzeichnisliste zu "Includedateien" und fügt eine neue Zeile ein: "C:\programme\plattform SDK 2003...\Include"
Und zu guter letzt das selbe nochmal für "Bibliothelsdateien":
"C:\programme\plattform SDK 2003...\Lib"
Das war es soweit mit den Einstellungen der IDE. (Wenn ich nichts vergessen habe sollte sie nun für unsere Zwecke einsatzbereit sein)
Beispielprogramm
Damit ihr nicht völlig unbefriedigt zurück gelassen werden schreiben wir nun noch ein kurzen Programm damit ihr seht wie ihr die IDE benutzt.
Navigiert "Datei->Neu->Projekt". In dem Dialog wählt ihr Win32 und Win32-Konsolenanwendung. Gebt dem Projekt noch einen Namen und klickt auf OK.
Als nächstes Klickt ihr auf Weiter und wählt im nächsten Dialog "Leeres Projekt"
-> Fertig Stellen
Jetzt seht ihr am linken Bildschirmrand den Projektmappen explorer. Um nun eine neue Datei hinzu zufügen klickt ihr mit der rechten Maustaste auf "Quelldateien -> Hinzufügen -> Neues Element" und wählt C++-Datei. Gebt ihr wieder einen Namen und drückt auf Hinzufügen.
Als letztes kopiert ihr den Quellcode den ich jetzt hier hinschreibe und versucht ihn zu kompilieren. (Ich gehe hier nicht auf das Programm ein weil das nur zu testzwecken genutzt wird)
Zum kompilieren drückt ihr F7 oder navigiert "Erstellen -> Projektmappe erstellen"
Wie schon erwähnt gilt dieser erste "Workshop" erstens um denen die interesse haben zu erklären was benötigt wird und um zu sehen wie viele wirklich interesse haben. Außerdem sind verbesserungsvorschläge erwünscht :). Also wenns gut ist, fehler vorhanden sind, etwas unklar ist oder sonst was, einfach antworten. Wenn genug feedback ist überlege ich ob es sich lohnt den Spaß weiter zu führen
Gruß Zerd
Das erste Programm
Nachdem wir nun die IDE eingerichtet haben wollen wir langsam mit den ersten kleinen Programmen anfangen.
Ich beginne mit dem kleinst-möglichen C++ Programm und ergänze dieses im laufe dieser Lektion. Startet hierzu genau wie ich es in dem Programmbeispiel in der letzten Lektion erklärt habe und erstellt ein neues Projekt.
Das kleinste C++ Programm: (Ich benutze PHP codetags weil der code dann schöner formatiert wird)
Kleine Anmerkung zu diesem Programm: void main() entspricht nicht dem standard. Daher sollte stattdessen immer int main() mit dem entsprechenden Rückgabewert benutzt werden.
Das Programm macht garnichts. Trotzdem kann man schon etwas lernen. Die funktion die ich gerade dargestellt habe ist die Hauptfunktion eines jeden C++ Programms. Ihr werdet (zumindest am Anfang) immer diese Funktion nutzen um eure Programme zu schreiben.
Damit nun etwas passiert fangen wir einfach mal mit einer einfachen Bildschirmausgabe an.
Bildschirmausgabe mit cout
Schauen wir uns zunächst das folgende Programm an:
Die #include Anweisung ist eine so genannte Präprozessor anweisung. Der Präprozessor verarbeitet den quelltext bevor er dann an den eigentlichen compiler gesendet wird.
Was macht #include jetzt also genau? Mit dieser Anweisung kann man externe Bibliotheken dem aktuellen quelltext "bekannt" machen. In der 3. Zeile des Programmes steht die Zeile "std::cout << "Hello World" << std::endl;". Ihr könnt testen was passiert wenn ihr die #include anweisung löscht. Ihr werdet einen Compilerfehler bekommen die besagt das die Anweisung "cout" nicht bekannt ist. Dadurch das die headerdatei "iostream" includiert wird wird dem compiler die anweisung cout bekannt gemacht.
Was macht das std:: vor dem cout?
std gibt an, in welchem namespace die anweisung steht. Ein namespace ist im Prinzip nur eine definition von einem Bereich indem verschiedene Klassen oder Funktionen gespeichert sind. Wenn ihr nicht immer std:: vor die Anweisungen schreiben möchtet könnt ihr direkt über die main() funktion folgendes schreiben: using namespace std;
Habt ihr diese Zeile eingefügt könnt ihr euch die std:: anweisungen for cout und endl sparen.
Wie funktionier cout?
cout ist ein objekt welches funktionen zur Textausgabe in der Konsole zur Verfügung stellt. Durch den Operator << wird die Zeichenkette an das Objekt weitergegeben und dann in der Konsole ausgegeben. Man hat die Möglichkeit Zeichenketten über den Befehl << miteinander zu verknüpfen:
Wahrscheinlich ist euch mitlerweile der Begriff endl aufgefallen. Mit endl wird der Cursor in der Konsole an den Anfang der nächsten Zeile gesetzt. Es entspricht also quasi dem Drücken der Entertaste.
Wie starte ich mein Programm?
Nachdem ihr das Programm kompiliert habt (F7 oder über "Erstellen->Projektmappe erstellen") wollt ihr sicher das Programm starten
Die exe datei findet ihr im Projektverzeichnis (wo ihr das Projekt gespeichert habt) und dann im Unterordner Debug oder Release. (vermutlich Debug)
Wenn ihr die exe einfach mit Doppelklick startet öffnet sich ein Konsolenfenster, schließt sich aber auch direkt wieder. Nunja, die main() funktion wir aufgerufen und das Programm wird direkt nach der Ausgabe beendet. Um eine Ausgabe zu sehen startet ihr das Programm am besten in der Komandozeile, dazu: Start->Ausführen ... Dann "cmd" und enter eingeben. Jetzt navigiert ihr zu dem Verzeichnis mit der exe datei und startet diese.
Es gäbe noch diverse Möglichkeiten das Programm daran zu hindern das Fenster zu schließen. Für den Anfang soll das aber erstmal reichen, damit ihr auch noch was zu tun habt
Ich merke grade das ich hunger bekomme, also mache ich hier erstmal schluss Zumindest habt ihr jetzt die "Mittel" um etwas auf dem Bildschirm auszugeben. Probiert ruhig etwas damit herum, in der nächsten Lektion fange ich mit Variablen und dem einlesen von Texten an.
Wie schon erwähnt meldet euch wenn ihr Fehler findet oder Fragen habt.
Hier ist der Diskussionsthread
Standard Datentypen
Bevor ich mit den Variablen und dem Einlesen der Tastatur beginnen kann müssen wir zunächst die Standard-Datentypen behandeln damit ihr wisst was ich in dem danach folgenden Beispiel mache.
Standard Datentypen nach dem C99er Standard
Integer Datentypen:
Quellcode
- char 1 byte Character, Integer-Typ ohne Vorzeichen
- signed char 1 byte Character mit Vorzeichen
- unsigned char 1 byte Character ohne Vorzeichen, identisch zu char
- short 2 byte 2 byte Integer-Typ mit Vorzeichen.
- unsigned short 2 byte 2 byte Integer-Typ ohne Vorzeichen.
- int 4 byte 4 byte Integer-Typ mit Vorzeichen.
- unsigned 4 byte 4 byte Integer-Typ ohne Vorzeichen.
- long 8 byte 8 byte Integer-Typ mit Vorzeichen.
- unsigned long 8 byte 8 byte Integer-Typ ohne Vorzeichen.
- long long 8 byte 8 byte Integer-Typ mit Vorzeichen.
- unsigned long long 8 byte 8 byte Integer-Typ ohne Vorzeichen.
Integer Datentypen sind Typen die nur ganzzahlige Werte speichern können. Die größe der Daten die gespeichert werden können hängt vom jeweiligen System ab, daher werde ich da nicht genauer drauf eingehen. unsigned bedeutet dabei das die Variablen nur Positive Werte speichern können. signed definiert dementsprechend einen positiven und einen negativen Wertebereich.
Fließkomma Datentypen:
Die genauen größen der einzelnen Datentypen sind für den Anfang nicht so wichtig. Wenn ihr sie doch mal brauchen solltet könnt ihr sie hier nachlesen
Definition von Variablen
Hier ein kleines beispiel wie variablen definiert und inizialisiert werden können:
Das f bei der zuweisung der float Variable definiert das es sich dabei um eine Gleitkommazahl handelt.
Tastatureingabe mit cin
Schaut euch zuerst einmal den folgenden code an:
In der ersten Zeile definiere ich die Variable eingabe vom Typ char. Das sagt uns schonmal das wir in dieser Variable nur ein Zeichen speichern können.
In der 3. Zeile wird dann cin aufgerufen und mit dem operator >> die Tastatureingabe in der Variable eingabe gespeichert.
Zum schluss gebe ich die Variable mit cout wieder aus.
Bevor ich dieses kleine Kapitel abschließe gebe ich noch eine kleine Übungsaufgabe. Mit dem was ihr bisher gelernt habt solltet ihr in der Lage sein folgende Aufgabe zu lösen:
Übungsaufgabe
Lies 3 Zahlen hintereinander ein, addiere sie und gib die Lösung wieder aus.
Tipp: Das Ergebnis eurer Berechnung kann in einer neuen Variable gespeichert werden. Berechnungen werden dabei in folgender Form gemacht: Wert = wert (+ - * /) wert;
Es ist ein recht kleines und einfaches Programm, wer will kann gerne seine Lösung posten um (falls nötig) Verbesserungsvorschläge zu bekommen. Benutzt dazu bitte wie gehabt Diesen Thread
Strings in C++
Im letzten Kapitel bin ich auf die Standard-Datentypen eingegangen. Natürlich sind das nicht alle Typen die man verwenden kann. Man hat in C++ die möglichkeit vorhandene Klassen zu verwenden oder sich eigene Typen oder Klassen zu definieren.
Ein Beispiel für solch einen Datentyp ist der Typ string. Da wir uns für den C++ Workshop entschieden haben werde ich nicht auf die C variante von strings eingehen.
der Typ string befindet sich genau wie cin und cout in dem namespace std und kann somit wie folgt definiert werden:
Damit dieser Typ dem programm bekannt gemacht werden kann muss zusätzlich die header datei string eingefügt werden.
Schauen wir uns ein Beispiel an, indem wir einen String (also eine Zeichenkette) einlesen und in einer Variable speichern:
Ich denke ihr braucht keine große erklärung für diesen Programmcode. Das einzige was neu ist, ist die Verwendung von std::string.
Bevor ich dieses Kapitel so kurz lasse mache ich noch einen kurzen Exkurs um auf strukturierte Programmierung einzugehen.
Strukturierte Programmierung
Was ich versuchen möchte euch schon von anfang an in diesem Workshop zu vermitteln, ist das ihr euren Quelltext gut und vor allem konsistent formatiert. Schaut euch die folgenden Beispiele an:
Schlechtes Beispiel:
Gutes Beispiel:
Wenn ihr die beiden (inhaltlich identischen) listings anschaut werdet ihr (hoffentlich) erkennen das der 2. Quellcode um einiges besser lesbar ist. Durch solche (oder ähnliche) Formatierung kann man quellcode leserlich und strukturiert gestalten. Eine gute Strukturierung ist bei großen Projekten unverzichtbar.
Ihr mögt vielleicht jetzt denken: "Ja aber wie machen doch noch keine großen Projekte". Ja das stimmt schon, aber wenn man es direkt ordentlich und richtig lernt muss man es später nicht ändern
Kommentare
Wo ich grade bei Strukturierter Programmierung bin... Da fällt mir auf das ich noch kein bisschen erwähnt habe wie nützlich Kommentare sind
Es gibt 2 Möglichkeiten Kommentare im Quellcode zu hinterlassen:
Kommentare sind bei großen Projekten genauso wichtig wie eine gute Struktur. Gerade Funktionen und Klassenvariablen sollten gut kommentiert werden. Dazu kommen wir aber später
Kommentare werden beim Kompilieren des Quellcodes Ignoriert, also macht es nichts aus wenn man viele Kommentare schreibt. Das wirkt sich nicht auf die Größe des Programmes am Ende aus.
Ich werde leider über das Wochenende keine Zeit haben am Workshop weiterzumachen. Montag gehts denke ich dann weiter. Ich würde mich mal über etwas mehr feedback freuen, damit ich weiß das ich den Workshop nicht nur für 2 Leute schreibe
Also wie immer Hier könnt ihr Fragen stellen, verbessern oder einfach nur diskutieren.
Im nächsten Teil wird es dann etwas spannender. Dort werde ich dann auf Kontrollstrukturen und Schleifen eingehen womit dann die Programme endlich etwas sinnvoller werden
Kontrollstrukturen
Kommen wir mal zu etwas nützlichem... (Nicht das ihr jetzt denkt das vorher war sinnlos )
Mit Kontrollstrukturen wie if Abfragen oder switch-case Anweisungen lässt sich der Programmfluss durch angaben von Bedingungen kontrollieren. In diesem Teil werdet ihr lernen wie solche Abfragen funktionieren.
If-Abfrage
Syntax:
Die if-Abfrage ist immer so aufgebaut wie in der Syntax beschrieben. Die Bedingung ist ein eine Logische Abfrage die entweder true (wahr) oder false (falsch) ergibt.
Beispiel:
In diesem beispiel wird der Text "Der Wert war 1" ausgegeben wenn die Variable wert wirklich den Wert 1 beinhaltet. Ist das nicht der Fall wird die Ausgabe einfach übersprungen.
if kann durch eine else anweisung verknüpft werden:
So hat man die möglichkeit alternativ-anweisungen auszuführen falls die Bedingung nicht true ergibt.
Beispiel:
Mit dieser Information solltet ihr beispielsweise schon in der Lage sein folgendes Programm zu lösen:
Aufgabe
Schreibt einen Taschenrechner der zunächst 2 Zahlen einliest, danach eine Ausgabe in der Art macht:
Dort lest ihr nun eines der Zeichen ein und entscheidet mit hilfe der eben gelernten if abfrage welche Berechnung ihr ausführt. Zum schluss gebt ihr das Ergebnis auf dem Bildschirm aus.
Switch-Case Anweisung
Neben der if abfrage gibt es speziell für integer bzw. char werte die Switch-Case Anweisung.
Mit dieser Anweisung kann man eine Variable nach verschiedenen inhalten überprüfen und dem entsprechend eine andere aktion ausführen.
Syntax:
Zur Veranschaulichung hier noch ein kleines Beispiel:
Diese Anweisung "schaut" also in die Variable und überprüft den Inhalt und entscheidet so in jedem case-block was gemacht wird. der break befehl ist wichtig, da sonst nicht aus dem switch-case rausgesprungen wird, sondern jede der case-blöcke abgearbeitet wird. default ist im Prinzip nichts anderes als das else bei der if anweisung. Wenn nichts von den oberen Werten in der Variable enthalten ist wird die default-anweisung ausgeführt.
Aufgabe
Versucht die Aufgabe von oben mit der Switch-Case Anweisung zu lösen.
Sollte es noch Fragen zu dem thema geben bitte einfach wie immer in diesem Thread melden. Ich bin mir nicht sicher ob das alles so gut erklärt ist, hab mich evtl. insgesammt etwas kurz gefasst... Aber vielleicht reichts ja auch
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Broken Sword ()