Grundlagen Teil 1 - Abfragen & Verzweigungen
Im letzten Abschnitt verwendeten wir die if - Abfrage, um festzustellen ob die zweite Zahl gleich (==) 0 ist,
falls dem der Fall war, gaben wir einen vordefinierten string (Text) in der Konsole aus.
Der nächste Schritt war eine zweite if - Abfrage, welche feststellte ob die zweite Zahl ungleich (!=) 0 ist.
In diesem Fall wurde eine Division durchgeführt und das Ergebnis ausgegeben.
Dies lässt sich jedoch mit einem else vereinfachen.
else Abfrage?
Genau genommen gibt es sowas wie eine else Abfrage nicht, denn bei einem else gibt es keine Bedingung (Aussage).
Um dies zu vereinfachen dient wieder eine Übersetzung in das Deutsche, denn if / else bedeutet soviel wie wenn / andernfalls,
daher wenn die Bedienung der if - Abfrage nicht erfüllt ist, wird der else Zweig aufgerufen.
Als Programmcode sieht dies folgendermaßen aus:
{
Code;
}
else
{
Code;
}
Dieses Vorgehen erspart uns oft das anschreiben einer weitere if - Abfrage und verbessert auch die Übersichtlichkeit des geschriebenen Programms, da der Zusammenhang einfacher erkennbar ist.
Übungsbeispiel zu if / else
Um ein Gefühl für if / else zu bekommen gilt es diesmal das letzte Übungsbeispiel auf if / else umzuprogrammieren.
Angabe
- einlesen von zwei int Zahlen
- überprüfen ob die zweite Zahl ungleich 0 ist
- wenn ungleich 0, die erste Zahl durch die zweite Dividieren und das Ergebnis ausgeben
- andernfalls folgenden Text ausgeben: "Die zweite Zahl darf nicht 0 sein!"
Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.
Lösung:using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Projekt1
{
class Program
{
static void Main(string[] args)
{
int zahl1 = Convert.ToInt32(Console.ReadLine());
int zahl2 = Convert.ToInt32(Console.ReadLine());
if(zahl2!=0)
{
int ergebnis = zahl1/zahl2;
Console.WriteLine(ergebnis);
}
else
{
Console.WriteLine("Die zweite Zahl darf nicht 0 sein!");
}
Console.ReadLine();
}
}
}
else if(Bedingung)
Es besteht jedoch noch die Möglichkeit, eine weitere Abfrage durchzuführen, falls eine vorherige Bedingung nicht erfüllt wurde.
Dies funktioniert mittels einer else if(Bedingung) Abfrage.
Eine solche Bedingung, wird jedoch erst überprüft, nachdem eine vorherige if - Abfrage false (falsch) war.
Natürlich ist es möglich, mehrere else if - Abfragen nacheiner durchzuführen.
Ein else kann jedoch nur am Ende einer solchen Abfragen kette stehen.
Als Programmcode würde dies folgendermaßen aussehen:
{
Code;
}
else if(Bedingung)
{
Code;
}
else
{
Code;
}
Vergleichsoperatoren für Bedingungen
Bevor wir zu einem weiteren Übungsbeispiel kommen, gilt es noch weitere Vergleichsoperatoren für Bedingungen vorzustellen.
Im letzten Abschnitt wurden == (gleich) und != (ungleich) vorgestellt,
jedoch gibt es noch einige andere Zeichenketten, einige davon sind in der folgenden Tabelle dargestellt.
Übersicht über Vergleichsoperatoren für Bedingungen
Vergleichsoperator | Bedeutung | Beschreibung |
---|---|---|
>= | größer gleich | linke Seite größer gleich der rechten Seite |
<= | kleiner gleich | linke Seite kleiner gleich der rechten Seite |
> | größer | linke Seite größer als die rechten Seite |
< | kleiner | linke Seite kleiner als die rechten Seite |
Diese Vergleichsoperatoren eigenen sich jedoch nicht zum Vergleichen von strings (Text).
Mit diesem zusätzlichen Wissen gewappnet, gehen wir zum nächsten Übungsbeispiel über.
Übungsbeispiel else if
Um die Funktionsweise einer else if - Abfrage besser verstehen zu können gilt es ein Programm zu schreiben welches folgenden
Programmablauf besitzt:
Angabe
- einlesen einer positive Zahl in eine int Variabel (auch 0 gültig)
- überprüfen ob die eingegebene Zahl größer gleich 100 ist, falls dem so ist, folgenden string (Text) ausgeben: "eingegebene Zahl ist größer gleich 100"
- falls die vorherige Bedingung nicht erfüllt ist, überprüfen ob die Zahl größer gleich 10 ist, falls dem so ist folgenden string (Text) ausgeben: "eingegebene Zahl ist größer gleich 10"
- wenn beide vorherigen Bedingungen nicht erfüllt waren, überprüfen ob die Zahl größer gleich 1 ist, in diesem Fall folgenden string (Text) ausgeben: "eingegebene Zahl ist größer gleich 1"
- falls all diese Bedingungen nicht erfüllt worden sind, folgenden string (Text) ausgeben: "eingegeben Zahl ist 0"
Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.
Lösung:using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Projekt1
{
class Program
{
static void Main(string[] args)
{
int zahl = Convert.ToInt32(Console.ReadLine());
if(zahl>=100)
{
Console.WriteLine("eingegebene Zahl ist größer gleich 100");
}
else if(zahl>=10)
{
Console.WriteLine("eingegebene Zahl ist größer gleich 10");
}
else if(zahl>=1)
{
Console.WriteLine("eingegebene Zahl ist größer gleich 1");
}
else
{
Console.WriteLine("eingegebene Zahl ist 0");
}
Console.ReadLine();
}
}
}
Primitiv Taschenrechner
Mittlerweile verfügen wir über ausreichendes Wissen, um einen primitiven Taschenrechner zu programmieren.
Eine mögliche Form wäre es zuerst zwei int Werte einzulesen
und danach ein Rechenzeichen, welches in einer string Variable gespeichert wird.
Danach mittels mehrere if (else if) Abfragen die Rechenart zu bestimmen
und danach die entsprechende Rechnung durchzuführen.
Es ist darauf zu achten, dass die int Variabel für das Ergebnis schon vorher definiert wird,
ansonsten kann es zu einem Fehler führen, da eine Variabel nicht zweimal definiert werden darf.
Wenn man die Definition in der ersten if - Abfrage durchführt würde die Variable nie erstellt, wenn diese if - Abfrage nicht true (wahr) wäre.
Übungsbeispiel Rechner mit zwei Rechenarten
Aus Übungszwecken gilt es nun einen Taschenrechner zu programmieren, welcher dass + und - Rechnen beherrscht.
Für dieses Beispiel ist es vollkommen unnötig weitere Rechenarten hinzuzufügen,
da weitere Rechenarten identisch funktionieren und nur mehr Tipparbeit bedeuten würden, es steht jedoch jedem frei zum Zwecke der Übung weitere Rechenarten hinzuzufügen.
Angabe
- einlesen von zwei in Werten
- einlesen der gewünschten Rechenart (+/-)
- durchführen der entsprechenden Rechnung und ausgeben des Ergebnisses, falls eine nicht bekannte Rechenart eingegeben wird folgende Zeile ausgeben: "Rechenart unbekannt"
Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.
Lösung:using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Projekt1
{
class Program
{
static void Main(string[] args)
{
int zahl1 = Convert.ToInt32(Console.ReadLine());
int zahl2 = Convert.ToInt32(Console.ReadLine());
int ergebnis;
string rechenart = Console.ReadLine();
if(rechenart == "+")
{
ergebnis=zahl1+zahl2;
Console.WriteLine(ergebnis);
}
else if(rechenart == "-")
{
ergebnis=zahl1-zahl2;
Console.WriteLine(ergebnis);
}
else
{
Console.WriteLine("Rechenart unbekannt");
}
Console.ReadLine();
}
}
}
Bei einer hohen Anzahl an solchen Abfragen, würde dies jedoch unübersichtlich werden, des weiteren ist aus Gründen der Rechenleistung nicht optimal (auch wenn für Programm in diesem Umfang vollkommen unbedeutend). Für solche Verzweigungen gibt es ein anders Sprachelement in C# und nennt sich switch / case.
switch / case Verzweigung
Die switch / case Verzweigung ist ein einfaches Mittel, um mehrere Wege in einem Programm zu realisieren.
Auf das vorherige Beispiel bezogen, wäre ein Weg die Addition und ein anderer die Subtraktion.
Der Aufbau (Syntax) von switch / case, ist jedoch etwas komplizierter, als bei if / else - Abfragen, aus diesem Grund
kommt zuerst ein Programmcode Auszug und danach die Erklärung.
{
case 1:
Code;
break;
case 2:
Code;
break;
case 3:
Code;
break;
default:
Code;
break;
}
Zuerst erfolgt das Schlüsselwort(Anweisung) switch, gefolgt von zwei runden Klammern, in denen sich die Variable befindet.
Diese Variable gibt vor welcher Weg eingeschlagen werden soll, dabei ist es
unbedeutend ob es ich um eine int Variable oder einen anderen Variablentyp handelt, solang die case Bedingungen entsprechend gewählt sind.
Mit zwei geschwungenen Klammern wird der Inhalt der switch Anweisungen zusammengefasst.
In diesen geschwungenen Klammern befinden sich die case Anweisungen mit einer Bedingung, gefolgt von einem Doppelpunkt.
Stimmen die Bedingung und die Variabel überein, wird der Programmcode im entsprechenden case Block ausgeführt.
Das break; gibt an, dass die switch Anweisung vollständig ausgeführt wurde.
Die default: Anweisung am Ende ist optional und wird ausgeführt, falls keine der case Bedingungen erfüllt wurde,
ansonsten ist sie identisch mit case.
Übungsbeispiel switch / case Taschenrechner
Abschließend gilt es den Taschenrechner mit den Rechenarten + und - mittels switch und case zu Programmieren.
- einlesen von zwei in Werten
- einlesen der gewünschten Rechenart (+/-)
- Auswahl der entsprechenden Rechnung mittels switch / case und ausgeben des Ergebnisses, falls eine nicht bekannte Rechenart eingegeben wird folgende Zeile ausgeben: "Rechenart unbekannt"
Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.
Lösung:using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Projekt1
{
class Program
{
static void Main(string[] args)
{
int zahl1 = Convert.ToInt32(Console.ReadLine());
int zahl2 = Convert.ToInt32(Console.ReadLine());
int ergebnis;
string rechenart = Console.ReadLine();
switch (rechenart)
{
case "+":
ergebnis=zahl1+zahl2;
Console.WriteLine(ergebnis);
break;
case "-":
ergebnis=zahl1-zahl2;
Console.WriteLine(ergebnis);
break;
default:
Console.WriteLine("Rechenart unbekannt");
break;
}
Console.ReadLine();
}
}
}