Grundlagen Teil 1- Rechnen mit Ganzzahlen

Nun kommen wir zum eigentlich Zweck von Ganzzahlen, dem Rechnen mit diesen.
Das Rechnen mit int Variablen funktioniert weitestgehend, wie das Rechnen auf einem Blatt Papier.
Es ist gilt nur eine gewissen Schreibweise zu beachten, diese Schreibweise erläutern wir nun anhand einer Addition.

Addieren von zwei int Variablen

Wie zwei int Variablen definiert werden, hatten wir bereits im vorherigen Abschnitt.
Zur kurzen Wiederholung, eine int Variable repräsentiert eine Ganzzahl und kann immer wieder überschrieben werden.

Die Addition selbst funktioniert wie bei einem Taschenrechner.
Man schreibt dazu intVariable1 + intVariable2 und speichert dies mittels des = Zeichens in einer anderen int Variabel ab oder kann es direkt wieder ausgeben.
Beim Abspeichern in einer neuen int Variable mit dem = Zeichen, verhält es sich wie im vorherigen Abschnitten, links befindet sich das Ziel und rechts die Quelle.

Als Programcode sieht dies folgendermaßen aus:

int ergebnis = intVariable1 + intVariable2;

Natürlich müssen intVariable1 und intVariable2 zuerst definiert werden.

Übungsbeispiel

Nun gilt es ein kleines Übungsbeispiel mit folgender Angabe selbst zu programmieren.(Hierbei lässt sich einiges vom letzten Übungsbeispiel übernehmen)

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 = zahl1 + zahl2;
                  Console.WriteLine(ergebnis);
                  Console.ReadLine();
            }
      }
}

Es ist zwar offensichtlich, der Vollständigkeit halber sollte noch gesagt sein, dass auch folgender Code korrekt ist:

int ergebnis = 1 + 1;

int ergebnis = Convert.ToInt32(Console.ReadLine()) + Convert.ToInt32(Console.ReadLine());

Console.WriteLine(Convert.ToInt32(Console.ReadLine()) + Convert.ToInt32(Console.ReadLine()));

Rechnen allgemein

Logischerweise funktionieren andere Rechenarten identisch der oben erklärte Addition.
Allerdings ist vor allem die Division problematisch, da eine Division durch 0 nicht vorkommen darf. Dies muss getrennt abgefangen werden, des weiteren kann es bei der Multiplikation schneller zu einem sogenannten Überlauf kommen.

Überlauf
Im letzten Abschnitt hatten wir die Convert.ToInt32() Methode, dabei erwähnten wir, dass es mit 32Bit Speicherplatz zusammenhängt.
Dies heißt soviel wie, dass eine int (Int32) Variable 32 Bit Speicherplatz belegen kann.
(Wem es interessieren sollte, was diese 32 Bit bedeuten, kann dies gerne im entsprechenden Wikipedia Artikel über Bit nachlesen)

Rechnet man dies entsprechend um, kommt man auf folgenden gültigen Bereich einer int Variable:

Untere Grenze Obere Grenze
-2.147.483.648 2.147.483.647

Für die meisten Anwendungen sollte dies ausreichend sein.
Im späteren Verlauf, werden wir noch andere Variablentypen kennenlernen, welche einen größere Bereich und Zahlen mit Nachkomma darstellen können.

Problem bei Division durch 0
In der Mathematik ist die Division durch 0 ein offensichtliches Problem, da es keine definierte Lösung einer solchen Division gibt.
Dies verhält sich bei C# identisch, daher ist es notwendig dies getrennt abzufangen.
Offensichtlich besteht mit unseren derzeitigen Wissen, keine Möglichkeit dies zu verhindern, außer darauf zu vertrauen, dass keine Division durch 0 eingegeben wird.
Um dieses Problem lösen zu können, gibt es ein Sprachelement, welches uns solche Abfragen ermöglicht.

Die if - Abfrage

Eine if - Abfrage arbeitet grundlegend nach dem Prinzip, dass wenn eine Aussage korrekt ist, etwas bestimmtes passieren soll.

Beispiel: Wenn die Ampel grün ist, kann man weiter fahren.

Anders ausgedrückt, wenn eine Aussage wahr ist, führe einen bestimmten Code aus.
Als Programmcode sieht dies folgendermaßen aus:

if(Aussage)
{
      Code;
}

Allgemein besteht eine if - Abfrage aus drei Teilen:


Bevor wir auf den Begriff "wahre Aussage" eingehen, ist es notwendig einen kleinen Ausflug in das Englische zu unternehmen.
Wie wir schon bei anderen Methoden erwähnt hatten, sind viele Methodennamen mit Englisch Grundkenntnissen einfacher zu verstehen. Ebenso müssen wir das Wort wahr ins Englische übersetzen, was true bedeutet, hingegen dazu ist das Gegenteil von true im englischen false (falsch).
Diese beiden englischen Begriffe sind Elemente von C# und können als Aussagen betrachtet werden.
Daher ist folgende Schreibweise einer if - Abfrage korrekt:

if(true)
{
      Code;
}

Statt true könnte auch false stehen, dies würde nur dazu führen, dass der Code in den geschwungenen Klammern nicht ausgeführt wird.

Übungsbeispiele zur if - Abfrage

Nun haben wir gehört wie eine if - Abfrage arbeitet.
Bevor wir nun dazu kommen wie eine Abfrage erfolgt ob eine Zahl 0 ist, schreiben wir ein Programm, welches aus folgenden Elementen besteht: (Console.ReadLine(); am Ende nicht vergessen)

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)
            {
                  if(true)
                  {
                        Console.WriteLine("wahre Aussage");
                  }

                  if(false)
                  {
                        Console.WriteLine("falsche Aussage");
                  }

                  Console.ReadLine();
            }
      }
}

Wenn man den entsprechenden Programmcode ausführt, wird der string (Text) "falsche Aussage" erwartungsgemäßt nicht angezeigt, da die Aussage der zweiten if - Abfrage false (falsch) ist.
Unter anderem bekommt man von Visual C# noch einen Warnung (nicht Fehler) angezeigt, dass eben dieser Programmcode nicht erreichbar ist, dies ist für dieses Beispiel nicht von weiter von Bedeutung, da wir diesen Effekt bewusst hervorgerufen haben.

Wie kommt man zu einer wahren Aussage?

Nun gut, wir haben gelernt, dass ein bestimmter Code ausgeführt wird, wenn sich eine wahre Aussage zwischen den runden Klammern einer if - Abfrage befindet. Sind dabei aber nicht drauf eingegangen, wie man zu einer wahren Aussage kommt, wenn wir von true / false absehen.

In C# gibt es dazu gewissen Zeichen(kette) zum Vergleichen von Variablen des gleichen Typs, daher lassen sich damit auch strings vergleichen. Die für uns momentan interessantesten sind die Zeichenketten == und !=, man muss hier jedoch vorsichtig sein, da man == nicht mit einem = Zeichen verwechseln darf.
Die Zeichenkette == macht nichts anderes, als zu überprüfen ob die linke Seite und die rechte Seite übereinstimmen, ist dies der Fall, ist die Aussage true (wahr)
Im Gegensatz dazu stellt != das Gegenteil von == dar, daher wenn die linke und rechte Seite übereinstimmen ist die Aussage false (falsch).

Um dies besser zu verdeutlichen, folgt eine kleine Tabelle mit Aussagen die true / false sind:

linke Seite Zeichenkette rechte Seite Aussageergebnis
1 == 1 true
1 != 1 false
1 == 2 false
1 != 2 true
"Hallo Welt!" == "Hallo Welt!" true
"Hallo Welt!" != "Hallo Welt!" false
"Hallo Welt!" == "Halloo Welt!" false
"Hallo Welt!" != "Halloo Welt!" true

Abschließend sollte hier noch erwähnt werden, dass sich auch string Variable mit einem durch Anführungsstrichen gekennzeichneten string vergleichen lässt.

Übungsbeispiele Division

Jetzt sollten wir über ausreichend Wissen verfügen um das Problem mit der Division durch 0 zu lösen.
Also gilt es folgendes Programm zu schreiben:

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)
                  {
                        Console.WriteLine("Die zweite Zahl darf nicht 0 sein!");
                  }

                  if(zahl2!=0)
                  {
                        int ergebnis = zahl1/zahl2;
                        Console.WriteLine(ergebnis);
                  }

                  Console.ReadLine();
            }
      }
}

Mögliche Fehler

Wieder betrachten wir das Verhalten von Visual C# bei einem typischen Fehler.
Als Beispiel wählen wir diesmal das Verhalten, wenn bei einer if - Abfrage statt == nur ein = Zeichen eingegeben wird (rot markiert).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Projekt1
{
      class Program
      {
            static void Main(string[] args)
            {
                  if("Hallo Welt!" = "Hallo Welt!")
                  {
                        Console.WriteLine("Text stimmt überein");
                  }
                  Console.ReadLine();
            }
      }
}

Jetzt bekommen wir folgende Fehlermeldung in der Fehlerliste angezeigt:(je nach Formatierung kann die Zeile / Spalte variieren)

Beschreibung Datei Zeile Spalte Projekt
Die linke Seite einer Zuweisung muss eine Variable, eine Eigenschaft oder ein Indexer sein. Program.cs 12 17 Projekt1

Diese Fehlermeldung bedeutet nichts anderes, als dass Visual C# hier versucht etwas abzuspeichern was logischerweise nur in eine Variabel möglich ist. Es ist allgemein auch möglich etwas zwischen den runden Klammern einer if - Abfrage abzuspeichern, jedoch muss der gesamte Klammerinhalt wieder zu einer Aussage führen. Dies wird jedoch erst in späteren Abschnitten erläutert.