Leseprobe C# für Einsteiger

Werbung
Einleitung
Copyright 2009 – Heimo Gaicher
Dieses Skriptum richtet sich an Programmier-Einsteiger, die mit der Sprache C# eine moderne
objektorientierte Programmiersprache erlenen möchten.
Da es für Einsteiger nicht gerade einfach ist, eine Programmiersprache zu erlernen, wurde dieses Skript
schrittweise mit vielen Beispielen ausgearbeitet.
Auf Blattfüllende allgemeine Einführungen und Erläuterungen wurde bewußt verzichtet.
Da die meisten Anfänger mit der Objektorientierung zu Beginn Verständnisprobleme haben, wurde kein
objektorientierter Zugang gewählt.
Die entsprechenden Beispiele werden im Programmiercode genau erklärt und führen so zu einem besseren
Verständnis.
Eine Programmiersprache lernt man am besten, indem man programmiert.
Arbeiten Sie dieses Skript von Anfang an genau durch und versuchen Sie auch die Übungsaufgaben
selbständig zu lösen. Alle Beispiele sind vollständig mit Code erklärt. Für die Übungsbeispiele gibt es
absichtlich keine Musterlösung, da dies Ihre Aufgabe sein soll, entsprechende Überlegungen zu treffen und
Lösungen zu finden.
Dieses Skript wurde im Zuge meiner eigenen Ausbildung mit großer Sorgfalt geschrieben. Sollten sich
dennoch Fehler eingeschlichen haben, freue ich mich über entsprechende Hinweise. Anmerkungen und
Kritiken sind unter [email protected] immer willkommen.
Alle Markennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt und sind
möglicherweise eingetragene Warenzeichen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich
geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie
Einspeicherung und Verarbeitung in elektronischen Systemen.
Viel Spaß beim Erlernen von C#
Heimo Gaicher
Copyright 2009 – Heimo Gaicher
Inhalt
1. Arbeiten mit VISUAL STUDIO
1.1.
Download und Installation
1.2.
Start mit VISUAL STUDIO
Seite
5
6
2. Programmieren in der Konsole
2.1.
Unser erstes Programm
2.2.
Klassen und Methoden
2.3.
Struktur einer Klasse
2.4.
Ausgabe mit Zeit und Datum
2.5.
Variablendeklaration und Variablentypen, Werte einlesen und ausgeben
2.6.
Datentypen in Visual C#
2.7.
Ausgabe mit Variablen
2.8.
Formatierte Ausgabe von Zahlen – Formatausdruck{}
2.9.
Escape-Zeichen
2.10.
TypeCasting – Umwandlung von Datentypen
2.11.
Einlesen von Werten
2.12.
Debugging
2.13.
Typeabfrage von Variablen mit GetType
2.14.
Eigenschaften der Klasse Console & Formatierungen
2.15.
Zeichenketten – Strings
2.16.
Strings anlegen und ausgeben
2.17.
Strings einfügen, ersetzen und löschen
2.18.
Strings verketten und vergleichen
2.19.
Bezeichner in C# - Schlüsselwörter
7
8
11
12
14
15
17
18
19
20
21
22
25
29
29
30
31
32
34
35
3. Rechnen in C#
3.1.
Integerdivision
3.2.
Operatoren in C#
3.3.
Zuweisungen
3.4.
Vergleiche
3.5.
Aussagenlogik
3.6.
Die Math-Klasse – Potenzen, Wurzel, Logarithmen
3.7.
Der Operand Modulo %
36
36
37
38
39
40
41
43
4. Übungsbeispiele
4.1.
Übungsbeispiel Treibstoffverbrauch
4.2.
Übungsbeispiel Freier Fall mit Luftwiderstand
4.3.
Übungsbeispiel Umrechnung von Grad Celsius in Grad Fahrenheit
4.4.
Übungsbeispiel Berechnung des Ostersonntages nach Gauss
44
45
46
47
48
5. Verzweigungen
5.1.
Die if-else Verzweigung
5.2.
Geschachtelte if-else Anweisung
5.3.
Abfragen mit switch / case
5.4.
Die Anweisungen break, continue und goto
5.5.
Übungsbeispiel Taschenrechner
5.6.
Übungsbeispiel Wochentag
49
49
53
55
57
58
59
Copyright 2009 – Heimo Gaicher
5.7.
5.8.
5.9.
5.10.
5.11.
5.12.
5.13.
5.14.
5.15.
5.16.
5.17.
5.18.
5.19.
5.20.
5.21.
5.22.
5.23.
5.24.
5.25.
5.26.
5.27.
6. Klassen
6.1.
for – Schleifen
Übungsbeispiel Sägezahn
Kopfgesteuerte Schleife mit while
Fussgesteuerte Schleife mit do – while
Übungsbeispiel Dezimalzahl in eine Binärzahl umwandeln
Übungsbeispiel quadratische Funktion
Übungsbeispiel zur Berechnung der Fibonacci Zahlenfolge
Übungsbeispiel schräger Wurf
Zufallszahlen erzeugen
Arrays
Arrays – parallele Felder
Übungsbeispiel Umwandlung einer Binärzahl in eine Dezimalzahl
Arrays – mehrdimensionale Felder
Arrays – Abfrage mit einer foreach-Schleife
Arrays – ArrayList (Felder mit dynamischer Größe)
Unterprogramme und Funktionen
Übungsbeispiel Passwortgenerator
Gültigkeitsbereich von Variablen
Globale Variablen
Call by Value – Wertübergabe
Call by Reference – Adressübergabe
63
65
68
69
70
73
77
78
79
81
86
87
88
89
89
92
95
97
98
98
100
Deklaration von Klassen
101
101
7. Programmierung mit Windows Forms
7.1.
Kontrollkästchen - CheckBox
7.2.
Automatischer Farbwechsel
7.3.
Buttons & Labels – Programmbeispiel Countdown
7.4.
Textboxen
7.5.
Standardschaltflächen
7.6.
Objekte, Eigenschaften und Methoden
7.7.
Ereignisse
7.8.
Das KeyPress Ereignis
7.9.
Übungsbeispiel Berechnung des BMI
7.10.
Übungsbeispiel Rechentrainer
7.11.
Übungsbeispiel Textverschlüsselung
7.12.
Übungsbeispiel Währungsumrechner
7.13.
InputBox aus Visual Basic
7.14.
Die Methoden IndexOf und LastIndexOf
7.15.
Übungsbeispiel Lotto 6 aus 45
7.16.
Try – Catch, Ausnahmebehandlung
7.17.
Übungsbeispiel Würfelspiel
7.18.
Die Klasse RadioButton
7.19.
Tool Tip Steuerelement
7.20.
Picture Box
7.21.
Scroll Bar – Bildlaufleiste
105
108
110
115
117
118
118
119
121
123
125
127
128
129
131
134
137
139
142
144
145
147
Copyright 2009 – Heimo Gaicher
7.22.
7.23.
7.24.
8. Anhang
8.1.
8.2.
8.3.
8.4.
8.5.
8.6.
Anwendungen für andere Nutzer veröffentlichen
Combo Box
List Box
151
152
155
Strings formatieren mit C#
Zahlen individuell formatieren
Datumswerte formatieren
Datumswerte individuell formatieren
Math Klasse – Methodenübersicht
ASCII-Tabelle
157
157
157
157
158
159
160
Copyright 2009 – Heimo Gaicher
1. Arbeiten mit VISUAL STUDIO 2008
Um in C# programmieren zu können, benötigen wir eine Software (Entwicklungsumgebung). Wir verwenden
VISUAL STUDIO 2008 EXPRESS EDITION.
VISUAL STUDIO 2008 EXPRESS EDITION ist eine kostenlose Software und Sie können Sie direkt von der
Microsoft-Webseite herunterladen.
1.1 Download und Installation
VISUAL STUDIO 2008 EXPRESS einrichten
Hier der Downloadlink:
http://www.microsoft.com/germany/express/download/webdownload.aspx
Wählen Sie VISUAL STUDIO 2008 EXPRESS EDITION und klicken Sie im Fenster Visual C# auf Download.
Wählen Sie bei der Installation alle Optionen aus.
Copyright 2009 – Heimo Gaicher
1.2 Start mit VISUAL STUDIO 2008
Starten Sie
ie VISUAL STUDIO 2008 EXPRESS. Beim Start öffnet sich ein Fenster
enster mit den letzten Projekten.
Um ein neues Projekt zu erstellen, klicken Sie auf Erstellen: Projekt… und es öffnet sich ein Assistent zum
Erstellen eines neuen Projektes.
Wählen Sie Konsolenanwendung
solenanwendung aus und geben Sie dem Projekt einen Namen z.B. „Ausgabe“. Klicken Sie auf
OK und es öffnet sich die Konsole.
Copyright 2009 – Heimo Gaicher
Sie sehen bereits einen ersten Code. Die Bedeutung des gesamten Codes soll uns aber an dieser Stelle noch
nicht kümmern.
Projektmappen-Explorer
Dieser enthält alle Dateien, die zum Projekt
gehören. Die Datei Program.cs enthält den
Programmcode.
Unseren Programmiercode schreiben wir
innerhalb der geschweiften Klammern.
In VISUAL STUDIO 2008 lässt sich die Anordnung der Fenster flexibel gestalten. Sämtliche Fenster lassen sich
an allen Ecken andocken. So können Sie sich VISUAL STUDIO 2008 nach Ihren eigenen Bedürfnissen
einrichten.
2. Programmieren in der Konsole
Die Programmierung in der Konsole dient am Anfang dazu, um Code bzw. kleine Programme zu schreiben
und diese zu verstehen. Grafische Komponenten, Formulare usw. wären hier am Anfang für den Lernenden
hinderlich. Sobald aber das Grundgerüst erarbeitet ist, steigen wir um und programmieren in WindowsForms.
Unser Projekt (auch jedes andere) startet an der Stelle static void Main(string[] args)und wird von
den beiden geschwungenen Klammern { } eingeschlossen.
Innerhalb der beiden Klammern wird unser Code schrittweise abgearbeitet und das Programm entsprechend
ausgeführt.
Copyright 2009 – Heimo Gaicher
2.1 Unser erstes Programm
Wir gehen gleich an die Sache heran und schreiben unser erstes kleines Programm.
Wir verzichten an dieser Stelle an eine „Einführung“ in C#, .Net usw., da dies anfangs ohnehin für einen
Einsteiger nur schwer verstanden wird und nur einen unnötigen Ballast darstellt.
Unser erstes Programm soll einfach nur „Hallo, C# macht Spaß!“ auf den Bildschirm ausgeben.
Um etwas auszugeben verwenden wir den „Befehl“
Console.WriteLine
gefolgt von dem, (in Klammern und unter “ “) was wir ausgeben möchten also
("Hallo, C# macht Spass!");
Das Semikolon ; am Ende schließt die Befehlszeile ab.
Achtung!
C# unterscheidet zwischen Groß- und Kleinschreibung!
Wenn Sie ein C in die Konsole eingeben, öffnet sich ein Fenster, die IntelliSense und hilft Ihnen eine Auswahl
möglicher Befehle zu treffen. Um Schreibfehler zu vermeiden sollten Sie die IntelliSense immer verwenden.
Sobald Sie den Punkt setzen meldet sich die
IntelliSense erneut und schlägt erneut mögliche
Befehle vor. Wählen Sie WriteLine und
vollenden Sie die Befehlszeile.
Copyright 2009 – Heimo Gaicher
2.3 Struktur einer Klasse
Ein C#-Programm besteht aus Klassen.
Eine Klasse beschreibt Daten und Operationen, die ausgeführt werden können.
Innerhalb einer Klasse werden Operationen als Methoden definiert.
Eine Methode kann selbst erstellt werden oder auch fertig als Routine aus einer Klassenbibliothek verwendet
werden.
Anhand des folgenden Beispielprogrammes läßt sich die Grundstruktur eines C#-Programmes erkennen.
Das Programm enthält eine einzige Klasse – die Klasse Program und diese beinhaltet die Methode Main.
Die statische Methode Main muss in jedem Programm vorhanden sein, denn hier beginnt die
Programmausführung. Main ist sozusagen der Startpunkt eines jeden C#-Programmes. Das Schlüsselwort
static bedeuted, dass die Methode an die Klasse Program gebunden ist.
Name der Klasse
Beginn der Klasse
Beginn der Methode
Ende der Methode
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hallo, C# macht Spass!");
Console.ReadLine();
}
}
Ende der Klasse
Die Methode Main enthält zwei Anweisungen.
1. Console.WriteLine("Hallo, C# macht Spass!");
WriteLine() ist eine Methode der Klasse Console. Wird die Methode WriteLine () aufgerufen,
gibt sie den Text in den beiden Klammern gefolgt von einem Linefeed (Absatz) aus.
2. Console.ReadLine();
ReadLine()ist eine Methode der Klasse Console. Wird die Methode ReadLine() aufgerufen, wartet sie
an dieser Stelle auf eine Eingabe gefolgt von einem Enter. Unser Programm wird somit an dieser Stelle
angehalten und nicht sofort beendet.
Das nächste Beispiel zeigt, wie ein C#-Programm mit mehreren Klassen strukturiert ist.
In der Klasse Program befindet sich die Methode Main(). Diese ruft einerseits die Methode
WriteLine() und andererseits die Methode Message() der Klasse End auf.
Der Klassenname wird gefolgt von einem Punkt dem Namen der Methode vorangestellt.
Die Methode Message() ist in der Klasse End als public deklariert. public bedeuted, dass die
Methode öffentlich zugänglich ist. Somit kann sie auch außerhalb ihrer Klasse aufgerufen werden. Die
Methode Main() könnte, da sie der Einstiegspunkt ist, auch als public deklariert werden.
Copyright 2009 – Heimo Gaicher
Beide Methoden sind als void deklariert. void bedeuted, es wird kein Wert zurückgegeben. Sie besitzen
keinen Return-Wert. In C# ist die Reihenfolge in der die Klassen deklariert werden nicht vorgeschrieben.
Es könnte also auch zuerst die Klasse End gefolgt von der Klasse Program deklariert werden. Somit werden
also Methoden aufgerufen bevor sie definiert sind.
Hier ein C#-Programm mit zwei Klassen:
namespace mehrereKlassen
{
class Program
{
static void Main()
{
Console.WriteLine("Start!");
End.Message();
Console.ReadLine();
}
}
class End
{
public static void Message()
{
Console.WriteLine("Ende!");
}
}
}
Beide Klassen sind in einem eigenen namespace (Namensbereich) deklariert. Namensbereiche unterstützen
die interne Organisation von Programmen und verhindern dadurch Konflikte in der Namensvergabe.
Hier ein weiteres Beispiel:
class Program
{
static void Main()
{
Console.WriteLine("Start!");
Klasse1.Sterne();
Console.WriteLine("Drücken Sie Enter!");
Console.ReadLine();
Klasse2.Ende();
Console.ReadLine();
}
}
class Klasse1
{
public static void Sterne()
{
Console.WriteLine("******");
}
Ausgabe:
}
class Klasse2
{
public static void Ende()
{
Console.WriteLine("Danke!");
}
}
Copyright 2009 – Heimo Gaicher
Was sind eigentlich Variablen?
Variablen speichern Zahlen, Buchstaben oder Zeichenketten und stellen sie dem Programm zur Verfügung.
Jede Variable ist von einem bestimmten Datentyp, der angibt, welche Art von Information die Variable
speichern soll.
Beispiel:
Der Variablen mit dem Namen Sum wird der Inhalt von Variable a + Variable b zugeordnet. In Sum wird der
Wert 12 gespeichert. Da in diesem Fall die Variablen ganzzahlige Werte enthalten, müssen wir die Variablen
richtig deklarieren, also einem Datentyp zuordnen.
In unserem Beispiel wählen wir den Datentyp Integer (Int 32), welcher ganzzahlige Werte zwischen -231 bis
231 -1 speichern kann.
Als Programmcode sieht das so aus:
int Sum, a=10, b=2;
//Variablen werden als Integer deklariert.
//a wird der Wert 10 und b der Wert 2 zugeordnet.
Sum = a + b;
//Sum speichert den Inhalt von a + b
Wertzuweisung von Variablen
Wird einer Variablen kein Wert zugewiesen, beschwert sich Visual C# bei der Ausführung mit einer
Fehlermeldung.
Beispiele für Wertzuweisungen:
int maxWert = 10000;
//Weist der Variablen maxWert die Zahl 10000 zu.
double messwert = 2.3;
//Weist der Variablen messwert vom Typ double die Zahl 2.3 zu.
string b;
b = "Ich bin eine Zeichenkette und daher ein String";
//Deklariert die Variable b vom Typ String
//Weist der Variable b die Zeichenkette "Ich bin eine Zeichenkette und daher ein
String" zu.
Copyright 2009 – Heimo Gaicher
2.6 Datentypen in Visual C#
Datentyp
Wertebereich
bool
byte
sbyte
char
short
ushort
int
uint
float
ulong
long
double
decimal
true oder false
0 ... 255
-128 ... 127
0 ... 65535
-215 -215 -1
0 ... 65535
-231 - 231 -1
Bit
1,4 x 10- 45 ... 3,4 x 1038
0 ... 264 -1
-263 - 263 -1
5,0 x 10- 324 ... 1,7 x 10308
±1,0 x 10-28 ... ±7,9 x 1028
1
8
8
16
16
16
32
32
32
64
64
64
128
Laufzeittyp
Boolescher Wert
Byte
SByte
Unicode Zeichen
Int16
UInt16
Int32
UInt32
Single
UInt64
Int64
Double
Decimal
Typischerweise werden Variablen dazu verwendet, um z.B. Werte einzulesen, diese zu verarbeiten und
auszugeben. Dies geschieht mit der Klasse Console und deren Methoden z.B. ReadLine oder WriteLine.
Überblick Wertetypen
Wahrheitswerte
bool
Zeichen
char
sbyte, byte
short, ushort
Ganzzahlen
int, uint
long, ulong
float
Gleitkommazahlen
double
decimal
Copyright 2009 – Heimo Gaicher
Laufzeitfehler:
Wird während eines Programmablaufes eine falsche Typenumwandlung durchgeführt, so kommt es zu einem
Laufzeitfehler (Runtime Error) und das Programm stürzt ab.
Beispiel:
Es sollte eine Zahl eingelesen werden aber der Benutzer gibt einen Buchstaben ein!
2.7 Einlesen von Werten
Um einen Wert einzulesen verwenden wir die Methode ReadLine.
Console.ReadLine();
ACHTUNG!
Console.ReadLine()liest immer einen String
(Zeichenkette) ein!
Möchte man z.B. eine Zahl einlesen und diese in
eine Variable speichern, muss diese zuvor in den
Typ Int, long, float ect. konvertiert werden.
Dies klingt logisch, da man ja nicht wissen kann, welcher Wert (Zahlen, Buchstaben oder Zeichen) eingelesen
wird, muss man zwangsweise eine Zeichenkette (String) einlesen.
Daher liest Console.ReadLine() immer einen String ein, der dann in den gewünschten Datentypen
umgewandelt (konvertiert) werden muss.
Eine Konvertierung von Datentypen erfolgt durch die Klasse gefolgt von der gewünschten Methode z.B:
Convert.ToInt32 für den Datentyp Integer oder Convert.ToDouble für den Datentyp Double.
Copyright 2009 – Heimo Gaicher
Jetzt möchten wir aber ein kleines Programm schreiben, welches eine Zahl einliest und diese mit 5
multipliziert. Das Ergebnis soll wie gewohnt ausgegeben werden.
Zuerst werden zwei Variablen deklariert.
Wir benennen sie mit zahl1 und ergebnis und deklarieren beide vom Datentyp Integer.
Die Variablen werden mit einem Beistrich getrennt und abgeschlossen wird mit einem Semikolon.
int zahl1, ergebnis;
Jetzt soll der Benutzer aufgefordert werden, eine Zahl einzugeben.
Console.WriteLine("Bitte eine Zahl eingeben!");
Jetzt wird eingelesen!
Der eingelesene Wert wird in Int32 konvertiert und in zahl1 gespeichert.
Die Variable zahl1 ist vom Datentyp Integer.
zahl1 = Convert.ToInt32(Console.ReadLine());
Die Variable ergebnis, welche zuvor noch keinen Wert hatte, erhält nun den eingegebenen Wert (Wert von
zahl1) multipliziert mit 5.
ergebnis = zahl1 * 5;
Die Ausgabe der Werte erfolgt über die beiden Platzhalter. Zahl1 in Platzhalter {0} und ergebnis in Platzhalter
{1}.
Console.WriteLine("5 mal {0} = {1}", zahl1, ergebnis);
Console.ReadLine();
Die Ausgabe der Werte kann aber auch ohne Platzhalter durchgeführt werden. Man setzt einfach die
Variablen direkt ein und verbindet mit +!
z.B:
Console.WriteLine("5 mal " + zahl1 + " = " + ergebnis);
Liefert das selbe Ergebnis!
Der Code auf einem Blick:
int zahl1, ergebnis;
Console.WriteLine("Bitte eine Zahl eingeben!");
zahl1 = Convert.ToInt32(Console.ReadLine());
ergebnis = zahl1 * 5;
Console.WriteLine("5 mal {0} = {1}", zahl1, ergebnis);
Console.ReadLine();
Copyright 2009 – Heimo Gaicher
2.12 Debugging
An dieser Stelle betrachten wir unser Programm etwas genauer. Wir nutzen den Debugger um das Programm
schrittweise ablaufen zu lassen. Besonders bei etwas längerem Programmcode schleichen sich gerne Fehler
ein. Of erkennt man die Fehler sofort aber manchmal sucht man „ewig“!
Um Fehler (besonders logische Fehler) besser isolieren und beheben zu können, macht es Sinn, den Debugger
zu verwenden.
Wir debuggen obiges Beispiel und setzen an der linken Seite auf der Leiste einen Haltepunkt. Den Haltepunkt
setzen Sie, wenn Sie mit der linken Maustaste an diese Stelle klicken.
Jetzt starten wir unser Programm wie gewohnt (grüner Pfeil oder F5). Der Startpunkt wird markiert und im
unteren Fenster sehen wir alle Variablen mit den derzeitigen Werten.
Copyright 2009 – Heimo Gaicher
2.14
Strings einfügen, ersetzen und löschen
Auch hier liefert uns C# verschiedene Methoden.
Einfügen:
berei vorhandenen String
Mit der Methode können Sie einen String an eine vordefinierte Position in einen bereits
einfügen.
Beispiel:
string str1 = "programm";
string str2 = str1.Insert(0,"C#
str1.Insert(0,
");
string str3 = str2.Insert(11, "ieren");
Console.WriteLine(str2);
Console.WriteLine(str3);
Console.ReadLine();
Als Ausgabe erhalten wir:
Achten Sie auf die Positionen in Strings. Diese beginnen immer bei 0!
Positionen in Strings
P
0
r
1
o
2
g
3
r
4
a
5
m
6
m
7
Beispiel:
str3 = str2.PadLeft(16);
Mit PadLeft(); und PadRight(); wird ein String mit beginnenden oder nachfolgenden Leerzeichen
aufgefüllt. Der String str3 beginnt mit 5 Leerzeichen und hat die Länge 16.
Löschen und Ersetzen
Mit der Methode Remove() können Sie alle Zeichen ab einer definierten Position
Position in einem String ersetzen.
string str1 = "C# Programmierer";
Programmierer"
string str2 = str1.Remove(11);
str2 enthält dann den String „C# Programm“ , da ab der 11.Stelle alle weiteren Zeichen entfernt wurden.
Im Gegensatz zur Methode Remove() liefert die Methode Substring() alle Zeichen ab einer definierten
Position in einem String.
Copyright 2009 – Heimo Gaicher
3.4
Die Math-Klasse - Potenzen, Wurzel, Logarithmen
Die Klasse Math stellt verschiedene mathematische Funktionen wie z.B. Wurzel, sin, cos, tan, log, Min, Max,
PI, Potenzen usw. zur Verfügung.
ACHTUNG!
Die Klasse Math verlangt den Datentyp double
Wir schreiben ein Programm, welches die Hypothenuse eines rechtwinkeligen Dreiecks berechnet.
Laut Pythagoras ist: c2 = a2 + b2 - somit ist c die Wurzel aus ( a2 + b2 )
Unser Programm soll die beiden Seitenlängen a und b einlesen und die Seitenlänge c berechnen.
Hier eine mögliche Lösung
namespace Pythagoras
{
class Program
{
static void Main(string[] args)
{
float a, b, c;
Console.WriteLine("Dieses Programm berechnet die Seitenlänge eines
rechtwinkeligen Dreiecks.\n"
+ "Bitte geben Sie einen Wert für die Seite a in cm ein!");
a = Convert.ToSingle(Console.ReadLine());
//Konvertieren, da ReadLine immer einen String einließt!
Console.WriteLine("Bitte geben Sie einen Wert für die Seite b in cm
ein!");
b = Convert.ToSingle(Console.ReadLine());
//Konvertieren, da ReadLine immer einen String einließt!
c = Convert.ToSingle(Math.Sqrt((a * a) + (b * b)));
//Math.Sqrt verlangt den Typ double -> daher Konvertierung in
float
Console.WriteLine("Die Seite c hat eine Länge von {0:F2} cm", c);
Console.ReadLine();
}
}
}
Copyright 2009 – Heimo Gaicher
4.2 Übungsbeispiel! Freier Fall mit Luftwiderstand
Ein Fallschirmspringer beschleunigt so lange, bis die Erdanziehungskraft gleich groß ist, wie der
Luftwiderstand.
Die Endgeschwindigkeit berechnet sich aus:
(m …Masse des Fallschirmspringers, A..Querschnittsfläche)
Eingabe: m, A
Ausgabe: v
Copyright 2009 – Heimo Gaicher
4
Verzweigungen
Bisher haben wir nur linear (ein Befehl folgt auf den anderen) programmiert. Die meißten Probleme
erfordern aber andere Lösungen. In Abhängigkeit einer Bedingung (WAHR oder FALSCH) wird entweder der
eine oder der andere Programmteil ausgeführt.
5.1
Die if – else Verzweigung
Die if - else Verzweigung fragt eine Bedingung ab und prüft sie auf true oder false.
Syntax:
if (Bedingung)
{
WAHR-ZWEIG
}
else
{
SONST-ZWEIG
}
Wir schreiben ein Programm, welches bei Eingabe von zwei Zahlen prüft, welche Zahl größer ist.
Oft verwendet man wie hier dargestellt ein Struktogramm (Nassi-Schneidermann-Diagramm) um den
Programmablauf übersichtlicher darzustellen.
Man kann hier gut den Programmablauf erkennen. Es wird geprüft, ob Zahl1 größer ist als Zahl2. Ist die
Bedingung wahr, wird der ja-Zweig ausgeführt, sonst der nein-Zweig.
Eine Software um Struktogramme zu erstellen ist als Download z.B. auf www.555.at zu finden.
Copyright 2009 – Heimo Gaicher
5.2
Abfagen mit switch / case
switch / case prüft Bedingungen auf die Erfüllungen fixer vorher definierter Werte.
Im Unterschied zur if-Anweisung prüft switch fixe Werte ab.
Wir verwenden switch, wenn sich der zu prüfende Wert nicht ändert!
Beispiel Kaffeeautomat:
Wir schreiben ein Programm, welches einen Kaffeeautomaten simuliert.
Es stehen 4 Eingabetasten zur Verfügung. Davon sind drei belegt und die vierte ist leer.
Taste 1= Kaffee groß
Taste 2= Kaffee mittel
Taste 3= Kaffee klein
Taste 4= leer
Copyright 2009 – Heimo Gaicher
5.12 Übungsbeispiel! Quadratische Funktion
Es soll ein Tabellenblatt wie abgebildet zu erstellen. Berechnet wird die Funktion f(x)=ax²+bx+c.
Eingabe: a,b,c, startwert von x, endwert von x, schrittweite von x
Hier eine mögliche Lösung:
namespace quadrat_funktion
{
class Program
{
static void Main(string[] args)
{
int a, b, c, start, end, schritt;
double x;
Console.WriteLine("Funktionstabelle für f(x) = ax²+bx+c");
Console.WriteLine("------------------------------------");
Console.Write("a=? ");
a = Convert.ToInt32(Console.ReadLine());
Console.Write("b=? ");
b = Convert.ToInt32(Console.ReadLine());
Console.Write("c=? ");
c = Convert.ToInt32(Console.ReadLine());
Copyright 2009 – Heimo Gaicher
5.19
Arrays - mehrdimensionale Felder
Ein zweidimensionales Feld besteht aus Zeilen und Spalten. Wie z.B. eine Excel-Tabelle. Möchte man z.B.
Messwerte über 4 Wochen einlesen, so entsprechen die Wochen den Zeilen und die Tage den Spalten. Jedem
Feld (Zeile x, Spalte y) wird ein Wert zugeordnet.
Hier ein Beispiel:
Mit diesem Programm sollen Einnahmen über 4 Wochen, a' 6 Tage eingelesen werden. Man benötigt also ein
Feld mit 4 Zeilen und 6 Spalten [4,6]. Zusätzlich soll der Durchschnitt und der Tag mit den geringsten
Einnahmen ausgegeben werden.
Tag 1
Tag 2
Tag 3
Tag 4
Tag 5
Tag 6
Woche 1
Feld [0,0]
Feld [0,1]
Feld [0,2]
Feld [0,3]
Feld [0,4]
Feld [0,5]
Woche 2
Feld [1,0]
Feld [1,1]
Feld [1,2]
Feld [1,3]
Feld [1,4]
Feld [1,5]
Woche 3
Feld [2,0]
Feld [2,1]
Feld [2,2]
Feld [2,3]
Feld [2,4]
Feld [2,5]
Woche 4
Feld [3,0]
Feld [3,1]
Feld [3,2]
Feld [3,3]
Feld [3,4]
Feld [3,5]
namespace einnahmen
{
class Program
{
static void Main(string[] args)
{
//Einnahmen über 4 Wochen, a' 6 Tage. Durchschnitt und Tag mit MIN?
float summe = 0,durchschnitt=0,minimum=0,tag=0,woche=0;
float[,] einnahmen = new float[4, 6]; //4 Zeilen und 6 Spalten
for (int i = 0; i < 4; i++) //äussere Schleife für die Zeilen
{
for (int j = 0; j < 6; j++)
//innere Schleife für Spalten
{
Wie Sie sehen, sind die Variablen der Funktion flaechenberechnung anders benannt. Es wird also nicht die
Variable a oder b übergeben, sondern nur deren Werte. Diese werden in laenge und breite gespeichert.
Copyright 2009 – Heimo Gaicher
Wir schreiben ein Programm, welches die Fläche zwischen einer Funktion f(x) und deren X-Achse berechnet.
Beispiel:
Gegeben ist die Funktion f(x)=x2
Unser Programm soll nun die Fläche zwischen der Funktion und der X-Achse innerhalb zweier Punkte (x1 und
x2) berechnen.
x1 und x2 sind zwei Werte auf der X-Achse. (In diesem Beispiel x1=-2 und x2=3)
Hier die Berechnung:
Programmablauf:
1.
2.
3.
4.
Begrüßung mit einer Prozedur
Einlesen der beiden X-Werte (x1, x2)
Berechnung der Fläche mit einer Funktion
Ausgabe
Tip: Versuchen Sie es zuerst selbst! Eine mögliche Lösung sehen Sie auf der nächsten Seite.
Hier eine mögliche Lösung des Programmbeispieles:
Copyright 2009 – Heimo Gaicher
Das Konzept von Klassen z.B. die Klasse AUTO:
AUTO
Klasse AUTO
Eigenschaften:
•
•
•
•
•
Baujahr
Hubraum
Leistung
Fahrgestellnummer
…….
Fähigkeiten:
•
•
•
•
Beschleunigen
Bremsen
Abbiegen
…….
Objekte
AUTO1
Eigenschaften:
•
•
•
•
Baujahr = 2002
Hubraum = 1900
Leistung = 136
Fahrgestellnummer = 123456
Fähigkeiten
•
……..
AUTO2
Eigenschaften:
•
•
•
•
Baujahr = 2002
Hubraum = 1900
Leistung = 136
Fahrgestellnummer = 123456
Fähigkeiten
•
……..
Copyright 2009 – Heimo Gaicher
7
Programmierung mit Windows Forms
Ab jetzt wenden wir uns der Programmierung mit der grafischen Oberfläche zu und erstellen gleich ein
kleines Programm, welches auf den Klick eines Buttons den Text "Hallo ich bin ein c#-Fan!" ausgeben soll.
Wir erstellen wieder ein neues Projekt, aber diesmal nicht mehr in der Konsolenanwendung sondern in der
Windows Forms-Anwendung.
Geben Sie der Anwendung einen Namen und klicken Sie ok!
Es erscheint ein Formular mit der Bezeichnung Form1
Copyright 2009 – Heimo Gaicher
7.3
Buttons & Labels - Programmbeispiel Countdown
Mit diesem Programmbeispiel wollen wir Schleifen wiederholen. Es soll ein Countdown von 10 bis 0
ausgegeben werden.
Mit drei Buttons sollen wir die Art der Schleife (For-Schleife, Kopfgesteuerte- und Fußgesteuerte Schleife)
wählen können. Wir bauen unser Formular mit vier Buttons und einem Label auf:
this.label1.Text = Convert.ToString(i);
// gibt den Text i als String auf label1 aus
System.Threading.Thread.Sleep(1000);
// damit wird der aktuelle Thread für 1000ms (1 Sekunde) angehalten
this.Refresh();
// erneuert die Anzeige
Hier der vollständige Programmcode:
Copyright 2009 – Heimo Gaicher
7.11
Übungsbeispiel! Textverschlüsselung
In diesem Beispiel verschlüsseln wir einen Text. Jedes eingegebene Zeichen soll soll durch sein nachfolgendes
ersetzt werden.
Wir bauen ein Formular mit mehrzeiligen Textboxen auf. Um eine Textbox mehrzeilig zu verwenden, setzen
wir in den Eigenschaften der Textbox Multiline auf true.
Buchstaben werden intern als ASCII-Zeichen
ASCII Zeichen (American Standard Code for Information Interchange)
gespeichert. Der Buchstabe A entspricht dem ASCII-Code
ASCII
65, B = 66 usw.
Eine vollständige ASCII-Tabelle finden
inden Sie im Anhang.
als als ASCII-Code.
Der Datentyp char speichert ein Zeichen also
private void cmd_start_Click(object
cmd_start_Click(
sender, EventArgs e)
{
string neu = "",
, original;
char buchstabe;
original = txt_1.Text;
for (int i = 0; i < original.Length;
orig
i++)
{
buchstabe = original[i];
neu = neu + Convert.ToChar(buchstabe
Convert
+ 1);
}
txt_2.Text = neu;
}
Wenn Sie im Originaltext den Buchstaben z oder Z eingeben, so ist der nachfolgende kein Buchstabe mehr.
Versuchen Siee das Programm so umzuändern, dass nach einem z ein a bzw. nach einem Z ein A umgewandelt
wird.
Copyright 2009 – Heimo Gaicher
7.13
InputBox aus Visual Basic
Wir „borgen“ uns aus Visual Basic die InputBox aus. Dafür benötigen wir einen Verweis auf Visual Basic.
Hierzu klicken wir im Projektmappen-Explorer mit der rechten Maustaste auf Verweise und wählen „Verweis
hinzufügen“.
Es öffnet sich ein neues Fenster.
Wir wählen den Verweis „Microsoft Visual Basic“ und bestätigen mit OK.
Nun können wir die InputBox aus Visual Basic einbauen.
Copyright 2009 – Heimo Gaicher
7.17
Übungsbeispiel Würfelspiel
Wir programmieren ein Würfelspiel
rfelspiel mit 6 Würfeln. Pro Wurf ist also eine Augensumme von min. 6 bis max.
36 möglich.
Erstellen Sie folgendes Formular.
Um eine Grafik in das Formular
einzufügen wählen Sie in der Toolbox
„PictureBox“ aus und ziehen sie in das
Formular.
Wenn Sie auf den Pfeil klicken, öffnet sich ein Fenster mit den PictureBox Aufgaben. Hier können Sie ein Bild
auswählen bzw. importieren, die Größe festlegen usw.
Der Spieler gibt einen Tip ab und es soll sich eine MessageBox melden.
Klickt der Spieler auf den Button „Würfeln“, sollen die gewürfelten Augen sowie die Augensumme
ausgegeben werden.
Copyright 2009 – Heimo Gaicher
7.18
Die Klasse RadioButton
Radio Buttons sind Optionsschaltflächen. Sie bieten dem Benutzer Optionen an, die sich aber gegenseitig
ausschließen. Sie ähneln den Kontrollkästchen, wobei aber immer nur eine
eine einzige Optionsschaltfläche aktiv
sein kann.
Optionsschaltflächen sind in einer Gruppe zusammengefasst. Daher müssen Sie vorher eine GroupBox oder
ein Panel erstellen. Eine GroupBox hebt sich mit einem Rahmen von der Form ab. Ein Panel hebt sich optisch
nicht ab.
Programmieren Sie einen Taschenrechner mit RadioButtons!
Aus der Toolbox ziehen Sie die
GroupBox.
in die Form und den
ziehen Sie in die
Die wichtigste Eigenschaft eines RadioButton ist
i Checked. Diese wird bei der Abfrage auf true gesetzt.
Copyright 2009 – Heimo Gaicher
7.22
Anwendungen für andere Nutzer veröffentlichen
Mit dem RGB-Farbmischer
Farbmischer haben Sie nun ein Programm,
Programm, welches aber nur auf Ihrem Computer in der IDE
läuft. Damit auch andere Benutzer dieses Programm ohne Entwicklungsumgebung öffnen und verwenden
können müssen Sie es zuvor veröffentlichen.
Wählen Sie im Menü „Erstellen“ und „Farben veröffentlichen“.
Es meldet sich der Publishing-Assistent.
Assistent. Akzeptieren Sie die Grundeinstellungen und klicken Sie auf Fertig
stellen.
Im entsprechenden Unterordner (z.B.: file:///C:/Visual Studio 2008/Farben/Farben/publish/)
2008/Farben/Farben/publish werden nun die
entsprechenden Installationsdateien erstellt.
Hier werden die
Unterstützungsdateien
für den Installer
gespeichert
Diese Datei teilt dem
Installer alles mit, was
bei der Installation des
Programmes
eingeschlossen werden
muss.
Die Setup-Datei.
Datei. Damit
können die Benutzer
das Programm
installieren.
Copyright 2009 – Heimo Gaicher
Zugehörige Unterlagen
Herunterladen