Lektion 1: Was ist eine Sprache?
In dieser Lektion werdet ihr lernen, was eine Sprache ist (Ja, es ist so einfach wie ihr denkt!) und wo dieses Konzept in der Informatik Anwendung findet (Nein, es ist nicht so einfach wie ihr denkt!)
Aufgabe 1: Natürliche Sprachen
Lies das Fachkonzept: Sprache und beantworte die folgenden Fragen:
- Was ist ein Alphabet, ein Wort, eine Sprache im formalen Sinn?
- Ist Bienensprache eine Sprache?
- Ja? Dann liste einige Zeichen und Wörter auf, aus denen die Sprache besteht!
- Nein? Warum nicht?
Aufgabe 2: Römische Zahlen, Bilder, Musik und Biber
- haus.pgm
P2 5 8 15 15 15 8 15 15 15 8 8 8 15 8 8 8 8 8 12 12 12 12 12 12 5 12 5 12 12 12 12 12 12 12 5 12 5 12 12 12 12 12 12
Das Alphabet von PGM besteht aus dem Buchstaben "P", den Zahlen 0 bis 9, dem Leerzeichen und dem Zeilenumbruch. Jedes gültige Bild ist ein eigenes Wort der Sprache PGM!
Einige Regeln der Sprache PGM:
- Die erste Zeile (P2) kennzeichnet das PGM-Format.
- Die beiden Zahlen „5 8“ in der zweiten Zeile beschreiben die Aufteilung der Pixel in Spalten und Zeilen (hier 5 Spalten und 8 Zeilen).
- Die Zahl 15 in der dritten Zeile beschreibt die Anzahl der Graustufen - hier von Stufe 0 (Schwarz) bis Stufe 15 (Weiß).
- In den folgenden Zeilen werden die einzelnen Grauwerte mit Hilfe von Zahlen dargestellt.
- Schreibe den Text mit einem Texteditor und speichere ihn als haus.pgm ab.
- Dann sieh dir das Ergebnis z. B. mit dem Programm GIMP an.
- Entwickle danach ein eigenes Bild!
- bruder-jakob.abc
X: 1 T: Brother John C: Traditional L: 1/4 K: C CDEC|CDEC|EFGz|\ % continues w: Are you slee-ping, Are you slee-ping, Bro-ther John!\ % continues EFGz| w: Bro-ther John! G/ A/ G/ F/ EC|G/ A/ G/ F/ EC|\ % continues w: Mor-ning bells are rin-ging, Mor-ning bells are rin-ging,\ FB,Ez|FB,Ez|] w: ding ding dong, ding ding dong!
Dieser Code ergibt das folgende Notenblatt:
- Erkläre die Sprache ABC mit Blick auf den Notentext.
Weitere Informationen kannst du auf The ABC Plus Project finden.
- Welche Alphabete könnte man hier als Grundlage der Sprache wählen? Es gibt mehrere Möglichkeiten!
- Beschreibe die Regeln, nach denen die Wörter der "hallihallo"-Sprache gebildet werden.
- Eine Silbe wird aus einem Konsonanten (z. B.: d, l, n, s) und aus einem Vokal (a, e, i, o, u) gebildet. Beispiele: do, nu, la.
- Ein Vers besteht aus einer ungeraden Anzahl der gleichen Silbe, wobei der mittleren Silbe ein "p di" angehängt wird. Beispiele: da dap di da, ne ne nep di ne ne.
- Ein Lied besteht aus einem oder mehreren Versen. Nur wenn ein Lied mehrere Verse hat, darf es mit "yeah" enden, muss aber nicht.
Beim Biber-Song-Contest haben vier Biber versucht, wie Bunny Banana zu singen. Aber nur einer war erfolgreich. Entscheide, welcher Biber die Bunny-Banana-Sprache beherrscht und korrekte Wörter dieser Sprache gebildet hat.
- Biber-Max:
si sip di si su dup di su
- Biber-Tina:
da da dap di da da yeah
- Biber-Paul:
nu nu nup di nu nu di di dip di di
- Biber-Trixi:
sa sa sap di sa sa lu lu lup di lu lu yeah
Aufgabe 3: Sprachen in der Informatik
Informatik wird oft als Wissenschaft von der automatisierten Verarbeitung von Informationen bezeichnet. Informationen müssen dabei zunächst in Form von Daten formal dargestellt werden, bevor sie verarbeitet werden können. Daten können dann mit Hilfe von Computerprogrammen zu neuen Daten verarbeitet werden oder auch zu anderen Computern transportiert werden. Wenn die hierdurch erzeugten bzw. transportierten Daten gedeutet werden, entsteht neue Information. Sprachen spielen bei diesem Vorgehen eine zentrale Rolle. Dies soll am folgenden Beispiel verdeutlicht werden. Die Bildinformation muss zunächst in einer bestimmten Form dargestellt werden. Im vorliegenden Beispiel wird hierzu die Sprache PGM (siehe oben) benutzt. Diese Sprache erlaubt es, Grauwerte von Pixeln mit Hilfe von Zahlen zu beschreiben. Die Bilddaten (in einer Datei) können jetzt mit einem Programm bearbeitet werden.
void invertPGM(String inputFile, String outputFile) { String[] input = loadStrings(inputFile); String[] output = new String[input.length]; output[0] = input[0]; // PGM format output[1] = input[1]; // rows and columns output[2] = input[2]; // max. grayscale value String[] rowsAndColumns = split(input[1], ' '); int numColumns = parseInt(rowsAndColumns[0]); int numRows = parseInt(rowsAndColumns[1]); int maxGrayScale = parseInt(input[2]); for (int row = 0; row < numRows; row++) { String[] inputLine = splitTokens(input[row + 3]); printArray(inputLine); String[] outputLine = new String[inputLine.length]; for (int column = 0; column < numColumns; column++) { int inverted = maxGrayScale - parseInt(inputLine[column]); outputLine[column] = "" + inverted; } output[row + 3] = join(outputLine, " "); } saveStrings(outputFile, output); } void setup() { invertPGM("haus.pgm", "haus-invertiert.pgm"); }
Die Java-Methode invertPGM()
aus dem Processing-Sketch oben liest die Werte für die Graustufen aus einer Datei, invertiert sie durch eine Subtraktion und schreibt die Werte in eine neue Datei. Diese neuen Daten lassen sich jetzt wieder als Bild interpretieren:
- haus-invertiert.pgm
P2 5 8 15 0 0 7 0 0 0 7 7 7 0 7 7 7 7 7 3 3 3 3 3 3 10 3 10 3 3 3 3 3 3 3 10 3 10 3 3 3 3 3 3
Im Beispiel kommen also zwei Sprachen zum Einsatz. Die Sprache PGM wird zur Darstellung von Information benutzt, die Sprache Java zur Verarbeitung von Daten. Es gibt eine Vielzahl von Sprachen zur Darstellung von Information, die eine Weiterverarbeitung mit dem Computer ermöglichen:
- HTML: Sprache zur Darstellung von Internetseiten
- SVG: Sprache zur Darstellung von Vektorgrafiken
- PBM, PGM, PPM: Sprachen zur Darstellung von Pixelgrafiken
- ABC: Sprache zur Darstellung von Musik
Es gibt ebenso eine Vielzahl von Sprachen zur Beschreibung der Verarbeitung von Daten. Zu diesen Sprachen zählen alle Programmier-, Markup- oder andere Datenverarbeitungssprachen: Java, C, SQL, … Computersprachen haben viele Gemeinsamkeiten mit natürlichen Sprachen.
- Man nutzt sie, um bestimmte Sachverhalte zu beschreiben.
- Sie dienen der Kommunikation.
- Man muss bestimmte Regeln beachten, wenn man sie nutzt.
- Sprachelemente haben eine ganz bestimmte Bedeutung.
Es gibt aber auch wesentliche Unterschiede: Computersprachen müssen eindeutig und präzise sein. Bei der Verwendung von Computersprachen führen bereits kleinste Ungenauigkeiten dazu, dass der Computer den mit der Sprache beschriebenen Sachverhalt nicht mehr "versteht". Das hast du sicher schon beim Programmieren des öfteren erlebt. Bei natürlichen Sprachen kann man sich meist darauf verlassen, dass bei sprachlichen Ungenauigkeiten der Kommunikationspartner schon versteht, was man meint. Allerdings kommt es dabei auch oft zu Missverständnissen. Solche Missverständnisse gilt es bei Computersprachen durch Präzision und Eindeutigkeit zu vermeiden.