C# - Einführung in die Programmiersprache „Bedingte ... · Console.Write([Text]) schreibt den...

Post on 05-Jun-2018

213 views 0 download

Transcript of C# - Einführung in die Programmiersprache „Bedingte ... · Console.Write([Text]) schreibt den...

Leibniz Universität IT Services | Anja Aue

C# - Einführung in die Programmiersprache

„Bedingte Anweisungen und Schleifen“

Gehe nach links oder rechts

Gehe solange geradeaus...

C# - Einführung | 27.06.12 Seite 2

Programmabläufe grafisch abbilden

In Flussdiagrammen werden mit Hilfe von verschiedenen grafischen Elementen die Aktionen eines Programms abgebildet.

Die grafischen Elemente von Flussdiagrammen sind in der DIN 66001 definiert.

C# - Einführung | 27.06.12 Seite 3

Anweisungen

Aktionen, die der Computer ausführt.

Zeile in einem Computerprogramm. In C# werden Anweisungen durch ein Semikolon beendet. Leere Anweisungen (;) sind möglich.

C# - Einführung | 27.06.12 Seite 4

... in einem Flussdiagramm

Einlesen von varX und varY

tmpX = varX

tmpX = varX

… wird für die Ein- und Ausgabe genutzt.

… stellen eine Zeile im Programmcode dar.

C# - Einführung | 27.06.12 Seite 5

Objekt „Konsole“

Das Objekt System.Console beschreibt die Eingabeaufforderung.

Die Eingabeaufforderung ist hierarchisch unterhalb des Systems eingeordnet. Die Hierarchie wird durch den Punkt abgebildet.

Die vollständige Syntax muss nicht genutzt werden, wenn am Anfang des Programm der Gültigkeitsbereich mit Hilfe der Anweisung using System importiert wurde.

C# - Einführung | 27.06.12 Seite 6

Daten in die Konsole schreiben

Console.Write([Text]) schreibt den angegebenen Text in die Eingabeaufforderung.

Console.WriteLine([Text]) schreibt den angegebenen Text in die Eingabeaufforderung. Nach der Ausgabe des Textes wird ein Zeilenumbruch automatisiert durchgeführt.

C# - Einführung | 27.06.12 Seite 7

Verknüpfung von Text

Literale und Variablen können mit Hilfe des Pluszeichens verknüpft werden.

Andere Möglichkeit: In dem Literal werden Platzhalter für den variablen Text genutzt.

Diese Platzhalter bieten verschiedene Formatierungsmöglichkeiten.

Console.WriteLine("Buchstabe: " + intBuchstabe);

Console.WriteLine("Buchstabe: {0}", intBuchstabe);

Console.WriteLine("Buchstabe: {1} : {0}",strBuchstabe, intBuchstabe);

C# - Einführung | 27.06.12 Seite 8

Mit Platzhaltern arbeiten

Der Methode werden verschiedenen Parameter übergeben. Die Parameterliste wird durch die runden Klammern begrenzt. Die Parameter werden durch Kommata getrennt.

Als erste Parameter wird ein Literal übergeben. In diesem Literal werden Platzhalter genutzt.

Platzhalter werden durch die geschweiften Klammern in dem Literal gekennzeichnet. Die Variablen in der Parameterliste werden von 0 bis n durchnummeriert.

Die Anzahl der Variablen entspricht der Anzahl der genutzten Platzhalter.

Console.WriteLine("Buchstabe: {0}", intBuchstabe);

Console.WriteLine("Buchstabe: {1} : {0}",strBuchstabe, intBuchstabe);

C# - Einführung | 27.06.12 Seite 9

Platzhalter und Variablen

Console.WriteLine("Buchstabe: {1} : {0}",strBuchstabe, intBuchstabe);

Die Nummern der Platzhalter müssen nicht der Reihenfolge der Variablen entsprechen.

Die Nummer 0 entspricht der ersten Variablen in der Parameterliste. Die Nummer 1 der zweiten Variablen und so weiter.

C# - Einführung | 27.06.12 Seite 10

Formatierung der Ausgabe-Daten

Console.WriteLine("Dezimalzahl: {0}", dblZahl);

Console.WriteLine("Dezimalzahl : {0:0}", dblZahl);

Console.WriteLine("Dezimalzahl : {0:00.000}", dblZahl);

Console.WriteLine("Dezimalzahl : {0:#0.000}", dblZahl);

Console.WriteLine("Dezimalzahl : {0,15:0.00}", dblZahl);

Platzhalter Formatierung

{0 : 0} Anzahl der Stellen vor dem Komma

{0 : 00.000} Anzahl der Stellen vor und nach dem Komma

{0 : #0.000} Hash-Zeichen: Falls vorhanden ...

{0, 15 : 0.00} 15 Zeichen breite rechtsbündige Ausgabe.-15 Zeichen breite linksbündige Ausgabe.

C# - Einführung | 27.06.12 Seite 11

Daten von der Konsole lesen

Console.ReadLine() liest die nächste Zeile von der Konsole ein. Die Zeile wird mit einem Zeilenumbruch abgeschlossen.

Console.ReadKey([Boolean]) ruft die nächste gedrückte Zeichen- oder Funktionstaste ab. Bei einem Parameter von True wird das Zeichen in der Konsole angezeigt.

Console.Read() liest ein Zeichen als Integer von der Konsole ein.

C# - Einführung | 27.06.12 Seite 12

Bedingte Anweisungen ...

führen einen Programmabschnitt in Abhängigkeit einer Bedingung aus.

fragen im Kopf eine Bedingung ab. Falls die Bedingung zutrifft, wird der dazugehörige Code ausgeführt.

können als Wenn-Dann-Anweisung bezeichnet werden.

C# - Einführung | 27.06.12 Seite 13

… in C#

if (eingabe == 'h'){

umrechnung = flaeche / ToHektar;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Hektar: {0}", umrechnung);

}

else if (eingabe == 'a'){

umrechnung = flaeche / ToAr;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Ar: {0}", umrechnung);

}

else{

Console.WriteLine("in Quadratmeter: {0}", flaeche);

}

C# - Einführung | 27.06.12 Seite 14

… in Sprache übersetzt

Falls die Variable eingabe gleich dem Wert 'h' ist{

umrechnung = flaeche / ToHektar;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Hektar: {0}", umrechnung);

}

Falls die Variable eingabe gleich dem Wert 'a' ist{

umrechnung = flaeche / ToAr;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Ar: {0}", umrechnung);

}

andernfalls{

Console.WriteLine("in Quadratmeter: {0}", flaeche);

}

C# - Einführung | 27.06.12 Seite 15

… in einem Flussdiagramm

Flaeche / Hektar Flaeche / Ar

Ausgabe Ausgabe Ausgabe

eingabe = h eingabe = aneinnein

ja ja

C# - Einführung | 27.06.12 Seite 16

Bedingungen ...

sind Ausdrücke, die einen boolschen Wert als Ergebnis liefern.

treffen zu (wahr, true) oder nicht (falsch, false). vergleichen zwei Werte. werden immer in runde Klammern gesetzt. Andernfalls wird ein

Syntaxfehler angezeigt. können in beliebiger Reihenfolge verknüpft werden.

C# - Einführung | 27.06.12 Seite 17

Vergleichsoperatoren

Operator Aktion Beispielx = 4; y = 9

== Ist gleich (x == y) = false

!= Ist ungleichIst nicht gleich

(x != y) = true

< Kleiner als (x < y) = true

<= Kleiner gleich als (x <= y) = true

> Größer als (x > y) = false

>= Größer gleich als (x >= y) = false

C# - Einführung | 27.06.12 Seite 18

if-Anweisung ...

if (eingabe == 'h'){

umrechnung = flaeche / ToHektar;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Hektar: {0}", umrechnung);

}

bestehen aus einer Bedingung und einen Codeabschnitt.

beschreiben exakt einen Fall.

können verschachtelt werden. Die Bedingung muss geklammert werden. Der auszuführende Codeabschnitt beginnt und endet mit den

geschweiften Klammern.

C# - Einführung | 27.06.12 Seite 19

else-Anweisung ...

if (eingabe == 'h'){

umrechnung = flaeche / ToHektar;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Hektar: {0}", umrechnung);

}

else{

Console.WriteLine("in Quadratmeter: {0}", flaeche);

}

wird mit Hilfe der Einrückung einer if-Anweisung zugeordnet. beschreibt den Standardfall. fängt alle nicht behandelten Fälle ab.

C# - Einführung | 27.06.12 Seite 20

Vergleich mit Fließkommazahlen

static void Main(string[] args)

{

float ergebnis;

float result;

ergebnis = 0.09f * 99.999999f; // 8,99999991

result = 0.09f * 100f; // 9

if (ergebnis == result) // Hinweis: Nährungswerte

{

Console.WriteLine("Ergebnis = Result = 9");

}

}

C# - Einführung | 27.06.12 Seite 21

Bedingungen miteinander verknüpfen

Logische Operatoren verknüpfen zwei Bedingungen miteinander.

Und (And): Beide Bedingungen müssen wahr sein. Falls die linke Bedingung falsch ist, wird die rechte Bedingung nicht ausgewertet.

Oder (Or): Eine der beiden Bedingungen muss wahr sein. Falls die linke Bedingung wahr ist, wird die rechte Bedingung nicht ausgewertet:

Nicht (Not) negiert eine Bedingung.

C# - Einführung | 27.06.12 Seite 22

Logische Operatoren

Operator Aktion Beispiel

&& And (x > 0) && (x < 10)

|| Or (x == 'Q') || (x == 'q')

! Not !(x = 10)(x != 10)

C# - Einführung | 27.06.12 Seite 23

Wahrheitstabelle

Bedingung Möglichkeiten

a b !(a) a && b a || bfalse false true false false

true false false false true

false true true false true

true false false false true

C# - Einführung | 27.06.12 Seite 24

Und-Verknüpfung

if ((breite > 0) && (laenge > 0))

{

flaeche = breite * laenge;

Console.Write("Ar (a) oder Hektar (h): ");

eingabe = Convert.ToChar(Console.ReadLine());}

C# - Einführung | 27.06.12 Seite 25

Oder-Verknüpfung

if ((Double.TryParse(strBreite, out breite)) ||

(Double.TryParse(strLaenge, out laenge)))

{

if ((breite > 0) && (laenge > 0))

{

// * laenge wird nicht gesetzt

flaeche = breite * laenge;

umrechnung = flaeche / ToHektar;

}

}

C# - Einführung | 27.06.12 Seite 26

Rangfolge der Operatoren

Die Operatoren mit der höchsten Priorität befinden sich in der ersten Zeile.Operatoren in einer Zeile haben eine gleichwertige Priorität.

x++ x--

+ - ! ++x --x

* / %

+ -

< <= => >

== !=

&&

||

= += -= *= /= %=

C# - Einführung | 27.06.12 Seite 27

Anweisungsleiter

if (eingabe == 'h'){

umrechnung = flaeche / ToHektar;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Hektar: {0}", umrechnung);

}

else if (eingabe == 'a'){

umrechnung = flaeche / ToAr;

Console.WriteLine("in Quadratmeter: {0}", flaeche);

Console.WriteLine("in Ar: {0}", umrechnung);

}

else{

Console.WriteLine("in Quadratmeter: {0}", flaeche);

}

C# - Einführung | 27.06.12 Seite 28

Hinweise

Der erste Fall beginnt mit dem Schlüsselwort if.

Alle anderen zu behandelnden Fälle beginnen mit else if. Beiden Schlüsselwörtern folgt eine Bedingung, die mit anderen

verknüpft werden kann. Falls die Bedingung erfüllt ist, wird der passende Codeabschnitt

ausgeführt. Der Codeabschnitt beginnt und endet mit den geschweiften Klammern.

Der Standardfall beginnt mit dem Schlüsselwort else. Der Standardfall wird am Ende der Leiter beschrieben.

C# - Einführung | 27.06.12 Seite 29

Andere Möglichkeit

switch (eingabe){

case 'h':

umrechnung = flaeche / ToHektar;

break;

case 'a':

umrechnung = flaeche / ToAr;

break;

default:

Console.WriteLine("in Quadratmeter: {0}", flaeche);

break;

}

C# - Einführung | 27.06.12 Seite 30

Hinweise

Mit Hilfe einer switch-Anweisung wird überprüft, ob die angegebene Variable einen bestimmten Wert hat.

Der angegebene Schalter kann verschiedene Zustände annehmen.

Dem Schlüsselwort switch folgt in runden Klammern der Name der zu untersuchenden Variablen.

Innerhalb der geschweiften Klammern werden die verschiedenen zu untersuchenden Fälle angegeben.

C# - Einführung | 27.06.12 Seite 31

Definition der verschiedenen Fälle

Jeder Fall wird mit dem Schlüsselwort case eingeleitet.

Dem Schlüsselwort folgt die Angabe einer Ganzzahl oder eines Char-Zeichens.

Die Beschreibung des Falls endet mit dem Doppelpunkt. Dem Doppelpunkt folgen die dazugehörigen Anweisungen. Die Anzahl der beschriebenen Fälle ist beliebig groß.

C# - Einführung | 27.06.12 Seite 32

Definition des Standardfalls

Der Standardfall wird mit dem Schlüsselwort default eingeleitet.

Die Beschreibung des Falls endet mit dem Doppelpunkt. Dem Doppelpunkt folgen die dazugehörigen Anweisungen. Die Angabe des Standardfalls ist optional.

C# - Einführung | 27.06.12 Seite 33

Sprunganweisungen

break beendet einen case-Zweig oder unterbricht einen Schleifendurchlauf.

return wert gibt einen Wert an den Aufrufer zurück. Die Methode wird beendet.

Ein case-Zweig muss immer durch eine Sprunganweisung beendet werden. Ausnahme: Leere case-Anweisungen. Die Anweisungen des nächsten case-Zweigs werden ausgeführt.

C# - Einführung | 27.06.12 Seite 34

Schleifen ...

wiederholen Anweisungen ...

mit Hilfe einer Zählvariablen x-Mal (for-Schleife). beliebig oft in Abhängigkeit einer Bedingung (do-while- oder

while-Schleifen). Eine Bedingung kann mit einer / mehreren anderen Bedingungen verknüpft werden.

können vorzeitig abgebrochen werden. können geschachtelt werden.

C# - Einführung | 27.06.12 Seite 35

while-Schleife

varZaehler = 1;

summe = 0;

while (varZaehler < max)

{

summe = summe + varZaehler;

varZaehler = ++varZaehler;

}

Console.WriteLine("Summe: {0}", summe);

C# - Einführung | 27.06.12 Seite 36

Hinweise

Dem Schlüsselwort while folgt die Bedingung im Kopf der Schleife.

Falls die Bedingung zutrifft, wird der dazugehörige Block von Anweisungen ausgeführt. Der Block ist durch die geschweiften Klammern begrenzt.

Falls in dem Block die Zählvariable nicht neu gesetzt wird, wird eine Endlosschleife erzeugt.

C# - Einführung | 27.06.12 Seite 37

Leerer Schleifenrumpf

while ((Convert.ToChar(Console.Read()) != '\n')) ; Zu dieser Schleife existieren keine Anweisungen. Der Kopf der Schleife endet mit einem Semikolon für eine leere

Anweisung. In diesem Beispiel wird solange ein Zeichen von der Konsole

gelesen, bis das Zeilenende erreicht ist. Falls kein Zeilenende vorhanden ist, läuft die Schleife endlos.

C# - Einführung | 27.06.12 Seite 38

do-while-Schleife

varZaehler = 1;

summe = 0;

do

{

summe = summe + varZaehler;

varZaehler = ++varZaehler;

}while (varZaehler < max);

Console.WriteLine("Summe: {0}", summe);

C# - Einführung | 27.06.12 Seite 39

Hinweise

Dem Schlüsselwort do folgt ein Block von Anweisungen.

Dieser Block wird mindestens einmal durchlaufen. Falls in dem Block die Zählvariable nicht neu gesetzt wird, wird eine Endlosschleife erzeugt.

Nach jedem Durchlauf wird die Bedingung im Fuß der Schleife überprüft.

Die Bedingung beginnt mit dem Schlüsselwort while und endet mit einem Semikolon.

C# - Einführung | 27.06.12 Seite 40

for-Schleife

summe = 0;

for (varZaehler = 1; varZaehler < max; varZaehler++)

{

summe = summe + varZaehler;

}

Console.WriteLine("Summe: {0}", summe);

C# - Einführung | 27.06.12 Seite 41

Hinweise zum Schleifenkopf

for (varZaehler = 1;

varZaehler < max;

varZaehler++) Dem Schlüsselwort for folgen in den runden Klammern drei

Anweisungen. Jede Anweisung endet mit einem Semikolon und kann leer sein.

In der ersten Anweisung wird die Zählvariable auf einen Startwert gesetzt.

In der zweiten Anweisung wird die Bedingung zur Beendigung der Schleife definiert.

In der dritten Anweisung wird der neue Wert der Zählvariablen für jeden Durchlauf berechnet.

C# - Einführung | 27.06.12 Seite 42

Leere Anweisungen nutzen

varZaehler = 1;

summe = 0;

for (; ; ){

if (varZaehler < max){

summe = summe + varZaehler;

}

else{

break;

}

varZaehler++;

}

C# - Einführung | 27.06.12 Seite 43

Schleife vollständig abbrechen

breite = 1;

laenge = 1;

while(true){

flaeche = breite * laenge;

if (flaeche >= 100){

break;

}

breite = breite * 2;

laenge = laenge * 2;

}

C# - Einführung | 27.06.12 Seite 44

Hinweise

Das Schlüsselwort break bricht den aktuellen Schleifen-Durchlauf ab.

Die Anweisungen im Anschluss des Schleifenrumpfs, in dem das Schlüsselwort steht, werden ausgeführt.

Falls das Schlüsselwort in einer inneren Schleife genutzt wird, wird nur diese abgebrochen. Die äußere Schleife wird fortgesetzt.

C# - Einführung | 27.06.12 Seite 45

Nutzung in verschachtelten Schleifen

for (int zahlL = 1; ; zahlL++){

if (zahlL > 10){

break; // Abbruch for(int zahlL

}

for (int zahlR = 1; ; zahlR++){

if ((zahlR > 10) || (zahlL > 10)) {

break; // Abbruch for(int zahlR

}

ergebnis = zahlL * zahlR;

}

}

C# - Einführung | 27.06.12 Seite 46

Sprung zum nächsten Schleifendurchlauf

for (int zahlL = 1; ; zahlL++){

for (int zahlR = 1; ; zahlR++){

if (((zahlL % 2) > 0) && ((zahlR % 2) > 0)){

ergebnis = zahlL * zahlR;

}

else {

continue;

}

}

}

C# - Einführung | 27.06.12 Seite 47

Hinweise

Das Schlüsselwort continue bricht den aktuellen Schleifen-Durchlauf ab.

Der nächste Schleifen-Durchlauf wird gestartet.