Auftrag 8: Elemente einer Programmiersprache

In diesem Auftrag beschäftigen wir uns mit den „Bausteinen“, die eine Programmiersprache braucht, um beliebige Probleme zu lösen. Nachfolgend nochmals eine kurze Zusammenfassung der einzelnen Bausteine. Diese Bausteine sind grundsätzlich in den meisten Programmiersprachen ungefähr gleich. Als Beispiel Code wird JavaScript verwendet. Lesen Sie die Abschnitte nochmals durch und fahren Sie dann mit der Aufgabe weiter unten fort.

Variablen

Eine Variable kann man sich als Platzhalter für einen Wert vorstellen. Da Programme mit verschiedenen Daten funktionieren müssen, ist es nötig den Ablauf (also wie wir zum Ziel kommen) auf eine allgemeine Art auszudrücken.

Ein Beispiel:
Wir möchten ein Programm schreiben, dass uns zwei Zahlen zusammenzählt. Diesem Programm geben wir als Eingabe zwei Zahlen: a und b. Das Programm rechnet a und b zusammen und gibt das Resultat dieser Rechnung zurück. Unser Programm funktioniert somit nicht nur für bestimmte Zahlen (z.B. 5+1=6 sonder für alle beliebigen Zahlen). In diesem Fall sind a und b Variablen, da sie als Platzhalter für einen bestimmten Wert (genauer eine bestimmte Zahl) verwendet werden.

var meineZahl = 3; // Anstelle von 3 wäre natürlich jede beliebige Zahl möglich

Funktionen und Methoden

Die Begriffe können wir auf unserer Stufe (so tief wie wir das anschauen) eigentlich als Synonyme betrachten. Eine Funktion fasst Arbeitsschritte in einem Programm zusammen, die notwendig sind um ein bestimmtes Ziel zu erreichen. Dabei gilt das folgende Prinzip: Man gibt der Funktion Informationen, die für die Erledigung der Aufgabe relevant sind und mit denen dann die Funktionen die vordefinierten Arbeitsschritten abarbeitet und das Resultat zurückgibt. 

Funktionen schreiben sich folgendermassen:

function meineFunktion(parameter1, parameter2) {
	// Innerhalb der Funktion werden die einzelnen Arbeitsschritte definiert 
}

Diese Funktion dann zu nutzen (also den Arbeitsablauf zu starten) geschieht folgendermassen:

meineFunktion('wert für parameter1', 'wert für parameter 2');

Wichtige Eigenschaften einer Funktion:

  • Sie kann mehrfach aufgerufen werden mit unterschiedlichen Eingabewerten
  • Sie befolgt immer die gleichen Schritte

Verzweigungen

Verzweigungen im Programmablauf helfen uns auf unterschiedliche Eingabewerte zu reagieren und falls nötig einen unterschiedlichen Arbeitsschritt auszuführen.

if(bedingung) {
	// Falls die Bedingung wahr ist, wird dieser Teil ausgeführt
} else {
	// Falls die Bedingung nicht zutrifft, wird dieser Teil ausgeführt
}

Ein Beispiel:
Wir möchten anhand einer Zahl (hier eine Schulnote) unterscheiden ob diese genügend ist oder nicht und entsprechend eine Meldung ausgeben. Dies kann wie folgt realisiert werden:

if(note >= 4) {
	alert('Sie haben bestanden!');
} else {
	alert('Schade! Sie sind durchgefallen!');
}

Das Wort „note“ ist eine Variable in der die tatsächliche Note steht. Ist diese grösser resp. gleich 4, dann hat der Schüler bestanden. Ansonsten ist der Schüler durchgefallen.

Hier finden sich ausführlichere Infos.

Objekte

Objekte bündeln Variablen und Funktionen in ein einfach zu handhabendes „Ding“. Mit diesem Ding oder Bündel, können wir dann leichter arbeiten, als wenn wir alle Variablen separat handhaben müssen.

Ein Beispiel:
Wir schreiben ein Programm für eine Garage und müssen gewisse Informationen zu einem Auto ablegen. Wir müssen aber nicht nur ein Auto verwalten sondern beliebig viele. Pro Auto erstellen wir ein Objekt, das alle nötigen Eigenschaften (=Variablen) des Autos beinhaltet:

var meinAuto = {
	color: 'red',
	ps: 240,
	brand: 'Mercedes Benz',
}

var anderesAuto = {
	color: 'pink',
	ps: 60,
	brand: 'Opel'
}

Listen (Arrays) und Schlaufen (Loops)

Da wir in einem Programm teilweise Dinge in unbekannter Anzahl handhaben müssen, gibt es quasi „Variablen mit mehreren Plätzen“ und eine Möglichkeit jeden einzelnen Platz zu durchlaufen und etwas damit zu machen. Eine Variable mit mehreren Plätzen nennt sich „Liste“ oder auch „Array“ und die Möglichkeit einen solchen Array zu durchlaufen heisst „Schlaufe“.

Ein Beispiel:
Wir haben eine Liste von Gemüse. Für jedes Gemüse möchten wir eine Meldung im Browser anzeigen:

var vegetables = ['tomato', 'cucumber', 'corn', 'eggplant'];
for(veg of vegetables) {
	alert(veg);
}

Hinweis: Es gibt verschiedene Arten von Loops, die je nach Anwendungsfall einfacher zu schreiben sind. Hier finden sich ausführliche Infos zu Schlaufen.

Datentypen

In den Programmiersprachen (resp. Skriptsprachen), die wir uns hier anschauen, geschieht der Umgang mit unterschiedlichen Datentypen zumeist implizit. Das heisst, dass die Programmiersprache automatisch erkennt was wir für einen Typ nutzen und entsprechend im Hintergrund alles Nötige für uns macht. Konkret bedeutet das, dass wir in eine Variable z.B. eine Zahl, einen Text oder sonst etwas schreiben können. Dabei müssen wir nur darauf achten, dass wir den Wert richtig angeben. Also z.B. um einen Text die Anführungszeichen schreiben und eine Zahl ohne Anführungszeichen.

Aufgabenstellung

Wir möchten diese Bausteine einer Programmiersprache in einem Beispiel mit JavaScript nutzen. Dazu erstellen wir einen kleinen Schulnotenrechner. Gehen Sie wie folgt vor:

  1. Erstellen Sie einen Array der die drei Noten 4, 5, 6 enthält.
  2. Erstellen Sie eine Funktion „average“ (average = engl. Durchschnitt), die als Parameter ein Array von Noten erhält und den Durchschnitt ausrechnet.
  3. Erstellen Sie eine Funktion „passOrFail“, die eine Note (eine Zahl) als Parameter entgegen nimmt und je nach Note eine Meldung ausgibt:
    • Für Noten zwischen 1 und 3.5: „Oh, das war wohl nix!“
    • Für Noten zwischen 3.5 und 4: „Knapp daneben ist auch vorbei!“
    • Für Noten über 4: „Bestanden!“
  4. Das Programm soll nun aus diesen in den vorherigen Schritten erstellen Teile zusammengesetzt werden und das folgende machen:
    • Wir rechnen den Schnitt der Noten aus
    • Diesen Notenschnitt geben wir an die Funktion passOrFail weiter, die uns dann anzeigt, ob unser Notenschnitt genügend ist

Starten Sie das Programm nun mit unterschiedlichen Noten und versuchen Sie zuerst im Kopf abzuschätzen, was der angezeigte Text sein soll… –> z.B. sollte mit den Noten 2,3,1 der Durschnitt 2 sein und darum der Text „Oh, das war wohl nix“ erscheinen.

Musterlösung

var noten = [4, 5, 6];

function average(noten) {
	var summe =  0
	for(note of noten) {
		summe = summe + note;
	}
	var durchschnitt = summe / noten.length;
	return durchschnitt;
}

function passOrFail(note) {
	if(note < 3.5) {
		alert('Oh, das war wohl nix!');
	}
	if(note >= 3.5 && note < 4) {
		alert('Knapp daneben ist auch vorbei!');
	}
	if(note >= 4) {
		alert('Bestanden!');
	}
}

var notenSchnitt = average(noten);
passOrFail(notenSchnitt);