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:

if(Bedingung)
{
      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

Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.

Lösung:
using System;
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:

if(Bedingung)
{
      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

Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.

Lösung:
using System;
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

Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.

Lösung:
using System;
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.

switch (intVariable)
{
      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.

Angabe

Für die Lösung hier klicken. Bei Fragen und Problemen, bitte das Forum benutzen.

Lösung:
using System;
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();
            }
      }
}