78
C# Einführung - Grundlagen der Programmierung - Do, Hoang Viet ( [email protected]) Draphony Games (http://www.draphony.de )

C Sharp Einfuehrung Teil 1

Embed Size (px)

DESCRIPTION

Folien vom C# Einführungskurs: Grundlagen der Programmierung http://www.draphony.de/veranstaltungen/2013-winter/c-sharp-einfuehrung/

Citation preview

Page 1: C Sharp Einfuehrung Teil 1

C# Einführung

- Grundlagen der Programmierung -

Do, Hoang Viet ([email protected])

Draphony Games (http://www.draphony.de)

Page 2: C Sharp Einfuehrung Teil 1

204.12.2013

Grundlagen

Page 3: C Sharp Einfuehrung Teil 1

304.12.2013

Grundbegriffe in der Entwicklung

• Quellcode

Entwickler schreiben das Programm in einer Programmiersprache. Dieser Text wird Quellcode genannt.

Im Gegensatz zur natürlichen Sprache erfüllen Programmiersprache diverse Anforderungen, die eine weitere maschinelle Verarbeitung erst ermöglich, u.a. Eindeutigkeit

• Gegenbeispiel aus Wikipedia: Jeder Mann liebt eine Frau. (Wikipedia Artikel)

• Compiler

Der Quellcode muss mit Hilfe eines Programms in einer maschinenlesbare Sprache übersetzt werden.

Page 4: C Sharp Einfuehrung Teil 1

404.12.2013

Demo: „HelloWorld“

Page 5: C Sharp Einfuehrung Teil 1

504.12.2013

Häufig gemachte Fehler

• C# unterscheidet zwischen Groß- und Kleinschreibung (engl. case-sensible)

Console.WriteLine ist nicht das selbe wie console.writeline

• Absätze wie Leerzeichen, Tabulatoren sind optional

In den meisten Fällen, lässt sich der Quellcode auch in einer einzigen Zeile schreiben. (Daran haben später alle Spaß!)

• Eine Anweisung wird mit einem Semikolon beendet

Console.WriteLine(“Hello World“);

int a = 10;

• Copy & Paste von Folien

In Powerpoint werden die Anführungsstriche den Länderspezifischen Normen angepasst. Derartiges in der Programmierung nicht!

Page 6: C Sharp Einfuehrung Teil 1

604.12.2013

Grundbegriffe in .net

• C# Compiler

übersetzt Quellcode in CIL – Code

• Common Intermediate Language (CIL, früher MSIL)

Zwischensprache, indem der Quellcode übersetzt wird

„Assembler“ von .net

• JIT / Jitter (Just-In-Time compilation)

Übersetzt den CIL–Code (zur Laufzeit) in maschinennahem Code

• Common Language Runtime (CLR)

Ausführungsumgebung von .net – Anwendungen

Page 7: C Sharp Einfuehrung Teil 1

704.12.2013

Grundbegriffe in .net

• Garbage Collector (GC)

Verwaltet den Programmspeicher

Verhindert „Speicherlecks“

• Framework Class Library (FCL)

Von .net zur Verfügung gestellte Funktionalitäten

Auflistung der Klassen (MSDN-Link)

• Common Language Infrastructure (CLI)

Common Type System (CTS)

Common Language Specification (CLS)

Page 8: C Sharp Einfuehrung Teil 1

804.12.2013

Microsoft Visual Studio

• Quelldatei (engl. Source File)

Datei, in dem der C# Code gespeichert wird.

Diese Datei(en) werden vom Compiler übersetzt

• Projekt (engl. Project)

Ein Projekt fasst Quelldateien zusammen

Aus einem Projekt erzeugt Visual Studio eine Assembly (*.exe, *.dll o.ä.)

• Projektmappe (engl. Solution)

Eine Projektmappe fasst Projekten zusammen

Beispiel: Microsoft Office als Solution; Powerpoint, Word, etc. sind Projekte

• Entwicklungsumgebung (engl. Integrated Development Enviroment)

Integriert Entwicklungstools (Compiler, Editor, Debugger, usw.) zu einer Einheit um den Entwicklungsprozess zu unterstützen

Page 9: C Sharp Einfuehrung Teil 1

904.12.2013

Syntax und Semantik

• Syntax

Grammatikalische Regeln einer Programmiersprache

Wird vom Compiler forciert, d.h. Compilerfehler wenn Regel verletzt wird

Analogie zu natürliche Sprachen:

• Ein Satz muss immer Subjekt und Prädikat besitzen

• Semantik

Absicht des Entwickler / Kunden, d.h. was soll das Programm machen.

Kann nicht überprüft werden

• Tools für spezielle Bereiche vorhanden.

Analogie zu natürliche Sprachen:

• Die Aussage vom Satz

Page 10: C Sharp Einfuehrung Teil 1

1004.12.2013

HelloWorld im Detail

Page 11: C Sharp Einfuehrung Teil 1

1104.12.2013

Henne – Ei – Problem

Page 12: C Sharp Einfuehrung Teil 1

1204.12.2013

Die Klassenmethode „Main“

static void Main(string[] args) {

Console.WriteLine(“Hello World!“);

}

• Einstiegspunkt des Programm.

Jedes Programm besitzt nur einen Einstiegspunkt

Im Normalfall definiert jedes Programm nur eine Main – Methode

• Beispiele der Veranstaltung definieren mehrere Main – Methoden!

• Details später im Kapitel „Methoden“

Parameter an das Programm werden in args gespeichert.

Die Methode gibt eine ganze Zahl zurück.

• Der Wert 0 indiziert eine fehlerfreie Ausführung

Page 13: C Sharp Einfuehrung Teil 1

1304.12.2013

Quellcode Kommentare

• Lesbarkeit von Quellcode erhöhen

• Kommentare in einem Quellcode werden vom Compiler ignoriert

• Quellcodekommentierung ist eine fundamentale Fertigkeit

• Zeilenkommentar:

// das ist ein Kommentar

Inhalt von // bis Zeilenende wird als Kommentar behandelt

• Blockkommentar:

/* das ist ein Kommentar */

Inhalt von /* bis zum */ wird als Kommentar behandelt (auch bei Zeilenumbrüchen!)

• Dokumentationskommentare

Später im Abschnitt „Methoden“

Page 14: C Sharp Einfuehrung Teil 1

1404.12.2013

Konsolenausgabe

Console.WriteLine(<ausdruck>);

Console.Write(<ausdruck>);

• Gültige Werte für <ausdruck> sind:

Strings: Console.WriteLine(“Das ist ein Text“);

• Unicode Support

Gleichungen: Console.WriteLine(1 + 1);

Platzhalter: Console.WriteLine(“1 addiert mit 2 ergibt {0}“, 1 + 2);

• Alternativmöglichkeit im Tutorium

• Achtung!

String müssen in Anführungsstrichen geschrieben werden. Ansonsten wird er als Anweisungen interpretiert, was zu einem Compilerfehler führt.

Vergleiche:

• Console.WriteLine(“1 + 1“);

• Console.WriteLine(1 + 1);

Page 15: C Sharp Einfuehrung Teil 1

1504.12.2013

Escape Zeichen

• Wie können Sonderzeichen dargestellt werden?

Leerzeichen wie Zeilenumbrüche, Tabulatoren

Internationale Zeichen wie „Môt suât thit cho“ oder chinesische Schriftzeichen

• Escape Zeichen

\\ Backslash

\“ Anführungsstriche

\n Zeilenumbruch

\t Tabulator

\v Vertikale Tabulator

\u Unicode character (in Hexa FFFF). Bspl: “Pi (\u03a0) and Sigma (\u03a3)„

\x ASCII (in Hexa FF)

Page 16: C Sharp Einfuehrung Teil 1

1604.12.2013

Konsoleneingabe

Console.ReadLine();

• Blockiert die Programmausführung bis zur Benutzereingabe

Programm rechnet im Hintergrund nichts nebenbei, sondern wartet auf die Eingabe des Benutzers. Die Blockierung wird erst aufgehoben, wenn der Benutzer die „Enter“ Taste bestätigt.

• Anweisung lässt sich kombinieren:

Console.WriteLine(Console.ReadLine());

• Was wird bei der folgende Anweisung ausgegeben? Warum?

Console.WriteLine(“Console.ReadLine()“);

Page 17: C Sharp Einfuehrung Teil 1

1704.12.2013

Klasse „Program“

• C# ist eine Objektorientierte Programmiersprache

Ein Programm ist ein Objekt, das mit anderen Objekten operiert.

Jedes Objekt gehört zu einer Klasse.

Analogie zur Welt:

• Mensch als Klasse

• Jeder Mensch ist ein Objekt der Klasse Mensch

• Bei der Geburt wird die Funktion „Main“ aufgerufen. Diese wird bis zum Tot ausgeführt.

• Mehr zu Klassen, Objekte und Methoden später!

Page 18: C Sharp Einfuehrung Teil 1

1804.12.2013

Namensräume

• Motivation

Um Namenskonflikte (2 unterschiedliche Bedeutungen mit dem selben Namen) zu vermeiden, gibt es hierarchische Benennungsnormen.

Erklärung am Beispiel: System.Console.WriteLine

• System Funktion ist Teil der FCL (Standardfunktionalität von .net)

• Console Alle Funktionen bzgl. der Konsole werden in einer Klasse gruppiert

• WriteLine eigentliche Funktion

• Abkürzung

using System;

danach kann statt System.Console.WriteLine kurz Console.WriteLinegeschrieben werden

• Tutorium:

Programm schreiben, ohne using zu benutzen

Page 19: C Sharp Einfuehrung Teil 1

1904.12.2013

Variablen

Page 20: C Sharp Einfuehrung Teil 1

2004.12.2013

Variable: Grundlagen

• Deklaration Reservieren von Speichern für die Variable

datentyp nameDerVariable;

Beispiel: string name;

• Initialisierung Zuweisung eines Anfangswertes für die Variable.

Eine Variable muss vorher deklariert werden bevor es initialisiert werden kann.

Allgemeine Syntax: nameDerVariable = wert;

Beispiel: name = „Alf“

• Verknüpfung möglich: Deklaration & Initialisierung Beispiel: string name = „alf“;

• Mehrere Variablen deklarieren Beispiel: int a, b, c;

• Initialisierung von einem, mehrere oder alle möglich Beispiel: int a, b=10, c;

Page 21: C Sharp Einfuehrung Teil 1

2104.12.2013

Datentypen

• Zeichenketten

• Boolescher Datentyp Einzige mögliche Werte sind true oder false

• Ganzzahlige Datentypen Unterscheidungsmerkmal:

• Wertebereich und Speicherverbrauch

Vertreter: byte, int, long, usw.

• Fließkommazahlen Unterscheidungsmerkmal:

• Wertebereich, Speicherverbrauch, Genauigkeit nach dem Komma

Vertreter: float, double, decimal, usw.

• Weiterführend: http://msdn.microsoft.com/en-us/library/ms228360%28v=VS.90%29.aspx

http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx

Page 22: C Sharp Einfuehrung Teil 1

2204.12.2013

Ganzzahlige Typen

Datentyp Speicherbedarf in Byte Wertebereich

sbyte 1 −27 27 − 1

byte 1 0 28

short 2 −215 215 − 1

ushort 2 0 216

int 4 −231 231 − 1

uint 4 0 232

long 8 −263 263 − 1

ulong 8 0 264

char 2 0 216

Weiterführend: http://msdn.microsoft.com/en-us/library/exx3b86w.aspx

Page 23: C Sharp Einfuehrung Teil 1

2304.12.2013

Fließkommazahlen

Datentyp Speicher Genauigkeit Wertebereich

float 4 7 Stellen ±1.5e−45 bis ±3.4e38

double 8 15 – 16 Stellen ±5.0e−324 bis ±1.7e308

decimal 16 28 – 29 Stellen (-7.9 x 1028 bis 7.9 x 1028) / (100 bis 28)

Weiterführend: http://msdn.microsoft.com/en-us/library/9ahet949.aspx

Page 24: C Sharp Einfuehrung Teil 1

2404.12.2013

Variablennamen

• Variablennamen

müssen mit einem Unterstrich oder einem Buchstaben beginnen

dürfen Buchstaben (nach Unicode), Ziffern und den Unterstrich enthalten

dürfen keine Leerzeichen enthalten

dürfen keine reservierten C# Schlüsselwörter sein (engl. Keywords)

• Auflistung: http://msdn.microsoft.com/en-us/library/x53a06bb.aspx

Beispiele: Tôi, ThitCho ,

• Erinnerung: C# unterscheidet zwischen Groß- und Kleinschreibung

Engl. „case-sensitive“

Beispiel: 3 völlig unterschiedliche Variable!

• int meinevariable;

• string meineVariable;

• bool MeineVariable;

Page 25: C Sharp Einfuehrung Teil 1

2504.12.2013

Namenskonvention

• Camel Case (deutsch: Binnenmajuskel)

Beispiele:

• personAlter

• personName,

Mehrere Wörter zusammen schreiben

Anfangsbuchstaben werden groß geschrieben

Allererste Buchstabe wird klein geschrieben

Eigentlich „lowerCamelCase“

• Pascal Case

Beispiele:

• PersonAlter

• PersonName

Wie lowerCamelCase, aber allererste Buchstabe wird klein geschrieben

Eigentlich UpperCamelCase

Page 26: C Sharp Einfuehrung Teil 1

2604.12.2013

Namenskonvention

• Ungarische Notation

„ Charles Simonyi“, Amerikaner mit ungarische Abstammung

Variablenamen besitzen einen Präfix

• Datentyp: b, n

• Verwendungszweck: i (Index), f (Flag)

• Und weiteres (http://de.wikipedia.org/wiki/Ungarische_Notation)

Beispiel:

• bTot, nAlter

• Microsoft Guideline

Keine ungarische Notation

Variablen und Parameter in lowerCamelCase

Methoden, Klassen und Namensräume in UpperCamelCase

http://msdn.microsoft.com/en-us/library/ms229002.aspx

Page 27: C Sharp Einfuehrung Teil 1

2704.12.2013

Variablen: Theorie

• Variablen

Variablen werden im RAM gespeichert und sind somit „flüchtig“. D.h. Werte gehen verloren, wenn PC ausgeschaltet wird.

• C# ist eine streng-typisierte Programmiersprache (engl. strongly typed)

Der Typ einer Variable ist vorher festzulegen (Deklaration) und bleibt danach fest!

Gegenteil: „schwach-typisiert“ (engl. weak typed)

• alf = „Alf Mustermann“, alf = 12;

• Vertreter: PHP, Visual Basic 6, usw.

In Literaturen auch als „stark typisiert“

Begriffe: statische Typisierung, dynamische Typisierung

Page 28: C Sharp Einfuehrung Teil 1

2804.12.2013

Typumwandlung

• Text in Zahl umwandeln In einem String ist die Zahl „8“ ist für den Computer 56

„56“ für den Computer 2 Zahlen 53 54

• Parsen nötig!

<typ>.Parse()

Beispiel: Int.Parse(„86“)

• Zahl in Text umwandeln Beispiel: 56.ToString() oder a.ToString()

ToString() ist für jeden Datentyp definiert.

ToString() wird häufig implizit aufgerufen.

• Beispiel: „1 + 1 = “ + 1

• Umwandeln zwischen verschiedenen Zahlentypen Implizite Umwandlung:

• Von kleineren Typ in größeren Typ (Wertebereich); verlustfreie

Explizite Umwandlung:

• Verluste können auftreten

• Explizite Angabe nötig: typ a = (typ) b;

Page 29: C Sharp Einfuehrung Teil 1

2904.12.2013

Demo: Typumwandlung

Page 30: C Sharp Einfuehrung Teil 1

3004.12.2013

Wertetypen und Verweistypen

• Wertetyp

„Primitiven Typen“

Speichert den Wert

Werden im Stack gespeichert

Beispiel: int, double, char

• Verweistyp

„Objekte“

Speichert eine Speicheradresse, wo der eigentliche Wert ist

„null“ als Wert möglich

Werden im Heap gespeichert

Beispiel: string

Page 31: C Sharp Einfuehrung Teil 1

3104.12.2013

Deklaration mit implizite Typangabe

• Deklaration von Variablen explizite Typangabe

Beispiel: var zahl = 1;

• Keine dynamische Typisierung!

Der Compiler bestimmt zur Kompilierungszeit den Typ

• Konstrukt für anonyme Typen (primär bei LinQ, später)

Microsoft rät selbst in seiner Guideline davon ab, dieses Konstrukt außerhalb zu nutzen!

„Glaubenskrieg“

Page 32: C Sharp Einfuehrung Teil 1

3204.12.2013

Operatoren

Page 33: C Sharp Einfuehrung Teil 1

3304.12.2013

Assoziation und Priorität

• Definition: Ausdruck

Ein Ausdruck ist eine Verknüpfung von Variablen, Konstanten und Funktionen durch Operatoren, die einen Wert zurückliefert.

Beispiel: a + b, c + 2, 1 + 4 * 3,

• Auswertung von Ausdrücken

Priorität von Operatoren (engl. precedence)

• Beispiel: Punktrechnung vor Strichrechnung

Assoziativität von Operatoren (engl. Associativity)

• Linksassoziativität: Bei gleiche Priorität, (meisten) von links nach rechts auswerten

• Rechtsassoziativität: Bei gleiche Priorität, (meisten) von rechts nach links auswerten

Klammerungen haben stets Vorrang

Meisten Operatoren sind linksassoziativ

• Auflistung alle Operatoren (nach Priorität geordnet)

http://msdn.microsoft.com/en-us/library/ms173145%28v=VS.100%29.aspx

http://msdn.microsoft.com/en-us/library/6a71f45d.aspx

Page 34: C Sharp Einfuehrung Teil 1

3404.12.2013

Arithmetische Operatoren

Operator Funktion Beispiel

+ Addition 1 + 2 3

- Subtraktion 1 – 2 1

* Multiplikation 1 * 2 2

/ Division 1 / 2

% Restdivision („Modulo“) 1 % 2

0

1

Erläuterung:• 1 / 2 = 0.5• 0.5 ist keine ganze Zahl! Nachkommastellen werden einfach

weggeschnitten

• Lösungen• 1.0 / 2 ?• 1 / 2.0 ?• (double) 1 / 2 ?

Page 35: C Sharp Einfuehrung Teil 1

3504.12.2013

Operatoren sind kontextabhängig

• Anwendung auf String: „Konkatenation“

Beispiel: „1 + 1 = “ + 1 liefert „1 + 1 = 1“

• Anwendung auf Zahlen: „Addition“

Beispiel: 1 + 1 liefert 2

• Der + Operator hat 2 unterschiedliche Bedeutung, abhängig vom Datentyp

Page 36: C Sharp Einfuehrung Teil 1

3604.12.2013

Zusammengesetzte Zuweisungsoperatoren

Operator Anwendung Eigentliche Ausdruck

+= a += 1 a = a + 1

-= a -= 1 a = a – 1

*= a *= 1 a = a * 1

/= a /= 1 a = a / 1

%= a %= 1 a = a % 1

Operator Anwendung Eigentliche Ausdruck

++ a++ oder ++a a = a + 1

-- a– oder --a a = a – 1

Inkrement- und Dekrementoperator

Page 37: C Sharp Einfuehrung Teil 1

3704.12.2013

Demo: x++ Vs. ++x

Page 38: C Sharp Einfuehrung Teil 1

3804.12.2013

Boolesche Ausdrücke(engl. Boolean Expression)

Page 39: C Sharp Einfuehrung Teil 1

3904.12.2013

Boolesche Ausdrücke

• Ausgangspunkt: Der Datentyp bool

Beispiel: bool gK; // true oder false

Ab wann ist ein Kunde ein „gute Kunde“?

• Kriterien für Beispiel:

Kunde hat keine Schulden im Schufaverzeichnis

gK = schufa == 0;

Kunde öffnet Konto mit 5000€

gK = kapital > 5000;

Kunde hat festes Einkommen

gK = hatEinkommen;

• Aussagen verknüpfen?

+ Operator ist nicht definiert!

Vergleichsoperator Beschreibung

== Gleichheit

!= Ungleichheit

< Kleiner

<= Kleiner gleich

> Größer

>= Größer gleich

Page 40: C Sharp Einfuehrung Teil 1

4004.12.2013

Logische UND

• Syntax:

Ausdr1 && Ausdr2

Liefert true zurück, wenn Ausdr1 und Ausdr2 wahr ist. Ansonsten immer false.

• Analogie in natürliche Sprache:

• „Wenn Ausdr1 und Ausdr2 stimmen“

• „Wenn sowohl Ausdr1 als auch Ausdr2 stimmen“

• Beispiel:

gK = schufa == 0 && kapital > 5000;

• Achtung! Wenn schufa != 0 gilt, wird sofort false zurück gegeben und der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.

Lösung: Operator & statt && nehmen

Page 41: C Sharp Einfuehrung Teil 1

4104.12.2013

Logische ODER

• Syntax: Ausdr1 || Ausdr2

Liefert nur false zurück, wenn Ausdr1 und Ausdr2 falsch sind. Ansonsten immer true.

• Analogie in natürliche Sprache:

Nicht mit dem oder aus der natürlichen Sprache verwechseln!

„Wenn mindesten eines von beiden Aussagen gelten“

• Beispiel: gK = schufa == 0 || kapital > 5000;

• Achtung! Wenn schufa == 0 gilt, wird sofort true zurück gegeben und der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.

Lösung: Operator | statt || nehmen

Page 42: C Sharp Einfuehrung Teil 1

4204.12.2013

Logische NICHT / Negationsoperator

• Syntax:

!Ausdr1

Liefert true zurück, wenn Ausdr1 falsch ist. Ansonsten false.

• Analogie in natürliche Sprache:

„Das Gegenteil“

• Beispiel:

sK = !(schufa == 0 && kapital > 5000);

• Frage: Ein Kunde ist ein schlechte Kunde, wenn er

… wenn er einen Schufa Eintrag hat oder einen Startkapital von <5000€

… wenn er einen Schufa Eintrag hat und einen Startkapital von <5000€

Page 43: C Sharp Einfuehrung Teil 1

4304.12.2013

Verzweigungen(engl. Condition)

Page 44: C Sharp Einfuehrung Teil 1

4404.12.2013

Verzweigungen

• if – Anweisung

Syntax: if (boolesche Ausdruck) { Anweisungen }

Anweisungen werden nur ausgeführt, wenn der boolesche Ausdruck wahr (true) ist.

Der boolesche Ausdruck wird Bedingung genannt.

Geschweifelten Klammern sind bei Einzelanweisung optional.

• if – else – Anweisung

Syntax:

if (boolesche Ausdruck) { iAnweisungen }

else { eAnweisungen }

iAnweisungen werden ausgeführt, wenn die Bedingung erfüllt ist. Ansonsten werden die eAnweisungen ausgeführt.

Geschweifelten Klammern sind bei Einzelanweisung optional.

Page 45: C Sharp Einfuehrung Teil 1

4504.12.2013

Verzweigungen

• Der bedingte Operator

boolesche Ausdruck ? iAusdruck : eAusdruck

Sowohl iAusdruck als auch eAusdruck müssen einen Wert zurückgeben und dieser muss vom selben Typ sein.

Beispiel:

• Console.WriteLine(regen == true ? „Es wird nass.“ : „nice!“);

• Verschachteln

Sowohl iAnweisungen als auch eAnweisungen können selbst eine Verzweigungsanweisung sein und fortführend.

• else – if – Ketten

Spezielle Form der Verschachtelung um Rechenzeit zu sparen

Der nächste if Block wird nur ausgeführt, wenn die vorherigen Bedingungen nicht erfüllt sind.

Page 46: C Sharp Einfuehrung Teil 1

4604.12.2013

Demo: „e01_else_if.cs“

Page 47: C Sharp Einfuehrung Teil 1

4704.12.2013

Beispiel für switch-case

string wday = Console.ReadLine();

switch (wday) {

case "Monday":

Console.WriteLine("Neue Woche");

break;

case "Freitag":

Console.WriteLine("Wochenende!");

break;

default:

Console.WriteLine("Ungültige Wochentag");

break;

}

Page 48: C Sharp Einfuehrung Teil 1

4804.12.2013

switch - Anweisung

• Syntax:

switch(ausdruck) {

case wert1:

break;

case wert2:

break;

// …

default:

break;

}

• Alternative für spezielle else – if – Ketten

• default ist optional

Page 49: C Sharp Einfuehrung Teil 1

4904.12.2013

switch - Anweisung

• Jeder case muss mit einem break oder einem goto abgeschlossen werden.

Außer leere Fälle!

• Für wert1, wert2, usw. müssen konstante Werte eingesetzt werden. Gültig sind nur ganzzahlige Konstanten und Strings eingesetzt werden.

Frage: Warum nicht Gleitkommazahlen?

Antwort: Ungenauigkeit

• Mehr Informationen: http://msdn.microsoft.com/en-us/library/06tc147t.aspx

Page 50: C Sharp Einfuehrung Teil 1

5004.12.2013

Demo: „e02_switch.cs“

Page 51: C Sharp Einfuehrung Teil 1

5104.12.2013

Schleifen(engl. Loop)

Page 52: C Sharp Einfuehrung Teil 1

5204.12.2013

for – Schleifen

• Syntax:for(Initialisierung; Iterationsbedingung; Iterationsanweisung) {

Anweisungen

}

• Vor Schleife:

Initialisierung ausführen

• Bei jedem Schleifendurchlauf wird:

Davor: Iterationsbedingung prüfen

• Bedingung erfüllt: Anweisungen ausführen

• Bedingung nicht erfüllt: Code nach Schleife ausführen

Danach: Iterationsanweisung ausführen

• Ein Schleifendurchgang wird Iteration genannt

Page 53: C Sharp Einfuehrung Teil 1

5304.12.2013

Demo: „e03_for.cs“

Page 54: C Sharp Einfuehrung Teil 1

5404.12.2013

for – Schleifen

• Alle Variablen, die im Initialisierung deklariert und initialisiert werden, werden Schleifenvariablen genannt und sind nur innerhalb der Schleife gültig, indem Sie definiert wurden.

• Sowohl Initialisierung, Iterationsbedingung als auch Iterationsanweisung sind optional.

• Wenn die Iterationsbedingung nicht spezifiziert ist, wird die Schleife endlos ausgeführt.

• Die geschweiften Klammern sind optional, wenn nur höchsten eine Anweisung ausgeführt werden soll.

Page 55: C Sharp Einfuehrung Teil 1

5504.12.2013

Alternative Schleifenkonstrukte

• Gleichmächtig mit for – Schleife

• while – Schleife

Syntax:

• while(BoolescheAusdruck) { Anweisungen }

• do – while – Schleife

Mindesten einer Iteration!

Syntax:

• do {Anweisungen} while(BoolescheAusdruck);

• Achtung: do-while braucht ein abschließendes Semikolon, aber while nicht.

Page 56: C Sharp Einfuehrung Teil 1

5604.12.2013

Demo: „e04_while.cs“

Page 57: C Sharp Einfuehrung Teil 1

5704.12.2013

Schleifensteuerung

• break

Schleifenausführung komplett beenden

In verschachtelte Schleifen, bezieht break immer nur auf die aktuelle Schleife

• continue

Bricht die Durchführung der aktuellen Iteration ab.

In verschachtelte Schleifen, bezieht continue immer nur auf die aktuelle Schleife

• Einsatzgebiet:

Schleifensteuerungskonstrukte kommen insbesondere bei Endlosschleifen zum Einsatz

Page 58: C Sharp Einfuehrung Teil 1

5804.12.2013

Demo: „e05_break.cs“

Page 59: C Sharp Einfuehrung Teil 1

5904.12.2013

Fehlerbehandlung(engl. Exception Handling)

Page 60: C Sharp Einfuehrung Teil 1

6004.12.2013

try - catch

• Syntax:

try {

// …

}

catch(Exception) {

// …

}

• catch – Block wird nur ausgeführt, wenn Fehler auftreten. Man spricht von „Exceptions geworfen“

• Mehrere catch Blöcke möglich

Ähnlich wie bei switch – case

Page 61: C Sharp Einfuehrung Teil 1

6104.12.2013

Erweiterung: finally

• Anweisungen innerhalb von finally werden immer ausgeführt (ob mit oder ohne Exception).

• Syntax:

try {

// Tue irgendwas

}

catch {

// Tue das, wenn ein Fehler auftritt

}

finally {

// Tue das auf jedenfall!

}

Page 62: C Sharp Einfuehrung Teil 1

6204.12.2013

Demo: „e06_try_c.cs“

Page 63: C Sharp Einfuehrung Teil 1

6304.12.2013

Was ist ein Array?

• Problemfrage:

Große Anzahl an Variablen (Daten) verarbeiten

Beispiel:

• Pixel eines Bildes: mehrere Millionen Pixel

• Native Lösung: Pixel pixel1, pixel2,…,pixel1000000;

• Lösung: Arrays!

Definition: „Mehrere Variablen desselben Typs, die sich denselben Bezeichner teilen, werden als Array bezeichnet.“

Synonym: Datenfelder

Page 64: C Sharp Einfuehrung Teil 1

6404.12.2013

Array deklarieren

• Arrays müssen wie Variablen vor Ihrer Nutzung deklariert werden.

• Beispiele:

int[] zahlen;

string[] namen;

• Syntax:

type[] identifier;

• Vergleich zur Deklaration von Variablen

int zahl;

string name;

Page 65: C Sharp Einfuehrung Teil 1

6504.12.2013

Array initialisieren

• Im Gegensatz zu Variablen müssen, Arrays vor Ihrer Nutzung initialisiert werden.

• Beispiel:

zahlen = new int[10];

namen = new string[100];

• Syntax:

identifier = new type[anzahl];

Selbige Typ von der Deklaration

• Kombinierbar:

type identifier = new type[anzahl];

• Die einzelnen Variablen des Arrays werden automatisch mit 0, null oder falseabhängig von ihrem Datentyp initialisiert. Die Variablen werden als Elementebezeichnet.

Page 66: C Sharp Einfuehrung Teil 1

6604.12.2013

Zugriff auf Elemente des Arrays

• Beispiel:

Console.WriteLine(namen[0]);

• Syntax: Lesezugriff

identifier[index];

• Syntax: Schreibzugriff

identifier[index] = wert;

• Die Zählung beginnt mit 0.

• Überschreitet index die Größe vom Array, wirft .net eine Exception zurück

Schutzmaßnahme gegen Angriffe

Page 67: C Sharp Einfuehrung Teil 1

6704.12.2013

Demo: „e01_init.cs“Arrays deklarieren und initialisieren

Zugriff auf die Elemente vom Array

Page 68: C Sharp Einfuehrung Teil 1

6804.12.2013

Wertzuweisung bei der Initialisierung

• Beispiel:string[] superhelden = new string[4] {

"Bruce Wayne", "Peter Parker", "Clark Kent", "Bruce Banner"};

• Syntaxtype[] identifier = new type[] {

e1,e2,e3,…

};

• Unabhängig von der Deklaration möglichtype[] identifier = new type[] {

e1,e2,e3,…

};

• Dieses Sprachkonstrukt steht nur bei der Initialisierung des Array zur Verfügung!

Page 69: C Sharp Einfuehrung Teil 1

6904.12.2013

Initialisierung vom Array und Elementen

• Der Begriff Initialisierung ist bei Arrays zweideutig.

Initialisierung des Arrays

Initialisierung der Elemente vom Array.

• Die Deklaration ist nur für das Array selbst notwendig. Die Deklaration der Elemente ist implizit.

• Technische Details:

Was passiert bei der Deklaration des Array?

Was passiert bei der Initialisierung des Array?

Was passiert bei der Initialisierung der Elemente vom Array?

• Achtung! Die Größe eines Arrays ist fest

Frage: Größe von Array verändern?

Page 70: C Sharp Einfuehrung Teil 1

7004.12.2013

foreach - Schleife

• Funktion:

Alle Elemente eines Arrays einmal durchlaufen

Nur Lesezugriff

• Syntaxtype array = new type[numb];

foreach(type x in array) { expr }

• Beispiel

foreach (int x in zahlen) {

// Wertezuweisung ist nicht möglich

// x *= 2;

Console.Write(x + "\t");

}

Page 71: C Sharp Einfuehrung Teil 1

7104.12.2013

Nützliche Funktionen

Funktion Beschreibung

v.Length Anzahl vom Array vHäufig auch als Länge bezeichnet

Array.Sort(v) Array v sortieren

Array.Sort(k,v) Array v mit k verknüpfen und v anschließend mit k als Kriterium sortieren

Array.Reserve(v) Die Anordnung umkehren

Array.CopyTo(s,si,d,di,n) Kopiert n Element von Array s (ab Index si) in Array d (ab Index di)

• Klasse „System.Array“

• Weitere Funktionen verfügbar!

http://msdn.microsoft.com/en-us/library/system.array.aspx

Page 72: C Sharp Einfuehrung Teil 1

7204.12.2013

Demo: „e02_utils.cs“Anwendung von Standardfunktionalitäten

Page 73: C Sharp Einfuehrung Teil 1

7304.12.2013

Array duplizieren

• Achtung! Fehler: (siehe „e03_dupl.cs“)

int[] X = new int[] {

1,2,3,4,5,6,7,8,9

};

int[] Y = X;

• Semantische Fehler!

Die beiden Verweise X und Y zeigen auf dasselbe Array im Heap.

• Lösung: (Pseudocode)

Leeren Array erzeugen mit selbige Länge wie Quellarray

Alle Elemente kopieren

• Oder über v.Clone() und Casten

Page 74: C Sharp Einfuehrung Teil 1

7404.12.2013

Demo: „e03_dupl.cs“Anwendung von Standardfunktionalitäten

Page 75: C Sharp Einfuehrung Teil 1

7504.12.2013

Mehrdimensionale Arrays

• Syntax: 2D Array

type[,] = new type[r,c];

• Beispiel: 2D Array

byte [,] Bild = new byte[1920, 1080];

• Syntax: 3D Array

type[,,] = new type[x,y,z];

• Dimension unbegrenzt!

• Vorsicht! Nutzung von n-dimensionale Arrays

Speicherverbrauch: 𝑑1 ∗ 𝑑2 ∗ 𝑑3 ∗ ⋯𝑑𝑛

Beispiel: 1 Sekunde HD-Film

• 1920 ∗ 1080 ∗ 25 = 51.840.000 (ca. 51 MB)

Page 76: C Sharp Einfuehrung Teil 1

7604.12.2013

Klasse ArrayList

• Abstraktion von einem Array mit variable Länge

• Mischen von Typen innerhalb einer Liste erlaubt: String, int, etc.

• Neues Elemente aufnehmen

alist.Add(e) e der alist hinzufügen

alist.Insert(pos, e) e der alist an der Position pos hinzufügen

• Elemente aus der Liste löschen

alist.Remove(e) Element e aus der Liste entfernen

alist.RemoveAt(i) Element an der Position i entfernen

Page 77: C Sharp Einfuehrung Teil 1

7704.12.2013

Demo: „e04_alist.cs“Erstellen einer ArrayList

Hinzufügen und Entfernen von Elementen

Page 78: C Sharp Einfuehrung Teil 1

7804.12.2013

http://www.draphony.de

facebook.com/DraphonyGames

Vielen Dank für die Aufmerksamkeit