Werkzeuge
Die Begriffe hinter dem Code
| Begriff | Einfach erklärt |
|---|---|
| Algorithmus | Eine eindeutige, endliche Schrittfolge zur Lösung eines Problems – noch unabhängig von C#. |
| Quellcode | Der von Menschen geschriebene Programmtext. |
| Syntax | Regeln, nach denen gültiger Code aufgebaut ist. |
| Compiler | Übersetzt und prüft Quellcode für die spätere Ausführung. |
| IDE | Entwicklungsumgebung mit Editor, Build, Ausführung und Debugger, zum Beispiel Visual Studio. |
| Debugger | Unterbricht ein Programm an Breakpoints und zeigt Werte sowie Ablauf schrittweise. |
Program.cs enthält Code, die .csproj-Datei beschreibt das Projekt. bin/ enthält Build-Ergebnisse, obj/ temporäre Zwischendateien.Pseudocode
Logik vor Syntax
Pseudocode beschreibt den Ablauf in verständlichen Schritten. Für einen Downloadrechner könnte er so aussehen:
START
LIES dateigroesseMB
LIES geschwindigkeitMbit
megabyteProSekunde ← geschwindigkeitMbit / 8
sekunden ← dateigroesseMB / megabyteProSekunde
WENN sekunden < 60
GIB sekunden AUS
SONST WENN sekunden < 3600
GIB sekunden / 60 AUS
SONST
GIB sekunden / 3600 AUS
ENDEEin UML-Aktivitätsdiagramm stellt denselben Ablauf grafisch dar: Startknoten, Aktionen, Kontrollflüsse, Entscheidung mit Guard Conditions und Endknoten.
C#-Grundlagen
Variablen, Ein- und Ausgabe
Console.Write("Dateigröße in MB: ");
double dateigroesse = double.Parse(Console.ReadLine()!);
Console.Write("Geschwindigkeit in Mbit/s: ");
double datenrate = double.Parse(Console.ReadLine()!);
double sekunden = dateigroesse / (datenrate / 8);
Console.WriteLine($"Dauer: {sekunden:F2} Sekunden");
Robuster ist TryParse, weil falsche Eingaben nicht sofort eine Ausnahme auslösen:
if (!double.TryParse(Console.ReadLine(), out double datenrate)
|| datenrate <= 0)
{
Console.WriteLine("Bitte eine positive Zahl eingeben.");
return;
}
| Typ | Geeignet für | Beispiel |
|---|---|---|
int | Ganze Zahlen | int anzahl = 5; |
double | Gleitkommarechnungen | double temperatur = 22.5; |
decimal | Dezimalwerte, besonders Geld | decimal preis = 12.50m; |
bool | Wahr oder falsch | bool aktiv = true; |
char | Ein einzelnes Zeichen | char note = 'A'; |
string | Zeichenkette | string name = "Server"; |
Kontrollstrukturen
Entscheiden und wiederholen
if / else
Prüft Bedingungen und verzweigt. Gut für Bereiche und zusammengesetzte Regeln wie eine Passwortvalidierung.
switch
Ordnet einzelne, klar unterscheidbare Auswahlwerte einem Fall zu, etwa Vertragslaufzeiten von 6, 12 oder 24 Monaten.
for
Geeignet, wenn Anzahl oder Index wichtig ist – zum Beispiel jedes Element eines Arrays bearbeiten.
while
Wiederholt, solange eine Bedingung gilt – zum Beispiel ein Menü bis zur Auswahl „Beenden“.
double[] temperaturen = { 22.5, 24.0, 23.8, 25.5 };
double summe = 0;
for (int i = 0; i < temperaturen.Length; i++)
{
summe += temperaturen[i];
}
double durchschnitt = summe / temperaturen.Length;Length - 1.Code lesen
Was gibt das Programm aus?
Objektorientierung
Objekte schützen ihre gültigen Zustände
Eine Klasse ist ein Bauplan, ein Objekt eine konkrete Instanz. Felder speichern Zustand; Properties ermöglichen kontrollierten Zugriff; Methoden beschreiben Verhalten; der Konstruktor erzeugt einen sinnvollen Anfangszustand.
class Fahrzeug
{
public string Marke { get; }
public decimal Tagespreis { get; private set; }
public bool Verfuegbar { get; private set; } = true;
public Fahrzeug(string marke, decimal tagespreis)
{
Marke = marke;
Tagespreis = tagespreis;
}
public decimal Mieten(int tage)
{
if (!Verfuegbar || tage <= 0)
throw new InvalidOperationException();
Verfuegbar = false;
return tage * Tagespreis;
}
}
Interne Daten werden geschützt und nur über kontrollierte Zugriffe verändert.
Eine abgeleitete Klasse übernimmt gemeinsame Merkmale einer Basisklasse und kann Verhalten überschreiben.
Liefert gemeinsamen Zustand oder Code, kann aber nicht direkt instanziiert werden.
Definiert einen Vertrag über Fähigkeiten, etwa IZahlbar oder INotAus, ohne eine Klassenhierarchie zu erzwingen.
staticGehört zur Klasse selbst statt zu einem einzelnen Objekt, etwa eine Hilfsmethode oder ein gemeinsamer Zähler.
Selbst programmieren
Aufgaben in sinnvoller Reihenfolge
- Preisvergleich: Zwei Anbieter, Laufzeit und Rabatt einlesen; Kosten berechnen und günstigeren Anbieter ausgeben.
- Downloadrechner: Datenmenge und Datenrate einlesen; Ausgabe passend in Sekunden, Minuten oder Stunden.
- Passwortprüfung: Länge, Großbuchstabe, Zahl und Sonderzeichen einzeln prüfen und verständliches Feedback geben.
- Temperatur-Array: Durchschnitt, Minimum, Maximum und Anzahl oberhalb eines Grenzwerts bestimmen.
- Autovermietung: Fahrzeugklasse mit gültigen Properties, Mieten, Fahren und Rückgabe modellieren.
- Automatisierung: Abstrakte Roboter-Basisklasse und getrennte Interfaces für Not-Aus und Fernsteuerung entwerfen.
Schreibe zu jeder Aufgabe zuerst Ein-/Ausgabe, Regeln und Pseudocode auf. Teste anschließend Normalfall, Randfall und falsche Eingabe.