Variablen & Operatoren
Nachdem wir jetzt unser erstes Programm zum Laufen gebracht haben, wollen wir diesmal echte Funktionalität und Interaktion erreichen.
Im Grunde tut jedes Programm das Gleiche: Es nimmt irgendwelche Daten und verarbeitet sie.
Wenn man dies tun will, stellt sich eine Frage: Wie merkt sich der Computer eigentlich die Daten? Und wie erkläre ich ihm was was ist?
Prinzipiell kennt ein Rechner nur drei Dinge, 0, 1 und +. Alles andere ist eine geschickte Kombination dieser drei Dinge.
Nicht einmal abziehen kann er, von komplexen Dingen wie selber denken ganz zu schweigen.
Wie im letzten Kapitel bereits erwähnt, ist es aber für Menschen schon ein großer Unterschied ob man zwei Zahlen addiert oder zwei Wörter. Wenn nun der Rechner aber eh nur EIN (1) und AUS (0) versteht, muss man sich etwas einfallen lassen, um ihm den Unterschied zwischen dem Zeichen 0 und der Zahl 0 zu erklären.
Die Lösung sind Datentypen, man einigt sich einfach darauf, dass es bestimmte Schlüsselwörter gibt, die einen ganz klare Bedeutung haben. So bedeutet das Schlüsselwort int zum Beispiel, dass das nächste Wort eine Variable (ein Platzhalter / Merker, siehe Mathe) vom Typ INTEGER benennt. Wenn wir also so etwas schreiben:
Code: Alles auswählen
int x = 1;
so bedeutet dies für den Rechner:
Ich will einen Variable vom Typ Ganzzahl (Schlüsselwort: int) einführen, sie wird den Namen x erhalten und hat den Wert 1.
Den Rest, wie einen freien Platz im Speicher suchen, den Namen und Wert in einen Kombination von 0 und 1 übersetzen, sich den Speicherort merken usw. übernimmt der Rechner. Wir brauchen uns darum nicht zu kümmern.
Wann immer wir jetzt x schreiben, bedeutet dies eigentlich 1. SOLANGE wir damit rechen. Wenn wir den Inhalt von x als Buchstaben nutzen wollen müssen wir das erst umständlich konvertieren, dazu später mehr.
Genau so läuft das mit einer Zeichenkette (auf deutsch: einem Wort):
Code: Alles auswählen
string wort = "ICH kann auch mehr als ein Wort fassen";
Sagt dem Rechner:
Ich will eine Variable vom Typ Zeichenkette (Schlüsselwort: string) einführen, sie erhält den Namen wort und bedeutet eigentlich ICH kann auch mehr als ein Wort fassen. Bei strings setzen wir den Wert immer in Anführungszeichen "". Sie sagen dem Rechner, dass hier einen Zeichenkette kommt und er das mit den Sonderzeichen und Zahlen am Anfang (siehe letztes Kapitel) mal kurz vergessen soll.
Es gibt eine ganze Fülle von Datentypen, die wichtigsten will ich hier kurz aufführen und ein paar Takte dazu verlieren:
int bezeichnet eine Ganzzahl, also so etwas wie 1,2,3,4,5,6 usw. nur ganze Zahlen eben.
float bezeichnet eine Gleitkommazahl, das ist einfach ausgedrückt so etwas 1,23456.
double sind Gleitkommazahlen mit doppelter Genauigkeit.Sie können mehr Stellen nach dem Komma haben(sehr einfach ausgedrückt)
string Buchstaben, von fast beliebiger Anzahl. Es können also ganze Sätze in einem string stehen.
bool Ein Wahrheitswert, ein bool ist entweder TRUE (wahr, 1) oder FALSE (falsch, 0). SEHR wichtiger Datentyp.
Den Rest sehen wir uns bei Bedarf an.
Will man eine Variable verwenden muss man bei fast jedem Datentyp gleich vorgehen:
1. Die Variable deklarieren
Wir müssen dem Rechner sagen von welchem Typ die Variable sein soll.
Code: Alles auswählen
int x;
Wenn der Compiler (das Ding, was aus unserem Code ein echtes Programm macht) das liest, bedeutet dies für ihn:
Kümmer dich mal darum, dass im Speicher genug Platz für eine Integer Variable reserviert wird und merk dir wo das ist.
Jetzt haben wir zwar einen Namen für unsere Variable, aber sie hat keinen Wert !
Genau genommen kennt ein Rechner nämlich noch etwas, und das ist der Feind eines jeden Programmierers:
NULL
Null bedeutet nicht einfach nur 0(also NICHTS), sondern ist viel schlimmer. Es bedeutet: Wir wissen es nicht!
Für eine streng logisch agierende Maschine ist das ein unhaltbarer Zustand (eben KEINER).
Wir mit unseren schwabbeligen Gehirnen mögen so etwas ignorieren können, eine Maschine kann es nicht und das führt dann unweigerlich zum Absturz.
Also gewöhnt euch daran einer Variable immer SOFORT einen Wert zuzuweisen. Heutzutage sind die Programmiersprachen zwar zu schlau um dauernd auf so etwas hereinzufallen, aber sicher ist sicher.
Was uns zu Punkt zwei führt.
2. Die Variable initialisieren
Code: Alles auswählen
x=2;
Mit unserem Wissen können wir uns jetzt daran machen einen einfachen Taschen(naja: Schreibtisch-)rechner zu erschaffen.
Unser neues Programm soll folgendes können:
1. Den User nach zwei Zahlen a und b fragen
2. Die Zahlen addieren (also a+b = c)
3. Das Ergebniss c ausgeben
Toller Rechner, nicht wahr? Ist aber gar nicht mal so einfach.
Startet ein neues Konsolenprojekt (wie in Kapitel 2) und schon gehts los.
Um un die beiden Operanden a und b merken zu können führen wir am Besten glleich zu Anfang zwei gleichnamige Variablen ein.
schreibt also einfach in der main methode
Code: Alles auswählen
int a = 0;
int b = 0;
Da Programmierer vom Grundsatz her faul sind und man (im Gegensatz zu meinem Geschwafel oben) int NICHT unbedingt initialisieren muss, kann man auch folgendes schreiben:
Code: Alles auswählen
int a,b;
Schöner ist aber die erste Variante.
Jetzt müssten wir den User nach den Werten der zwei Variablen fragen, also was er eigentlich addieren will.
Wer aufgepasst hat ahnt vielleicht schon was jetzt kommt.
Der Rest denkt mal kurz darüber nach was wir genau machen wollen........
Genau: User tippt Zahl in Konsole, wir fragen Konsole was da steht und merken uns Zahl.
also könnten wir doch einfach schreiben:
Code: Alles auswählen
a = Console.ReadLine();
also sagen: "Konsole nimm was in der Zeile steht und schreib das in a".
Übrigens: Anweisungen werden von rechts nach links befolgt, in der Hinsicht ist C# ein Araber. :-)
LEIDER, leider geht das nicht so einafch.
Es gibt zwar hganz klar die methode ReadLine(), aber die liefert uns einen string und keine int.
Ist auch logisch, in der Konsole stehen schließlich auch Buchstaben und keine Zahlen
Also müssen wir uns erst mal eine Zeichenkette geben lassen und die dann zu 'ner Zahl konvertieren.
Das geht recht einfach:
Code: Alles auswählen
Console.WriteLine("Bitte den ersten Operanden eingeben");
string aString = Console.ReadLine();
a = Convert.ToInt32(aString);
Wer hätte gedacht, dass sich hinter der Klasse Convert ein allgemeingültiger Konvertiere verbirgt :-) ?
Wir schreiben das aus der Konsole also erst mal in einen string und konvertieren das anschließend in ein int.
Der Konvertiere bietet uns sogar drei verschiedene int an, int16, int32 und int64. Hinter den Zahlen verbirgt sich die Länge eines int in Bit. int32 kan eine 32 bit lange Ganzzahl fassen. das geht von grob - 2 Mrd bis + 2 Mrd.
Sollte also erstmal reichen. int64 sind übrigens nicht doppelt soviele Zahlen sondern 4294967296 (2^32) mal soviel.
DAS sollte dann echt reichen. Wenn wir einfach int schreiben bekommen wir eine 32bit lange Ganzzahl.
Dasselbe mit dem Operand b und dann können wir addieren:
Code: Alles auswählen
int c = a + b;
Wie wir sehen kann man auch mit dem Ergebniss einer Operation eine Variable initialisieren. Programmierer sind schon arg faule Hunde.
Zum Schluß geben wir das Ganze noch aus:
Code: Alles auswählen
Console.WriteLine(" Das Ergebnis lautet: c = " + c);
Einseltsames Konstrukt, aber eigentlich ganz einfach.
Zuerst schreiben wir den TEXT, den wir ausgeben wollen also: " Das Ergebnis lautet: c = " , danach kommt ein + um klarzumachen, das wir etwas an den text anhängen wollen (wir addieren sozusagen zwei Texte), und die variable, die den text enthält, als + c.
Das lässt sich beliebig fortsetzen.
Sowas geht zum Beispiel auch:
Code: Alles auswählen
Console.WriteLine(" Ergebnis: c = " + a + "+" + b + " = " c);
probiert es aus!.
Der ganze Code sieht dann so aus:
Code: Alles auswählen
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Taschenrechner
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Bitte den ersten Operanden eingeben");
string a = Console.ReadLine();
Console.WriteLine("Bitte den zweiten Operanden eingeben");
string b = Console.ReadLine();
Console.WriteLine( (a + " + " + b + " = " + (Convert.ToInt32(a) + Convert.ToInt32(b)) ));
System.Threading.Thread.Sleep(10000);
}
}
}
Warum das anders aussieht als bei euch? Weil ich faul bin :-). Schaut euch die Änderungen genau an und lernt.
Wenn wir Kommazahlen benutzen wollen, müssen wir double oder float als Typ verwenden.
Es können die üblichen Operatoren verwendet werden:
+
-
*
/
zusätzlich gibt es noch %, das ist die Modulo Operation. SEHR nützlich, ihr kennt die aus der Grundschule vom schriftlichen dividieren. % gibt den REST einer Division zurück.
5%2 = 1 (5 geteilt durch 2 ist 2, Rest bleibt 1)
Bedenkt, dass int GANZZAHLEN sind, es gibt also keine Stellen nach dem Komma (es gibt nicht mal ein Komma).
Das ist wörtlich gemeint, es wird NICHT gerundet. 1/2 ist also 0, denkt daran.
Natürlich existieren noch weitere Operatoren, zu denen kommen wir im nächsten Kapitel.
Versucht euch mal an den anderen Operationen, im nächsten Kapitel pimpen wir unseren Rechner.