Benutzer-Werkzeuge

Webseiten-Werkzeuge


einstieg:variablen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


einstieg:variablen [2024/08/31 12:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Variablen ======
 +===== Variablen in der Mathematik =====
 +
 +Ihr kennt das Wort "Variable" sicher aus der Mathematik. Dort ist eine Variable ein **Platzhalter**, für den beliebige Elemente einer Menge ("Grundmenge") eingesetzt werden können, z.B.
 +$$x\in \mathbb{R}$$
 +Oft interessiert man sich in der Mathematik dafür, für welche Belegungen der Variable $x$ eine Aussage, z.B. 
 +$$ 3\cdot x + 2 = x + 10$$
 +wahr ist. Die Menge dieser Zahlen nennt man **Lösungsmenge** $\mathbb{L}$. Im gegebenen Beispiel ist $\mathbb{L} = \{4\}$. \\ \\ 
 +;-) Jetzt, wo Ihr Euch in Erinnerung gerufen habt, was der Begriff "Variable" in der Mathematik bedeutet, kann ich viele von Euch auch gleich wieder beruhigen:
 +
 +<WRAP center round info 60%>
 +**Variablen in der Informatik unterscheiden sich deutlich von Variablen in der Mathematik und (da kann ich Dich beruhigen!) sie sind viel einfacher zu verstehen!** 
 +</WRAP>
 +
 +===== Variablen in der Informatik =====
 +<WRAP center round tip 80%>
 +Eine **Variable** ist ein benannter Speicherplatz. Jede Variable hat einen **Bezeichner** (also einen Namen) und einen **Datentyp**. Der Datentyp legt fest, welche Werte die Variable speichern kann. \\ \\ 
 +Vor der ersten Verwendung einer Variable müssen wir sie **deklarieren**. Dazu schreiben wir einfach den Datentyp der Variablen und dahinter den Bezeichner. \\ \\ 
 +**Beispiel:**
 +<code java>
 +int a;
 +</code>
 +Die hier deklarierte Variable trägt den Bezeichner ''a'' und hat den Datentyp **int**. **int** ist eine Kurzform für "integer number", also "ganze Zahl".
 +</WRAP>
 +
 +==== Beispiel 1: Wertzuweisung, Berechnung von Termwerten ====
 +
 +Führe das Programm in Einzelschritten aus ("Step over": {{:klassen1:anwenden:step_over.png?nolink|}}), und zwar
 +  * zunächst mit offenem Tab "Ausgabe" auf der rechten Seite
 +  * dann mit offenem Tab "Variablen" auf der rechten Seite.
 +Beobachte genau, was jede einzelne der Programmanweisungen bewirkt!
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Variablen1'}">
 +
 +<script type="text/plain" title="Main.java">
 +int a;         // Deklaration der Variable a
 +a = 12;        // Wertzuweisung
 +
 +// Auswertung von Termen
 +println(a);
 +println(3*a + 5);
 +
 +// Im Unterschied dazu: Ausgabe einer Zeichenkette:
 +println("a");
 +println("3*a + 5");
 +</script>
 +</div>
 +
 +</HTML>
 +
 +== Erklärung der einzelnen Anweisungen ==
 +<code learnj [enable_line_numbers="true", start_line_numbers_at="1"]>
 +int a;
 +</code>
 +Diese Anweisung **deklariert** die Variable ''a'' mit dem **Datentyp** int. Der Computer reserviert genug Speicherplatz zum Speichern einer ganzen Zahl (''int'') und merkt sich, dass dieser Speicherplatz ''a'' heißt. Als "Startwert" schreibt der Computer bei Variablen vom Datentyp ''int'' die Zahl 0 in den Speicherplatz. Wir sagen: "''a'' hat den Wert 0.".
 +<code learnj [enable_line_numbers="true", start_line_numbers_at="2"]>
 +a = 12;
 +</code>
 +Diese Anweisung hat es in sich: Das Gleichheitszeichen ''='' bewirkt in Java **nicht**, dass die Terme auf der rechten und linken Seite verglichen werden, sondern es ist der **Wertzuweisungsoperator** dieser Programmiersprache. Das bedeutet: Der Computer wertet den Term rechts vom ''='' aus und schreibt den Termwert (in diesem Fall einfach die Zahl 12) in die Variable ''a''. Der vorherige Wert der Variable wird dabei **überschrieben**.
 +<WRAP center round tip 80%>
 +Möchte man in Java den Wert zweier Terme **vergleichen**, so muss man dafür den **Vergleichsoperator** ''=='' benutzen, mehr dazu später.
 +</WRAP>
 +<code learnj [enable_line_numbers="true", start_line_numbers_at="5"]>
 +println(a);
 +</code>
 +Diese Anweisung schreibt nicht den Buchstaben a in die Ausgabe, sondern den **Wert des Terms** ''a''. Zum Zeitpunkt der Ausführung dieser Anweisung steht in der Variable ''a'' der Wert 12, also wird 12 ausgegeben. \\ 
 +Will man den Buchstaben a ausgeben, dann verwendet man die Anweisung ''println("a");''
 +<WRAP center round tip 80%>
 +Ist ein Text in Gänsefüßchen (''"'') eingeschlossen, dann stellt er für Java eine **Zeichenkette** dar. ''"a"'' ist so eine Zeichenkette. Zeichenketten werden durch die Anweisung ''println'' einfach wörtlich ausgegeben. \\ 
 +Schreibt man etwas nicht in Anführungszeichen, so ist es für Java entweder eine Anweisung oder ein Term. Der Computer versucht diesen Text dann auszuwerten und gibt einen Fehler aus, wenn er ihn nicht versteht.
 +</WRAP>
 +<code learnj [enable_line_numbers="true", start_line_numbers_at="6"]>
 +println(3*a + 5);
 +</code>
 +Der Text ''3*a + 5'' ist nicht in Anführungszeichen eingeschlossen. Java interpretiert ihn also als Term und bestimmt seinen Wert, in diesem Fall $3 \cdot 12 + 5 = 41$.
 +
 +<code learnj [enable_line_numbers="true", start_line_numbers_at="12"]>
 +println("a");
 +println("3*a + 5");
 +</code>
 +Die Texte ''"a"'' und ''"3*a + 5"'' sind jetzt in Anführungszeichen eingeschlossen. Es handelt sich also um **Zeichenketten**, die wörtlich ausgegeben werden.
 +
 +==== Beispiel 2: Rätsel ====
 +
 +Schau' Dir das Programm zuerst an, ohne es zu starten. Überlege Dir bei jedem Programmschritt:
 +  * Welche Variablen gibt es gerade?
 +  * Welche Werte haben sie gerade?
 +
 +Was meinst Du: Welche Werte geben die ''println''-Anweisungen in der Ausgabe aus?
 +
 +Führe dann das Programm in Einzelschritten aus ("Step over": {{:klassen1:anwenden:step_over.png?nolink|}}) und überprüfe, ob Du richtig vermutet hast!
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Variablen2'}">
 +
 +<script type="text/plain" title="Main.java">
 +int a;        // Deklaration der Variable a
 +a = 5;        // Wertzuweisung
 +
 +int b;        // Deklaration der Variable b
 +b = a + 3;
 +
 +println(a);
 +println(b);
 +
 +a = b * 2;
 +println(a);
 +println(b);
 +
 +</script>
 +</div>
 +
 +</HTML>
 +
 +== Erklärung der einzelnen Anweisungen ==
 +In der folgenden Tabelle zeige ich Dir, welche Variablen es nach Ausführung der einzelnen Anweisungen gibt und welche Werte sie tragen.
 +^Anweisung^Variablen und deren Werte^Erklärung^
 +|int a; | a: 0 | ''a'' wird deklariert und erhält den Wert 0.|
 +|a = 5; | a: 5 | Der Variablen ''a'' wird der Wert 5 zugewiesen. Jetzt steht die Zahl ''5'' in der Variablen ''a''.|
 +|int b; | a: 5 \\ b: 0 | ''b'' wird deklariert und erhält den Wert 0.|
 +|b = a + 3; | a: 5 \\ b: 8 | Der Term ''a + 3'' wird ausgewertet. Sein Wert (8) wird der Variablen ''b'' zugewiesen.|
 +|println(a) | a: 5 \\ b : 8 | Der Wert von ''a'' (also die Zahl 5) wird ausgegeben. |
 +|println(b) | a: 5 \\ b : 8 | Der Wert von ''b'' (also die Zahl 8) wird ausgegeben. |
 +|a = b * 2; | a: 16 \\ b: 8 | Der Term ''b * 2'' wird ausgewertet. Sein Wert (16) wird der Variablen ''a'' zugewiesen.|
 +|println(a) | a: 16 \\ b : 8 | Der Wert von ''a'' (also die Zahl 16) wird ausgegeben. |
 +|println(b) | a: 16 \\ b : 8 | Der Wert von ''b'' (also die Zahl 8) wird ausgegeben. |
 +
 +===== Wie kann ich mir eine Variable vorstellen? =====
 +Stell Dir eine Variable am besten als beschriftete Schachtel vor, in der **genau ein** Wert (im Fall einer Variablen vom Typ ''int'' genau eine ganze Zahl) reinpasst:
 +{{ :einstieg:pasted:20200618-181452.png?300 }} \\ \\ 
 +Eine Wertzuweisung (z.B. '' a = b * 2.5'') bewirkt, dass der alte Wert weggeworfen und der neue reingetan wird. Nach der Wertzuweisung liegt ein **neuer Zustand** vor:
 +{{ :einstieg:pasted:20200618-181816.png?300 }}
 +==== Beispiel 3: Erhöhung des Wertes einer Variablen ====
 +
 +Jetzt wird es geheimnisvoll: Welchen Wert gibt das folgende Programm aus?
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Variablen3'}">
 +
 +<script type="text/plain" title="Main.java">
 +int a;        // Deklaration der Variable a
 +a = 37;       // Wertzuweisung
 +
 +a = a + 1;    // Erhöht den Wert der Variablen um 1
 +
 +println(a);
 +
 +</script>
 +</div>
 +
 +</HTML>
 +
 +<WRAP center round info 80%>
 +Bei der Ausführung der Anweisung ''a = a + 1;'' wird zunächst den Wert des Terms ''a + 1'' auf der rechten Seite ausgewertet. Der Termwert ist $37 + 1 = 38$. Dieser Wert wird dann der Variablen ''a'' zugewiesen, so dass nach der Ausführung der Anweisung die Variable ''a'' den Wert ''38'' enthält. \\ \\
 +Die Anweisung '' a = a + 1; '' erhöht den Wert der Variablen ''a'' also um ''1''. \\ \\ 
 +**Wichtig:** \\ 
 +Der Computer versucht **nicht**, die Gleichung $a = a + 1$ zu lösen (deren Lösungsmenge leer ist), denn ''='' ist nicht der Vergleichsoperator, sondern der **Wertzuweisungsoperator**, der einfach nur bewirkt, dass der Wert des Terms ''a + 1'' in die Variable ''a'' geschrieben wird.
 +</WRAP>
 +
 +<WRAP center round tip 60%>
 +Beim Programmieren kommt es sehr oft vor, dass der Wert einer Variable um einen konstanten Wert erhöht werden muss, daher gibt es dafür eine Kurzschreibweise. Statt ''a = a + 5;'' kann man beispielsweise kurz schreiben: ''a += 5;''. \\ \\ 
 +**Spezialfall:** \\ 
 +Soll der Wert einer Variablen um ''1'' erhöht werden, so kann man noch kürzer schreiben: ''a++;''. \\ \\ 
 +Das Erniedrigen einer Variable geht übrigens entsprechend. ''b = b - 12;'' erniedrigt den Wert von ''b'' um ''12'', kurz: ''b -= 12;''. Auch das Erniedrigen um ''1'' gibt es als Ultrakurzversion: 
 +<code java>
 +b--;
 +</code>
 +</WRAP>
 +
 +=== Probiere es gleich hier aus: ===
 +
 +<HTML>
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Variablen4'}">
 +
 +<script type="text/plain" title="Main.java">
 +int a;        // Deklaration der Variable a
 +a = 12;
 +       
 +a += 7;       // Der Wert von a wird um 7 erhöht.
 +println(a);
 +
 +a--;          // Der Wert von a wird um 1 erniedrigt.
 +println(a);
 +
 +a++;          // Der Wert von a wird um 1 erhöht.
 +println(a);
 +
 +a = a *3;     // Der Wert von a wird verdreifacht.
 +println(a);
 +</script>
 +</div>
 +
 +</HTML>
 +
 +===== Deklaration und Wertzuweisung in einem Aufwasch =====
 +Oft deklariert man eine neue Variable und weist ihr gleich danach ihren Startwert zu, z.B.
 +<code learnj>
 +int k;
 +k = 14;
 +</code>
 +Diese beiden Anweisungen darf man zu einer einzigen zusammenfassen:
 +<code learnj>
 +int k = 14;
 +</code>
 +<WRAP center round info 80%>
 +**Form der Bezeichner:** \\
 +Die Namen der Variablen (wir Informatiker sagen **Bezeichner** dazu, //englisch: identifier//) sind nicht nur auf einzelne Kleinbuchstaben beschränkt, sondern dürfen Kleinbuchstaben, Großbuchstaben, Ziffern und Unterstriche (''_'') enthalten. Auch Umlaute (ä, ö, ü, ...) sind erlaubt. Ein Variablenbezeichner darf **nicht** mit einer Ziffer beginnen. \\ \\ 
 +**Beispiele für gültige Variablenbezeichner:** \\ 
 +''Anzahl'', ''K'', ''a12_x'', ''f1'' usw.
 +</WRAP>
 +===== Tastatureingabe =====
 +<WRAP center round info 80%>
 +Mit der Anweisungen ''Input.readInt("Gib eine Zahl ein:")'' kann man eine Zahl per Tastatureingabe vom Benutzer entgegennehmen.\\ ;-) Kommt Dir die Punktschreibweise noch bekannt vor?
 +</WRAP>
 +
 +<HTML>
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Variablen6'}">
 +
 +<script type="text/plain" title="Main.java">
 +int zahl = Input.readInt("Gib eine Zahl ein:");
 +print("Das Quadrat der Zahl ist ");
 +print(zahl * zahl);
 +print(", ihre Gegenzahl ist ");
 +println(-zahl);
 +</script>
 +</div>
 +
 +</HTML>
 +
 +
 +===== Ein letztes Beispiel =====
 +Zum Schluss nochmal ein Rätsel: Welche Zahl gibt das Programm aus?
 +<HTML>
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Variablen5'}">
 +
 +<script type="text/plain" title="Main.java">
 +int zahl = 14;
 +int n = 8;
 +
 +n = zahl + n;
 +
 +zahl += 3;
 +zahl *= 2;
 +
 +n += zahl;
 +
 +println(n);
 +</script>
 +</div>
 +
 +</HTML>
  
einstieg/variablen.txt · Zuletzt geändert: 2024/08/31 12:03 von 127.0.0.1