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:
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
- Einlesen von zwei int Werten
- Addieren dieser zwei int Werte und abspeichern in einer neuen int Variable
- Ausgeben des Ergebnisses in der Konsole
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 = 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:
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:
{
Code;
}
Allgemein besteht eine if - Abfrage aus drei Teilen:
- dem Schlüsselwort if
- einer Aussage in runden Klammern nach dem Schlüsselwort
- einen bei einer wahren Aussage auszuführenden Code in geschwungenen Klammern
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:
{
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)
- eine if - Abfrage mit der Aussage - true (wahr)
- darin eine Zeile Code, welche "wahre Aussage" ausgibt
- eine zweite if - Abfrage mit der Aussage - false (falsch)
- darin eine Zeile Code, welche "falsche Aussage" ausgibt
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)
{
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:
- einlesen von zwei int Zahlen
- überprüfen ob die zweite Zahl gleich 0 ist
- wenn gleich 0, folgenden Text ausgeben: "Die zweite Zahl darf nicht 0 sein!"
- wenn sie nicht gleich 0 ist, die erste Zahl durch die zweite Dividieren und das Ergebnis ausgeben (Nachkomma wird abgeschnitten)
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)
{
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.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.