Upload
lamkhue
View
213
Download
0
Embed Size (px)
Citation preview
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.