Allgemeine Grundlagen der Programmierung

Boris Schäling

Allgemeine Grundlagen der Programmierung
Boris Schäling Veröffentlicht 2010-02-03 Copyright © 2001-2010 Boris Schäling [mailto:boris@highscore.de]

Inhaltsverzeichnis
Inhalt ......................................................................................................................... iv Voraussetzungen ........................................................................................................... v 1. Programmiersprachen ................................................................................................. 1 Aufbau und Bestandteile ........................................................................................ 1 Variablen ............................................................................................................. 2 Operatoren ........................................................................................................... 3 Kontrollstrukturen ................................................................................................. 4 Funktionen ........................................................................................................... 6 Strukturen ............................................................................................................ 7 Sonstige Bestandteile ............................................................................................. 7 Sprach-Entwicklung ............................................................................................... 8 Compiler und Interpreter ........................................................................................ 8 Aufgaben ............................................................................................................. 9 2. Zahlensysteme ......................................................................................................... 11 Allgemeines ....................................................................................................... 11 Zahlensysteme und der Computer ........................................................................... 11 Das Binärsystem ................................................................................................. 12 Das Hexadezimalsystem ....................................................................................... 12 Vom Binärsystem zum Hexadezimalsystem und zurück .............................................. 13 Zahlensysteme in der Praxis .................................................................................. 13 Aufgaben ........................................................................................................... 15 3. Rechnerarchitektur ................................................................................................... 17 Allgemeines ....................................................................................................... 17 Digitale Grundschaltungen .................................................................................... 17 Der Halbaddierer ................................................................................................. 18 Der Volladdierer ................................................................................................. 19 Addition beliebiger Binärzahle ............................................................................... 19 Akku, ALU und Rechenwerk ................................................................................ 20 Prozessor ........................................................................................................... 20 Von-Neumann-Rechner ........................................................................................ 20 Aufgaben ........................................................................................................... 21 4. Programmaufbau ..................................................................................................... 22 Allgemeines ....................................................................................................... 22 Multithreading .................................................................................................... 22 Polling ............................................................................................................... 25 Multiplexing ....................................................................................................... 25 Asynchrone Ein- und Ausgabe ............................................................................... 26 Aufgaben ........................................................................................................... 26

iii

was Programmiersprachen sind. wie Programme im Allgemeinen intern organisiert und aufgebaut sein können. um einfache kleine Programme zu schreiben. wie man Zahlen vom Dezimalsystem ins Binär. Berechnungen durchzuführen. aus welchen einzelnen Bestandteilen sie bestehen und wie Sie sie einsetzen. iv . Ihnen wird erklärt. warum Computer überhaupt in der Lage sind.Inhalt Was Sie lernen werden Dieses Buch führt Sie langsam und verständlich in die Thematik der Programmierung ein. Eine Einführung in den Aufbau elektronischer Schaltungen wird Ihnen zeigen.und Hexadezimalsystem umrechnet und zurück. Abschließend werden Ihnen verschiedene Möglichkeiten vorgestellt. Außerdem werden Sie in die Geheimnisse der Zahlensysteme eingeweiht und lernen.

also beispielsweise problemlos Dateien erstellen und speichern und Anwendungen ausführen können.Voraussetzungen Was Sie wissen müssen Für das Verständnis dieses Buchs sollten Sie grundlegende Kenntnisse im Umgang mit Ihrem Betriebssystem besitzen. v .

benötigt man entsprechende Werkzeuge. Computer-Anwendungen müssen in der Lage sein. Ohne das Speichern von Informationen würden errechnete Ergebnisse andauernd verloren gehen. wenn sich Informationen auch speichern lassen. auf das anderweitige Berechnungen im Programm folgen. Je nach Operator wird diese Verknüpfung auf die eine oder andere Weise ausgeführt und führt schließlich zu einem neuen Ergebnis. letztendlich geht es schlicht und ergreifend um das Verarbeiten von Informationen. Mit diesen Operatoren können nun Variablen verknüpft werden. stellt man schnell fest.zum Beispiel ein mathematisches Programm. ob Sie es mit einem Browser. so reichen Variablen und Operatoren nicht aus.das hängt ganz davon ab. um beispielsweise später im Laufe des Programms auf vorher gespeicherte Informationen wieder zurückgreifen zu können. die den Anwender auffordert. das Zahlen addiert. Wozu braucht man Programmiersprachen? Was ist der Sinn und Zweck von Programmiersprachen? Programmiersprachen werden benötigt.Kapitel 1. Die Information in den beiden verknüpften Variablen wird vom Operator verrechnet und kann dann zum Beispiel in einer dritten Variablen gespeichert werden. Mit Variablen und Operatoren kann man schon eine ganze Menge anstellen und bereits richtige Computer-Anwendungen entwickeln . Je nach eingegebenem Passwort muss der Zugriff auf die Dateien gestattet werden oder eben nicht . Das Problem ist. Programmiersprachen Aufbau und Bestandteile Werkzeuge zur Verarbeitung von Informationen Wenn man Programmiersprachen unter die Lupe nimmt und sie miteinander vergleicht. muss dieses Zwischenergbnis für später im Programm irgendwo festgehalten werden. Würden nämlich zum Beispiel irgendwelche komplizierten Berechnungen zu einem Zwischenergebnis führen. einer Textverarbeitung. sich Informationen merken zu können. Programmiersprachen stellen diese Werkzeuge zur Verfügung. die Informationen verarbeiten können. auf die es ankommt. um Informationen zeitweilig in einem Programm zu speichern. Programme laufen also nicht mehr stupide von oben nach unten 1 . ein Passwort einzugeben. das sämtliche Programmiersprachen zur Verfügung stellen.Code kann übersprungen oder sogar wiederholt werden. sondern diese verarbeiten. die dahinterstehenden Konzepte. neue Programmiersprachen zu erlernen. Programmiersprachen bestehen aus ähnlichen Bestandteilen. Während Variablen lediglich das Speichern von Informationen ermöglichen. Computer-Anwendungen können ganz allgemein auf einen kleinsten gemeinsamen Nenner gebracht werden: Computer-Anwendungen verarbeiten Informationen. also zum Beispiel die Eingabe des Anwenders daraufhin. ist es später kein Problem mehr. Um Computer-Anwendungen zu entwickeln. Mit Kontrollstrukturen sind Verzweigungen im Code möglich . Diese Operatoren sind mehr oder weniger kryptische Zeichen. Das Werkzeug. müssen Programmiersprachen noch mehr Werkzeuge zur Verfügung stellen . ein derartiges Programm zu schreiben. Jede Programmiersprache stellt daher eine ganze Reihe vordefinierter Operatoren zur Verfügung. Es ist völlig egal. das Bedingungen überprüft und in Abhängigkeit dieser unterschiedlichen Code ausführt. denen eine ganz bestimmte Bedeutung in der Programmiersprache zugewiesen ist.natürlich bis auf Ausnahmen .denn Computer-Anwendungen sollen ja nicht einfach nur Informationen speichern. ob sie mit dem tatsächlichen Passwort übereinstimmt. Die Syntax. dass Sie in Ihrem Programm eine Entscheidung treffen müssen. Glücklicherweise bieten Programmiersprachen nun auch ein Werkzeug an. Wenn Sie jedoch eine Software schreiben möchten.nicht. Wenn man verstanden hat. sind es . Informationen können nur dann sinnvoll verarbeitet werden. Dieses Werkzeug nennt sich Kontrollstrukturen. und in Abhängigkeit des Passworts Zugriff auf geschützte Dateien ermöglicht. sind von Programmiersprache zu Programmiersprache unterschiedlich. bevor später mit dem Zwischenergebnis weitergerechnet wird. ob der Anwender das richtige Passwort kennt. dass es große Ähnlichkeiten gibt. einem Computerspiel oder einer Steuerungsanlage für Atomkraftwerke zu tun haben. Mit Kontrollstrukturen können Bedingungen überprüft werden. sprich die technischen Begriffe. warum es diese Bestandteile gibt und welchen Sinn sie haben. nennt sich Variablen. um Computer-Anwendungen zu entwickeln.

die aus tausenden Code-Zeilen bestehen. Derartige Programmiersprachen werden prozedurale Programmiersprachen genannt. Operatoren. was Sie benötigen. die in Kontrollstrukturen überprüft werden. So sind beispielsweise Computer-Anwendungen wie der Microsoft Internet Explorer oder die Programme aus Microsoft Office alle objektorientiert programmiert. um das es geht. umso schwieriger wird es. um die Komplexität in den Griff zu kriegen. Sie können nun in Ihrem Programm auf diese Variable topf jederzeit zugreifen und in ihr eine Information speichern. Die Komplexität in Programmen. welche Art von Information in der Variablen gespeichert werden kann. Operatoren und Kontrollstrukturen . Operatoren. Prozedur ist ein anderer Begriff für Funktion und bezieht sich darauf. die sind an dieser Stelle fertig. Code wird nun nicht mehr mit Hilfe von Funktionen übersichtlich gestaltet. Jede Variable stellt einen eigenen Behälter dar.eigentlich brauchen Sie schon gar nicht mehr. sondern verzweigen je nach Abhängigkeit von Bedingungen.gibt 2 . Sie können als Programmierer jederzeit so viele Variablen herbeizaubern wie Sie möchten. die aus Millionen von Code-Zeilen bestehen. In den vergangenen Jahren hat sich die Objektorientierung durchgesetzt und nochmal ein Werkzeug auf die prozeduralen Programmiersprachen draufgesetzt. einen ganz bestimmten Topf brauchen. benötigen Sie spezielle Töpfe: Variablen. wie man tatsächlich mit Variablen. Anhand der Programmiersprache Javascript wird Ihnen gezeigt. damit die Programme überhaupt noch sinnvoll weiterentwickelt werden können. In Javascript der Programmiersprache. Anwendungen. Es gibt Programmiersprachen. Der Datentyp legt fest. Die Objektorientierung stellt heute den heiligen Gral dar und ist das leistungsfähigste Instrument. wird in Programmiersprachen Funktionen genannt. var topf. In diesem Beispiel lautet der Datentyp var. um Software zu entwickeln. Variablen. in denen Sie abhängig von der Art der Information. dass Funktionen als Strukturierungsmittel nur ein Tropfen auf den heißen Stein sind. Es gibt Programmiersprachen. Variablen werden in vielen Programmiersprachen immer nach dem gleichen Schema angelegt: Zuerst geben Sie einen Datentyp an. um eine Variable anzulegen. Pascal und Basic. den der Programmierer entwickelt. Je größer die zu entwickelnden Programme werden. C++ und Java. In der Programmiersprache Javascript gehen Sie wie folgt vor. Variablen Informationstöpfe Um Informationen in Programmen speichern zu können. dass das höchste und beste Gestaltungsmittel in diesen Programmiersprachen eben die Funktionen sind. dass sie so ungeheuer komplex ist. Sie bieten Variablen. Bekannte prozedurale Programmiersprachen sind C. benötigen bessere Strukturierungsmöglichkeiten. sprich um einen Topf herbei zu zaubern. Dummerweise ist die Software-Entwicklung eine recht komplizierte Geschichte. Mit dieser einen Zeile zaubern Sie eine Variable namens topf herbei. Das Werkzeug. lässt sich kaum mehr vom menschlichen Programmiererkopf erfassen. Der Code. um Computer-Anwendungen zu entwickeln. in den Sie eine Information ablegen und sie im Laufe des Programms später wieder herausholen können. in der die vorliegenden Beispiele in diesem Buch geschrieben sind . fehlerfreien Code zu schreiben. um vollwertige Computer-Anwendungen zu entwickeln. Programmiersprachen bieten daher ein weiteres Werkzeug an. Im Folgenden lernen Sie verschiedene Bestandteile von Programmiersprachen etwas näher kennen. Java und Smalltalk. die sich dann wieder gut überblicken und verstehen lassen. die Sie speichern wollen. Funktionen gliedern den Code und machen ihn übersichtlicher. das wir momentan haben. Leider gibt es in der heutigen modernen Software-Entwicklung das Problem.Programmiersprachen ab. sondern mit Klassen und Objekten. Zu diesen Programmiersprachen zählen beispielsweise C. Bekannte objektorientierte Programmiersprachen sind C++. Anstatt also das gesamte Programm in einem Wisch zu schreiben. Kontrollstrukturen und Funktionen umgeht und was Sie sich also wirklich unter der Programmierung vorzustellen haben. lässt sich in kleine übersichtliche Häppchen zerlegen. wird es in kleine Module zerlegt. Kontrollstrukturen und Funktionen und damit alles.

welchen Datentyp Sie überhaupt angeben müssen. var i = 1. so müssen Sie der Variablen den Datentyp string geben.er legt fest. Der Nachteil ist jedoch. Jede Programmiersprache bietet Operatoren an . das am Zeilenende angegeben wird. dass Programmierfehlern vorgebeugt wird. Die meisten Programmiersprachen besitzen ähnliche Operatoren. Es spielt in Javascript für eine Variable keine Rolle. Mit dem Semikolon wird eine Anweisung beendet und abgeschlossen. dass Javascript wie auch viele andere Programmiersprachen wie C. Nichts anderes drückt der Datentyp aus . j = 2. 3 . Dem Datentyp folgt ein Variablenname. Eine Variable in Javascript kann also zum Beispiel einen Buchstaben speichern oder eine Zahl oder auch ein Wort. der Datentyp int gegeben werden. und für eine Zahl wiederum eine andere Art von Topf. und darin Informationen speichern. müssen jedoch in C. der Buchstaben speichern kann. C++ ist eine streng typisierte Programmiersprache. int zahlentopf. dass Sie beim Anlegen von Variablen sich darüber im Klaren sein müssen. C++ und Java Groß. also zum Beispiel eine Berechnung durchführen und zwei Zahlen addieren. string worttopf. Während es in der Programmiersprache Javascript wie eben gesehen nur den einen Datentypen var gibt. dann kennen Sie eigentlich auch schon fast alle Operatoren aus Java. die Zahlen speichern können soll. Davon hängt nämlich ab. wie Sie möchten. Das heißt. versehentlich in der oben angelegten Variablen zahlentopf ein Wort zu speichern . der eben Zahlen speichern kann. Im obigen Beispiel hat die Variable einfach den Namen topf erhalten. Variablen müssen irgendwelche Namen erhalten.ohne Operatoren können keine Informationen verarbeitet werden. Operatoren Informationen verknüpfen und verarbeiten Wie man Variablen anlegt wissen Sie nun. damit man auf sie jederzeit in einem Programm zugreifen und sie identifizieren kann. Es ist in C++ nicht möglich. Schließlich soll Ihre Anwendung Informationen verarbeiten. welche Art von Information in einer Variablen gespeichert werden kann. Variablen haben keinen allgemeinen Datentyp wie in Javascript und können jede Art von Information speichern.das funktioniert aufgrund des Datentypen nicht. muss beispielsweise in C++ einer Variablen. Während Javascript es mit dem Semikolon nicht ganz so genau nimmt und auch mal darüber hinwegsieht. wie die Operatoren in Javascript funktionieren.und Kleinschreibung berücksichtigt. aber wie werden sie addiert? Informationsverarbeitende Vorgänge wie zum Beispiel die Addition von Zahlen sind durch Operatoren möglich. k. C++ und Java Semikolons unbedingt gesetzt werden. C und C++. Beachten Sie. Benötigen Sie in C++ jedoch eine Variable. welche Art von Information Sie in ihr speichern möchten. sondern sie besitzen einen ganz konkreten Datentyp und können daher auch nur eine ganz bestimmte Art von Information speichern. Ebenfalls typisch für viele Programmiersprachen ist das Semikolon. Mit der Speicherung von Informationen allein ist es jedoch nicht getan.Programmiersprachen es hingegen nur den einen Datentyp var. In einer anderen Programmiersprache bräuchten Sie eventuell für einen Buchstaben auch tatsächlich einen Topf. Sie können mit Variablen Zahlen speichern. wenn es fehlt. Wenn Sie beispielsweise wissen. die ein Wort speichern können soll. Im Folgenden sehen Sie ein paar Operatoren der Programmiersprache Javascript im Einsatz. welche Art von Information Sie später speichern möchten. Sie können nun jederzeit so viele Variablen anlegen. die jeweils die gleiche Bedeutung haben. Der Vorteil der streng typisierten Programmiersprachen ist.

wie sie durch die Präzedenz-Tabelle vorgegeben ist. Diese Präzedenz-Tabellen sind insofern entscheidend. j. !=. Der Operator mit der höchsten Priorität ist für gewöhnlich die runde Klammer (). als dass sie klar vorgeben. Bitweise Operatoren wie &. dass eine Klammerung immer bevorzugt und zu allererst ausgeführt wird. Java. k = (i + j) * 2.die sogenannten Vergleichsoperatoren wie ==. Wenn Sie jedoch beispielsweise einen Passwortschutz entwickeln möchten. So gibt es beispielsweise eine Gruppe arithmetischer Operatoren. k = i > j. * und / ist. Sinnvollerweise sehen Programmiersprachen wie Javascript. Auch folgende drei Code-Beispiele sind in der Programmiersprache Javascript geschrieben. Kontrollstrukturen Abhängig von Bedingungen unterschiedlichen Code ausführen Mit Hilfe von Variablen und Operatoren können Sie nun Informationen wie beispielsweise Zahlen verarbeiten."). Verzweigungen des Programmflusses sind mit Kontrollstrukturen möglich. So kann beispielsweise die Präzedenz-Tabelle einer Programmiersprache festlegen. bevor die Summe dann mit einem anderen Wert multipliziert wird. So wie in der Mathematik kann also durch geeignete Klammerung auch eine Addition zuerst ausgeführt werden. in welcher Reihenfolge Operatoren ausgeführt werden. Neben diesen Operatoren besitzt jede Programmiersprache eine Präzedenz-Tabelle. j. C und C++ genau dies auch vor. Operatoren können nach ihrer Funktion gegliedert und verschiedenen Gruppen zugeordnet werden. Der Computer arbeitet Ihre Anweisungen im Programm von oben nach unten ab. die der Computer besitzt . deren Sinn und Zweck die Ausführung von Grundrechenarten mit +. Das bedeutet.ermöglichen wiederum den Vergleich von Werten. <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var passwort = "abc". muss abhängig von der Eingabe des Anwenders entweder Zugang zur gesicherten Ressource gewährt werden oder aber nicht. dass der * eine höhere Priorität besitzt als das +. Mit diesen Operatoren kann man in Variablen die kleinsten Informationseinheiten bearbeiten. Das heißt auch.nämlich Bits.Programmiersprachen k k k k k k i = i + = i = i * = i / += j. j. || und ! Wahrheitswerte verrechen. << j. -. var eingabe = prompt("Geben Sie ein Passwort ein. Eine andere Gruppe von Operatoren . und zwar jede Anweisung genau einmal. wenn mehrere in einer einzigen Code-Anweisung verwendet werden. j. 4 . in der jedem Operator per Definition einfach eine Priorität zugewiesen ist. So wie arithmetische Operatoren Zahlen verrechnen können. > und < . können logische Operatoren wie &&. Diese Verarbeitung erfolgt bis dato aber nur linear. dass sich mit den Klammern die Ausführungsreihenfolge von Operatoren. Dies bedeutet nichts anderes als die Regel "Punkt vor Strich" aus der Mathematik: Eine Multiplikation wird gegenüber einer Addition bevorzugt ausgeführt. -= i. ~ und ^ arbeiten sehr maschinennah. ändern lässt. |.

<html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var passwort = "abc". Endlosschleifen machen sich dadurch bemerkbar. dass das Programm scheinbar stehen bleibt und auf Benutzereingaben nicht mehr reagiert. Ist die Bedingung falsch. } else { alert("Passwort falsch!"). die unendlich oft wiederholt wird. Eine Endlosschleife ist eine Schleife. hinter dem if ausgeführt. und zwar solange eine zu überprüfende Bedingung wahr ist. der Endlosschleife genannt wird. Neben der while-Schleife bieten Programmiersprachen auch andere Schleifen wie die do-while-Schleife oder die for-Schleife an."). Bitte nochmal probieren."). weil die zu überprüfende Bedingung immer wahr bleibt. der durch die geschweiften Klammern definiert wird. wird der Anweisungsblock hinter dem else ausgeführt. setzt die Programmausführung hinter der if-elseAnweisung fort. Im Zusammenhang mit Schleifen taucht oft ein Programmierfehler auf. wird der Anweisungsblock. var eingabe = prompt("Geben Sie ein Passwort ein. Ist der jeweilige Anweisungsblock ausgeführt worden. if (eingabe == "ende") { break. } </script> </head> <body> </body> </html> Die if-else-Anweisung ermöglicht eine einfache Überprüfung einer Bedingung. <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var passwort = "abc".Programmiersprachen if (eingabe == passwort) { alert("Passwort ok!"). Bitte nochmal probieren."). Alle diese Schleifen arbeiten jedoch ähnlich: Sie führen einen Anweisungsblock wiederholt aus. var eingabe = prompt("Geben Sie ein Passwort ein."). } } </script> 5 . while (eingabe != passwort) { eingabe = prompt("Das Passwort ist falsch. Ist die Bedingung wahr. } </script> </head> <body> </body> </html> Die while-Anweisung ist eine sogenannte Schleife. while (eingabe != passwort) { eingabe = prompt("Das Passwort ist falsch.

Im Funktionsrumpf . Ein derart aufrufbarer Anweisungsblock wird Funktion genannt. Wenn man auf eine mit function definierte Funktion zugreifen möchte. <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> function hallo() { alert("Hallo!"). Zusammen mit den darin enthaltenen Anweisungen bilden sie einen Anweisungsblock.also im Anweisungsblock werden nun alle Anweisungen definiert. Man gibt hierzu den Namen der Funktion an und dahinter in Klammern eventuell zu übergebene Parameter.Programmiersprachen </head> <body> </body> </html> Über ein zusätzliches Schlüsselwort wie break ist es darüberhinaus möglich. weil die zu überprüfende Bedingung nicht mehr wahr ist. Dadurch wird er ausgeführt. Die Schleife endet dann also nicht. der beispielsweise dem Schlüsselwort if folgen kann. Schleifen vorzeitig zu verlassen. <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> 6 . Ansonsten bleiben die Klammern leer. wie Funktionen in Javascript aussehen. wird beim Aufruf auch keiner zwischen den Klammern angegeben. und die intern in der Funktion verarbeitet werden. irgendwelche Parameter an diese Funktion weiterzureichen. Parameter sind Eingabewerte. um hallo eindeutig als Funktionsaufruf zu identifizieren und nicht als Variable. die ausgeführt werden sollen. Anweisungsblöcken lassen sich auch Namen zuordnen. </script> </head> <body> </body> </html> Obiges Code-Beispiel zeigt. Hinter dem Schlüsselwort function folgt der Name der Funktion. ruft man sie über den Funktionsnamen auf. wenn die Funktion aufgerufen wird. C. Die Funktion im obigen Beispiel zeigt einfach eine Meldung am Bildschirm an. so dass es nicht nötig ist. Hinter dem Namen werden gegebenfalls in Klammern Parameter angegeben. Die Klammern sind dennoch wichtig und dürfen nicht weggelassen werden. Ein Anweisungsblock ist in den Programmiersprachen Javascript. Nachdem die Funktion hallo keine Parameter erwartet. Über diesen Namen kann ein Anweisungsblock aufgerufen werden. Funktionen Jederzeit aufrufbare Anweisungsblöcke Den Begriff Anweisungsblock haben Sie bereits im Zusammenhang mit Kontrollstrukturen gehört. wenn man sie aufruft. C++ und Java durch die geschweiften Klammern { und } begrenzt. } hallo(). Nicht jede Funktion benötigt Eingabewerte. die man an eine Funktion weitergeben kann. sondern sie endet sofort. wenn die Code-Ausführung auf break trifft.

Einmal erstellt können Sie wie gewohnt von diesem neuen Datentyp eine Variable anlegen. Wenn Sie sich obiges Beispiel genau ansehen. Im obigen Beispiel ist der Name der Variablen MeineAdresse. Diese Funktion ist eine in Javascript eingebaute Funktion und steht dem Programmierer in Javascript automatisch zur Verfügung. die es noch nicht gibt. Durch das Erstellen einer Struktur ist es möglich. die beim Aufruf der Funktion angegeben werden. </script> </head> <body> </body> </html> Im obigen Javascript-Code wird nun eine Funktion definiert. a und b stellen letztendlich nur Platzhalter dar für die Werte. Durch den Aufruf der Funktion add und die Übergabe der beiden Variablen wird innerhalb der Funktion die Summe der übergebenen Werte gebildet. was als Parameter der Funktion alert übergeben wurde . können Sie dank Strukturen nun diesen Datentyp selber erstellen. } var i = 1. adresse MeineAdresse.im obigen Fall also das Ergebnis der Addition. Und diese Variable kann nun Informationen vom Typ adresse speichern. so dass folgendes Code-Beispiel der Programmiersprache C++ entnommen ist. }. struct adresse { string Vorname. string Strasse. string Nachname. dass unter anderem eine Funktion alert aufgerufen wird. j = 2. das jeweils das anzeigt. Strukturen Datenblöcke So wie sich mehrere Anweisungen zu Funktionen zusammenpacken lassen ist es auch möglich. j). b) { alert(a + b). Das heißt.Programmiersprachen function add(a. die zwei Parameter a und b erwartet. mehrere Variablen zu einer Struktur zusammenzustellen. Sonstige Bestandteile Von Klassen und Objekten Die in diesem Kapitel bekanntgewordenen Bestandteile einer Programmiersprache finden Sie in fast jeder Sprache. bei Aufruf der Funktion add müssen in Klammern auch zwei Parameter übergeben werden. stellen Sie fest. Diese Möglichkeit besteht jedoch in der Programmiersprache Javascript nicht. string Ort. Im Beispiel sind das die Variablen i und j. add(i. Nachdem C++ nicht von Haus aus einen Datentyp für die Speicherung von Adressen zur Verfügung stellt. Datentypen in seinem Programm zu verwenden. Mit alert öffnet sich ein kleines Fenster auf dem Bildschirm. int PLZ. Darüberhinaus bieten Programmiersprachen teilweise Elemente wie Klassen und 7 .

In derartigen Programmiersprachen wird mit Objekten gearbeitet. die eine Programmentwicklung ermöglichen. Während Sie und ich diesen Quellcode recht gut verstehen. so dass auch hier sicherlich noch nicht aller Tage Abend ist. die näher an der Problembeschreibung orientiert ist. wurde dann um objektorientierte Elemente zu C++ ergänzt. ist Java. Wer Java benutzen will. eine Konkurrenzsprache zu Javascript. MS-DOS. die stark von Microsoft unterstützt und weiterentwickelt wird und daher vorrangig auf den Betriebssystemen von Microsoft Einsatz findet. C trat hierbei zeitlich zuerst auf. Es handelt sich hierbei um objektorientierte Programmiersprachen. Basic selbst ist ebenfalls wie C eine recht alte Sprache. sondern auf eigenständige Weise die Programmiersprache Java verändert zu haben. in denen meist Vertreter führender Softwarefirmen sitzen. muss die Lizenzbestimmungen zu Java akzeptieren. Die Entwicklung der Programmiersprache Java Jahre später wurde sehr eng an C++ angelehnt. als die endgültige Lösung aller Probleme in der Software-Entwicklung. Zu diesen Programmiersprachen gehören beispielsweise Smalltalk. Die prominenten Gründerväter der Programmiersprachen sprechen innerhalb der Weiterentwicklung und Standardisierungsgremien natürlich häufig auch ein paar wichtige Worte mit. was spätestens seit dem Internet kein Problem mehr darstellt. so muss man dennoch erkennen. dass sie kein Allheilmittel ist. Die Standardisierung der Weiterentwicklungen übernehmen internationale Gremien. die durch fehlende Klassen. die auch unter dem Vorgänger von Windows. Dennoch hat auch die Objektorientierung etwas von ihrem Glanz verloren. Sprach-Entwicklung Von proprietären Sprachen und offenen Standards Die Entwicklung der Programmiersprachen verläuft großenteils sehr verflochten. Auch VBScript.Programmiersprachen Objekte an. Der Quellcode ist der für den Menschen lesbare Programmablauf. Vor dem ersten Release wurde die Sprache dann an Java angepaßt . sondern ebenfalls durchaus verbesserungswürdig ist. Objektorientierte Programmiersprachen stellen derzeit den heiligen Graal unter den Programmiersprachen dar. C++ und Java.sowohl von ihrer Syntax als dann auch vom Namen her. Eine unabhängige Weiterentwicklung der Programmiersprache ist hierbei verboten. Seit Januar 2001 wird daher Java von Microsoft nicht mehr unterstützt.und ObjektUnterstützung zu unübersichtlich werden würden. Im Januar 2001 endete ein mehrjähriger Gerichtsprozess zwischen Sun und Microsoft. Heutzutage ist Basic in all seinen Dialekten vor allem eine Programmiersprache. ist sehr eng mit Visual Basic verwandt. Die meisten großen und erfolgreichen Anwendungen wie zum Beispiel der Internet Explorer von Microsoft oder sämtliche Programme aus Microsoft Office sind objektorientiert programmiert. 8 . Java ist eine proprietäre Sprache und gehört der Firma Sun Microsystems. Die wohl bekannteste Programmiersprache. C++ und Java sind sehr ähnlich gestrickt. Die allermeisten Sprachen gehören der Allgemeinheit. die einer Firma gehört und nicht von internationalen Gremien weiterentwickelt wird. in dem Sun Microsoft vorwarf. Die vor allem im Bereich der Windows-Betriebssysteme verbreitete Sprache Visual Basic stammt von Basic ab. Sie sind das leistungsfähigste Instrument. Sie werden von Programmierern weltweit weiterentwickelt. sich nicht an die Lizenzbestimmungen gehalten zu haben. kann der Computer damit überhaupt nichts anfangen. um es etwas salopp auszudrücken. mit dem heutzutage Software entwickelt werden kann. Die heute sehr verbreiteten Programmiersprachen C. Javascript wurde gleichzeitig zu Java entwickelt und hieß ursprünglich ActiveScript. Selbstverständlich entwickeln sich auch Programmiersprachen und Managementmethoden in der Software-Entwicklung weiter. Durch geringere Abstraktion vom Problem zum Lösungs-Programm lassen sich vor allem größere Anwendungen einfacher entwickeln. Galt sie noch vor Jahren als das Nonplusultra. Compiler und Interpreter Vom Quellcode zur Programmausführung Wenn Sie wie in den obigen Beispielen kleine Programme schreiben. arbeiten Sie als Programmierer immer mit dem Quellcode. als qbasic vertreten war.

Dies funktioniert nur deswegen. die Compiler heissen. was der PC benötigt. Und das ist das einzige. der C++-Quellcode in Maschinencode für den Intel-Chip umwandeln kann. Diese virtuelle Maschine ist letztendlich ein Computer-Programm.bis zwanzigfache schneller . Compiler müssen also auf der einen Seite die Sprache des Quellcodes beherrschen. Wenn Ihr Quellcode in der Programmiersprache C++ geschrieben ist und Sie das Programm beispielsweise auf einem Computer mit dem Intel-Pentium-Chip ausführen lassen möchten.immer vorausgesetzt. Hier wird nirgendwo Maschinencode erstellt oder gar für spätere weitere Programmausführungen gespeichert. weil das Programm. die mit Compilern in Maschinencode umgewandelt werden. Hier fällt eine Analyse weg. da in der Datei bereits der vollständige Maschinencode vorliegt. neu vom Programm analysiert werden. dass der Computer Ihr Programm ausführt. der C++ in Maschinencode für den PowerPC umwandelt.Programmiersprachen Das ist insofern von Bedeutung. Java-Programme tauschen sogesehen Ausführungsgeschwindigkeit gegen Portabilität ein. der Ihren Quellcode analysiert. Der PC versteht Ihren Quellcode scheinbar automatisch. stellen Sie fest. das den kompilierten und virtuellen Maschinencode interpretiert. können Sie normalerweise ohne Probleme sämtliche Javascript-Beispiele in Ihrem Browser ausführen. brauchen Sie einen Compiler. dass Sie nirgendwo Ihren Quellcode in Maschinencode umwandeln. die bereits als Maschinencode vorliegen. die interpretiert werden.ganz grob über den Daumen gepeilt. das Ihren Quellcode ausführt. Wird das Passwort dreimal hintereinander falsch eingegeben. Wenn Sie Javascript-Beispiele ausführen. was Sie eigentlich in Ihrem Quellcode machen wollen. Durch die Umwandlung von Java-Quellcode in virtuellen Maschinencode und durch die Interpretierung des virtuellen Maschinencodes kann eine höhere Ausführungsgeschwindigkeit erreicht werden als bei rein interpretierenden Sprachen. Der Computer versteht aber nur Maschinencode. in der Ausführung langsamer als Programme. zuerst einen Interpreter startet. jedoch nicht für ein ganz bestimmtes Zielsystem wie einen Intel-Pentium-Chip oder einen PowerPC-Chip. als dass Sie ja möchten. das den Anwender zur Eingabe eines Passworts auffordert. Zum Umwandeln von Quellcode in Maschinencode werden Programme verwendet.jedesmal sofort starten können. Man spricht auch von nativen Anwendungen. irgendjemand muss den Quellcode des Programms in Maschinencode umwandeln. die Sie . Quellcodes. sondern für eine virtuelle Maschine. und führt die entsprechenden Funktionen aus. Je nach verwendeter Programmiersprache und Computersystem brauchen Sie einen anderen Compiler. Sie brauchen den Quellcode nicht mehr. 9 . Entwickeln Sie ein Programm in Javascript. Nach dieser Analyse weiß dann das Programm. Die Ausführungsgeschwindigkeiten von rein kompilierten Programmiersprachen im Vergleich zu Java sind dennoch um das zehn. Dadurch.beispielsweise durch Doppelklick wie in Windows . Danach liegt eine ausführbare Datei vor. brauchen Sie einen Compiler. Da in den modernen Browsern heutzutage ein Javascript-Interpreter integriert ist. Aufgaben Übung macht den Meister 1. Während beispielsweise C++-Programme entweder für einen Intel-Pentium-Chip oder aber für einen PowerPC-Chip kompiliert werden. Neben Compilern gibt es noch sogenannte Interpreter. soll keine weitere Eingabeaufforderung mehr erscheinen. Das heißt. laufen Java-Programme auf allen Computer-Systemen . Soll Ihr C++-Quellcode dagegeben auf einem Computer mit einem PowerPC-Chip laufen. wenn er ausgeführt werden soll. Durch die Kompilierung des Quellcodes für eine virtuelle Maschine ist Java aber eine Sprache mit größerer Portabilität. dass jedesmal eine neue Analyse notwendig ist. Die Programmiersprache Java nimmt hier eine Sonderstellung ein. Quellcode wie beispielsweise der in Javascript muss jedesmal. müssen diese Umwandlung nur einmal vornehmen. auf der anderen Seite auch den Maschinencode des Zielsystems. der Computer kann den Maschinencode sofort ausführen. ein Programm für die Interpretierung des virtuellen Maschinencodes existiert. Quellcode in Java wird kompiliert. sind Programme.

das den Anwender auffordert. 10 . Dabei soll für jede der vier Rechenarten eine andere Funktion aufgerufen werden. 4. Entwickeln Sie ein Programm in Javascript. subtrahiert. zwei Zahlen einzugeben. 3. Addieren Sie die beiden Zahlen und geben Sie das Ergebnis auf den Bildschirm aus. / und *. Das Ergebnis der jeweiligen Rechenart soll auf den Bildschirm ausgegeben werden. Entwickeln Sie ein Programm in Javascript. -. die die jeweilige Rechenoperation durchführt und dann das Ergebnis auf den Bildschirm ausgibt. zwei Zahlen einzugeben und danach eines der vier Zeichen +.Programmiersprachen 2. Entwickeln Sie den Javascript-Taschenrechner der obigen Aufgabe diesmal unter Verwendung von Funktionen. das den Anwender auffordert. dividiert oder multipliziert werden. Je nach eingegebenem Zeichen sollen die beiden Zahlen addiert. Entwickeln Sie keine eigenen Funktionen zur Lösung der Aufgabe.

brauchen Sie natürlich nicht jedesmal die Berechnung ausführen.und Hexadezimalsystem aussehen und gebildet werden. und die Handhabung von Hexadezimalzahlen fällt doch wesentlich einfacher als die von Binärzahlen. Wenn Sie dem Computer irgendwas direkt sagen wollen. dass moderne Programmiersprachen normalerweise ohne Probleme die Angabe von Dezimalzahlen ermöglichen. wie Zahlen im Binär. Oder können Sie sofort sagen. 2. Zahlensysteme Allgemeines Eigenheiten von Zahlensystemen Für den Nicht-Programmierer ist oft gar nicht bewußt. 8 und 9. Während Sie im Alltag mit dem Dezimalsystem gut zurechtkommen. was die Hexadezimalzahl FA oder die Binärzahl 10011 für Werte darstellen? Zahlensysteme und der Computer Computer kennen keine Buchstaben Wieso müssen Sie sich eigentlich mit Zahlensystemen beschäftigen? Sie sind doch Programmierer und kein Mathematiker. Die Stelle 0 wird also zu 100. Weitere Stellen würden mit linear aufsteigenden Zahlen beschrieben werden. sich mit Binär. Wenn Sie eine Zahl wie 456 im Dezimalsystem sehen. Die Stelle links daneben. auf der die Ziffer 5 steht. An der Stelle 0 steht im Beispiel die Ziffer 6. Denn vom Binärsystem ins Hexadezimalsystem sind es nur ein paar Schritte. dass es verschiedene Zahlensysteme gibt und dass das im Alltag verwendete Dezimalsystem nur eines von unendlich vielen ist. Das jeweilige Ergebnis wird mit der Ziffer an der jeweiligen Stelle multipliziert. 6. verwenden Programmierer lieber das Hexadezimalsystem. die Stelle 1 wird zu 101 und die Stelle 2 wird zu 102. 1. Die gesamte Rechnung heisst also 6*100+5*101+4*102. Dennoch kann es in vielen Fällen hilfreich sein zu wissen. welche Basiszahl mit der Stelle einer Ziffer potenziert wird. Das ergibt 6*1+5*10+4*100. Nachdem das Binärsystem für menschliche Belange äußerst unangenehm zu handhaben ist. im Dezimalsystem zu arbeiten. 3. 7. wenn Sie Zahlen aus anderen Zahlensystemen vor sich haben. ist die 1. Computer sind wahre Zahlenakrobate. was die Zahl bedeutet. Sie sind also als Programmierer grundsätzlich nicht gezwungen. dass der Computer zwar grundsätzlich Zahlen versteht. dann müssen Sie sich in Zahlen ausdrücken. wenn an irgendeiner Stelle im Programm Zahlen angegeben werden müssen. Beachten Sie. Zahlensysteme werden über Zeichenvorrat und Stellenwert definiert. Wie Sie bereits wissen. 4.oder Hexadezimalzahlen herumzuschlagen. Der Zeichenvorrat repräsentiert die zugelassenen Zeichen im Zahlensystem. in anderen Zahlensystemen zu arbeiten als Sie. Und damit es nicht zu einfach wird. Die Stelle ganz links ist die 2. die ausschließlich mit Zahlen arbeitet. 11 . Der Wert der drei Ziffern 456 wird im Dezimalsystem also genaugenommen wie folgt berechnet: Die Stelle ganz rechts ist die 0. Die Basiszahl im Dezimalsystem ist 10. weil Sie es gewohnt sind. Das sind im Dezimalsystem die Ziffern 0.Kapitel 2. es aber vorzieht. Sie wissen sofort. an der Stelle 1 die Ziffer 5 und an der Stelle 2 die Ziffer 4. Das nächste Problem ist. verwendet Ihr Computer am liebsten das Binärsystem. Leider haben Sie es als Programmierer mit einer Maschine zu tun. 5. was wiederum 6+50+400 ergibt und zur Lösung 456 führt. Der Stellenwert legt fest. lassen sich Zahlen im Binärsystem leider nicht allzu einfach in Zahlen des Dezimalsystems umwandeln. Sie müssen sich aber die Regeln zum Berechnen des Wertes einer Zahl vergegenwärtigen. wird mit der Stellenbeschreibung jeweils die Basiszahl potenziert.

haben Sie alle Informationen. Beispiel gefällig? 19/2=9 Rest 1.nämlich nur zwei -. Sehen Sie sich zum Beispiel die Binärzahl 10011 ein. Sie dividieren die Dezimalzahl durch den Stellenwert. Während das Binärsystem im Gegensatz zum Dezimalsystem weniger Informationszustände an einer Stelle speichern kann . Erst ab Zahlen oberhalb des Dezimalwerts 15. bis Sie bei Null angelangt sind. Die Umrechnung einer Dezimalzahl in eine Hexadezimalzahl erfolgt nach demselben Schema wie bei Binärzahlen. ins Dezimalsystem aus? Dazu benötigen Sie neben dem Zeichenvorrat noch den Stellenwert. können im Hexadezimalsystem mehr Informationszustände gespeichert werden . An der Stelle 0 steht das Zeichen A. was wiederum 1+2+0+0+16 ergibt. was als Ergebnis 250 ergibt.nämlich 16. 8. und notieren Sie den Restwert. also 16. wenn Sie die erhaltenen Restwerte in eine Reihe stellen. 5. Nachdem das Dezimalsystem keine Buchstaben verwendet. In der richtigen Reihenfolge nämlich von rechts nach links . werden die Zeichen aus dem Hexadezimalsystem einfach durch die Werte aus dem Dezimalsystem ersetzt. 2/2=1 Rest 0. Wenn Sie nun erfahren. 2. Das Hexadezimalsystem Zahlen und ein paar Buchstaben Im Hexadezimalsystem steht folgender Zeichenvorrat zur Verfügung: 0. der im Hexadezimalsystem dem Zeichen F entspricht. Und schon können Sie loslegen. 7. Die ersten zehn Zeichen sind mit denen im Dezimalsystem identisch. B. An der Stelle 0 steht eine 1. 9. A. 15/16=0 Rest 15. Die Binärzahl 10011 stellt im Dezimalsystem den Wert 19 dar. D. Dies wiederholt sich. Nullen und Einser sind die einzigen beiden gültigen Zeichen im Binärsystem. 4. Der ist im Hexadezimalsystem 16. 1. an der Stelle 1 ebenfalls eine 1. Im letzten Schritt wandeln Sie dann gegebenenfalls zweistellige Restwerte in die Buchstaben aus dem Zeichenvorrat des Hexadezimalsystems um. dass der Stellenwert im Binärsystem 2 ist.Zahlensysteme Das Binärsystem Nullen und Einser Vielleicht kennen Sie den Spruch.ergibt dies die Hexadezimalzahl FA. Das ergibt 1*1+1*2+0*4+0*8+1*16. Die Berechnung sieht also wie folgt aus: A*160+F*161. 6. wird eine zweite Stelle benötigt. Stellen werden immer von rechts nach links beginnend bei Null hochgezählt. Daraus folgt 10*1+15*16. Wie sieht nun die Umwandlung einer Hexadezimalzahl. Der Zeichenvorrat des Binärsystems besteht also aus 0 und 1. 12 . an der Stelle 1 das Zeichen F. 1/2=0 Rest 1. Irgendwann gelangen Sie bei Null an. Die Lösung lautet also 19. nämlich 2. Für den Dezimalwert 10 benötigen Sie im Dezimalsystem aber zwei Stellen. Sie erhalten nun die Binärzahl. 250/16=15 Rest 10. Dann wiederholen Sie den Schritt. sieht die Berechnung wie folgt aus: 1*20+1*21+0*22+0*23+1*24. E und F. 3. an der Stelle 2 eine 0. Wie gelangt man nun von der Dezimalzahl 19 zur entsprechenden Binärdarstellung? Dividieren Sie die Dezimalzahl durch den Stellenwert des Binärsystems. C. Die neue Rechnung heißt also: 10*160+15*161. Da der Stellenwert im Binärsystem 2 ist. Im Hexadezimalsystem können Sie diesen Wert an einer Stelle durch das Zeichen A ausdrücken. 4/2=2 Rest 0. zum Beispiel FA. indem Sie das Ergebnis der eben durchgeführten Berechnung wiederum durch 16 dividieren. Divideren Sie das Ergebnis wiederum durch 2 und notieren Sie wieder den Restwert. Schreiben Sie nun die Restwerte von rechts nach links in eine Reihe und Sie erhalten 10011. an der Stelle 3 auch eine 0 und an der Stelle 4 wiederum eine 1. dass Computer nur Nullen und Einsen kennen. um den Wert von Binärzahlen zu errechnen. 9/2=4 Rest 1. und notieren den Rest. die Sie brauchen. 15 entspricht F. 10 entspricht A.

Nachdem die Hexadezimalzahl EA aus zwei Stellen besteht. Per Umrechnung gelangen Sie zur Darstellung 1110. Per Umrechnung ins Dezimalsystem gelangen Sie zum Wert 10. Die Bedeutung in der Praxis ist jedoch sehr gering. An der Stelle ganz links steht das Zeichen E. was dem Dezimalwert 10 entspricht. Einer Variablen i vom Typ int wird die Hexadezimalzahl 14 zugewiesen. Zahlensysteme in der Praxis Beim Zahlarzt in der Praxis Standardmäßig werden Zahlen. dass Sie genau zwei Stellen brauchen. die Binärzahl 0001 entspricht im Hexadezimalsystem 1. Für die nächsthöhere Zahl brauchen Sie sowohl im Binärsystem als auch im Hexadezimalsystem eine neue Stelle. Nachdem jeweils vier Stellen im Binärsystem eine Stelle im Hexadezimalsystem darstellen. Wenn Sie sich nun die Binärzahl 11101010 ansehen. 13 . Der Dezimalwert 10 sieht in Binärform wie folgt aus: 1010. Das zweite Zeichen ist A.Zahlensysteme Vom Binärsystem zum Hexadezimalsystem und zurück Zahlenzauber Sie kennen nun das Binärsystem und das Hexadezimalsystem. 0011 entspricht 3 bis hin zu 1110 entspricht E und 1111 entspricht F. 4. Damit steht das erste Zeichen schon mal fest. 0010 entspricht 2. Es hat ähnliche Vorteile wie das Hexadezimalsystem: Jeweils drei Binärstellen können in eine Oktalstelle umgewandet werden (beim Hexadezimalsystem vier Binärstellen in eine Hexadezimalstelle). als Dezimalzahlen geschrieben. fällt auch die Umrechnung einer Hexadezimalzahl ins Binärsystem nicht mehr schwer. Obiges Code-Beispiel ist in der Programmiersprache C geschrieben. 6 und 7 und den Stellenwert 8. in das sich Binärzahlen besonders leicht transferieren lassen. 1. Wenn Sie sich erinnern. die Sie in Quellcodes zur Entwicklung von Computer-Programmen angeben. dass jeweils vier Stellen im Binärsystem eine Stelle im Hexadezimalsystem darstellen. int i = 014. Die nächsten vier Binärziffern sind 1010. Sie wandeln einfach jede Stelle der Hexadezimalzahl in vier Stellen einer Binärzahl um. wird in C das Kürzel 0x dem Wert vorangestellt. was dem Dezimalwert 14 entspricht. Das Oktalsystem besitzt den Zeichenvorrat 0. dass die Hexadezimalzahl EA in Binärform 11101010 lautet. Schauen wir uns die ersten vier Stellen an: 1110. 14 ist im Hexadezimalsystem E. dass es sich um eine Hexadezimalzahl handelt. Binärzahlen selber werden seltener unterstützt. int i = 0x14. Inwiefern läßt sich aber die Binärzahl 11101010 besonders leicht in die Hexadezimalzahl EA umwandeln? Der Trick ist. 10 entspricht im Hexadezimalsystem dem Zeichen A. Damit ist die Umrechnung komplett: Die Binärzahl 11101010 entspricht im Hexadezimalsystem EA. habe ich Ihnen das Hexadezimalsystem verkauft als das System. Das heißt. da Sie den Wert sofort erkennen). Damit ist klar. Damit der Compiler erkennt. Über spezielle Kennzeichnungen können Sie jedoch auch Hexadezimalzahlen angeben. Per Umrechnung ins Dezimalsystem kommen Sie zum Wert 14 (diese Umrechnungen brauchen Sie mit ein wenig Erfahrung nicht mehr durchführen. wissen Sie bereits. Programmiersprachen wie C stellen noch eine andere Notation zur Verfügung. 3. Durch das Voranstellen von 0 wird die Zahl im Oktalsystem notiert. muss die entsprechende Binärzahl aus acht Stellen bestehen. besteht diese aus acht Stellen. nachdem die Schreibweise aus Nullen und Einsen sehr fehleranfällig ist und mit Hexadezimalzahlen eine bessere Lösung zur Verfügung steht. Nachdem Sie nun den Trick raushaben. 2. 5.

Die zwei Variablen werden mit dem &-Operator verknüpft. Daher wird im Ergebnis an der Stelle 0 eine 1 stehen. alert(i | j). Sind beide Bits gesetzt . <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var i = 0xC. Die Stelle 0 im Ergebnis wird also auf 0 gesetzt. wenn mindestens ein Bit in einem Operand gesetzt ist. Die Stelle 1 im Ergebnis wird also auf 0 gesetzt. j = 0x5. also wird im Ergebnis an der Stelle 3 eine 0 stehen. Bits sind hierbei Informationen. genannt ODER-Operator. Hier gilt die Regel: Im Ergebnis ist dann ein Bit gesetzt. Daher wird die Stelle 2 im Ergebnis auf 1 gesetzt. gesetzt oder nicht gesetzt. </script> </head> <body> </body> </html> Ein anderer bitweiser Operator ist |.ist also an beiden Stellen die 1 vorhanden . Dieser bitweise Operator arbeitet wie folgt: Bits an den gleichen Stellen werden miteinander verglichen. in der Variablen j ebenfalls. in der Variablen j ebenfalls. Die Stelle 1 im Ergebnis trägt daher auch eine 0. Im Gegensatz zum &Operator müssen nicht beide Bits gesetzt sein. alert(i & j). 1 oder 0. Sie müssen nun lediglich Bits an den jeweils gleichen Stellen der beiden Variablen vergleichen: An der Stelle 0 der Variablen i befindet sich eine 0. Das Ergebnis des bitweisen Operators sieht also wie folgt aus: 0100. in der Variablen j auch. die im Hexadezimalsystem D und im Dezimalsystem 13 entspricht. An der Stelle 1 befindet sich in der Variablen i eine 0. stellen Programmiersprachen unter anderem bitweise Operatoren zur Verfügung. die lediglich zwei Zustände annehmen können: Also wahr oder falsch. müssen wieder einzelne Bits miteinander verglichen werden: An der Stelle 0 befindet sich in der Variablen i eine 0. An den Stellen 2 und 3 der Variablen i und j befindet sich jedesmal mindestens eine 1. Die Stelle 3 ist nur in einer der beiden Variablen gesetzt. Dies entspricht 4 im Hexadezimalund auch im Dezimalsystem. <html> <head> 14 . Die Darstellung im Binärsystem der beiden Zahlen ist 1100 und 0101. Programmiersprachen wissen. </script> </head> <body> </body> </html> Im obigen Javascript-Code werden zwei Variablen namens i und j definiert. Um zum Ergebnis zu gelangen. <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var i = 0xC. in der Variablen j eine 1. An der Stelle 2 in der Variablen i befindet sich eine 1. so dass auch im Ergebnis die Stellen 2 und 3 auf 1 gesetzt werden.wird das entsprechende Bit im Ergebnis ebenfalls auf 1 gesetzt. An der Stelle 1 in der Variablen i befindet sich wieder eine 0. Mit diesen Operatoren können Sie einzelne Bits bearbeiten. Das Resultat ist also die Binärzahl 1101. j = 0x5. in der Variablen j eine 1. Binärzahlen eignen sich hervorragend zur Darstellung von Bits. Den Variablen werden die Hexadezimalzahlen C und 5 zugewiesen.Zahlensysteme Wie Sie bereits aus Kapitel 1. der UND-Operator genannt wird.

was der Hexadezimalzahl 3 entspricht (die auch gleichzeitig Dezimalzahl ist). alert(i ^ j). 3. Aufgaben Übung macht den Meister 1. Unterschiedliche Ergebnisse hängen von der Bandbreite der Variablen i ab.Zahlensysteme <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var i = 0xC. Der bitweise Operator ~ wird NICHT-Operator genannt. aus 1100 wird 0011. Im Gegensatz zu den anderen Operatoren benötigt er lediglich einen einzigen Operanden. Im Ergebnis ist nur dann ein Bit auf 1 gesetzt. </script> </head> <body> </body> </html> Der ^-Operator wird EXKLUSIVES-ODER genannt. aus auf 0 gesetzten Bits werden auf 1 gesetzte Bits. Sie benötigen für die Realisierung des Programms den %-Operator. 15 . sondern gehen Sie von obiger Beschreibung aus und ignorieren Sie gegebenenfalls ein negatives Ergebnis. Wandeln Sie die Dezimalzahl 40019 mit Stift und Papier in die entsprechende Hexadezimalzahl und in die entsprechende Binärzahl um. so ist dies völlig korrekt. Sollte Ihr Browser bei der Ausführung des Beispiels anstelle der 3 eine negative Zahl als Ergebnis anzeigen. Schreiben Sie ein Programm in Javascript. Dieser Operator dividiert zwei Werte und gibt als Ergebnis den ganzzahligen Restwert zurück. der hinter ~ angegeben wird. wenn auch nur genau ein Bit in den beiden Operanden auf 1 gesetzt ist. so steht im Ergebnis an gleicher Stelle eine 0. Sagen Sie die Ergebnisse der bitweisen Verknüpfungen als Dezimalwerte voraus. <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var i = 0xC. bevor Sie das Programm ausführen. Dieser Operator dreht die Bits einfach um: Aus auf 1 gesetzten Bits werden auf 0 gesetzte Bits. Wandeln Sie die Oktalzahl 143215 mit Stift und Papier in die entsprechende Hexadezimalzahl und in die entsprechende Binärzahl um. 2. das die beiden Werte aus den ersten zwei Aufgaben mit den bitweisen Operatoren &. alert(~i). j = 0x5. 4. Für Experten: Schreiben Sie ein Programm in Javascript. </script> </head> <body> </body> </html> Ein recht einfacher bitweiser Operator ist ~. das vom Anwender eine Dezimalzahl entgegennimmt und diese in eine Hexadezimalzahl umrechnet. | und ^ verknüpft. Das heißt. Sind die Bits in beiden Operanden auf 1 gesetzt. Wundern Sie sich nicht.

die wiederholt eine Division ausführt und die Restwerte zur Hexadezimalzahl zusammenstellt. Vergessen Sie nicht. 16 .Zahlensysteme Tipp Zur Realisierung des Programms benötigen Sie eine Schleife. zweistellige Restwerte in Buchstaben umzuwandeln.

Strom und kein Strom. Dieses Modul hat zwei Eingänge und einen Ausgang. wenn der Schalter A und der Schalter B geschlossen ist. Die ODER-Schaltung funktioniert so. aber wie kann man nun damit zu rechnen anfangen? Bis hin zum richtigen Rechnen ist es noch ein etwas längerer Weg. Die Hardware arbeitet wie eine ganze Menge anderer Geräte auch mit Strom. sprich Informationen verarbeitet werden. und damit ist der Grundstein für mathematische Berechnungen gelegt. Der Ausgang liefert nur dann Strom. einer Lampe und zwei Schaltern A und B. An dieser Stelle sollte Ihnen sofort das Binärsystem in den Sinn kommen. wenn in beiden Variablen die Bits gesetzt sind. dass für diese Informationsverarbeitung Software alleine nicht ausreicht. Er unterscheidet hierbei zwei Zustände: Strom und kein Strom. wenn auch nur ein Schalter geschlossen ist. Sie erstellen Programmabläufe.der Stromkreis ist unterbrochen. Durch bitweise Operatoren können Zahlen verändert werden. wenn mindestens ein Schalter im Stromkreis geschlossen ist. Rechnerarchitektur Allgemeines Binärsystem auf physikalischer Ebene Als Programmierer beschäftigen Sie sich hauptsächlich mit Software. Und er beginnt mit den digitalen Grundschaltungen. Digitale Grundschaltungen Spielen mit Strom Dass der Zustand "kein Strom" den Wert 0 im Binärsystem bedeuten kann und der Zustand "Strom" den Wert 1 ist zwar ganz nett. Diese Logik wird nun ebenfalls in ein 17 . auf der die Software laufen kann: Die Hardware. Das ist nur deswegen möglich. Er wird nun in ein Modul gepackt. Die UND-Schaltung ist ein Stromkreis mit einer Batterie. bedient sich der Computer des Stroms auch als Informationsträger. Das entspricht der UND-Schaltung. Man benötigt eine physikalische Maschine. wenn beide Eingänge Strom liefern. dass die Lampe brennt. weil es eben physikalisch ein Äquivalent zu den Zahlenspielereien gibt. Sie haben bereits gesehen. Während beispielsweise Lampen Strom ausschließlich als Energiequelle verwenden. die in Serie geschaltet sind. Dieser Stromkreis heißt UND-Schaltung. Ist auch nur einer der beiden Schalter geöffnet (oder beide gleichzeitig). 1 und 0. dass man mit dem Binärsystem eine ganze Menge machen kann. Die beiden Schalter A und B sind dazu parallel geschaltet. Erinnern Sie sich noch an die bitweisen Operatoren? An den &-Operator in Javascript? Dieser Operator wird auf der Hardware-Ebene genau durch die UND-Schaltung ausgeführt: Ein Bit im Ergebnis ist dann gesetzt. in denen Informationen verarbeitet werden. Tatsache ist. Der Stromkreis ist also geschlossen. brennt die Lampe nicht . an und aus. Durch die Unterscheidung zwischen Strom und kein Strom kann das Binärsystem abgebildet werden. den UND-Schalter. Die Logik des Schaltkreises ist recht einfach zu verstehen. weil die Lampe nur dann brennt.Kapitel 3.

Während zum Beispiel der Pentium III von Intel aus 28 Millionen Transistoren besteht. nennt man NICHT-Schaltung. die in den Schaltern steckt. wobei sich der Schalter im ersten und die Lampe im zweiten Schaltkreis befindet. der der bitweise Operator ^ entspricht. die zum Beispiel auf einem Chip untergebracht sind. verbunden. 18 . ODER.und Ausgänge der UND-. eine Art Magnet. umso leistungsfähiger. das ODER-Schalter genannt wird. ein Leistungsmerkmal. ist im Ergebnis an gleicher Stelle auch das Bit gesetzt. Ein Schaltkreis.und NICHT-Schalter miteinander verknüpft werden. besteht natürlich in Wirklichkeit nicht aus Batterien und Lampen. Der Ausgang dieses Moduls liefert dann Strom. Die Logik dieses Schaltkreises wird in einen NICHT-Schalter gepackt.es lassen sich durch Kombination der Module größere Schaltungen erstellen.und andersrum. Die EXKLUSIVE-ODER-Schaltung. die erstaunliches beherrschen. wenn mindestens einer der zwei Eingänge Strom liefert. die in der Prozessortechnologie eingesetzt werden. Der Halbaddierer 1 + 1 = 10 So simpel die digitalen Grundschaltungen scheinen .Rechnerarchitektur Modul gepackt. ist der Ausgang ohne Strom . Diese ODER-Schaltung ist äquivalent zum |-Operator. Es handelt sich hierbei um einen der wichtigsten Bausteine überhaupt. dass Ein. Technisch besteht dieser Schaltkreis genaugenommen aus zwei Schaltkreisen. Dabei gilt im Allgemeinen: Je mehr Transistoren. Die Technik. sind auf dem Nachfolgeprozessor Pentium 4 mehr als 42 Millionen Transistoren untergebracht. Ist der Eingang auf Strom gesetzt. in dem die Lampe leuchtet. wenn der Schalter nicht geschlossen ist. Vergleichen Sie die Arbeitsweise des Operators mit der Schaltung: Wenn mindestens ein Bit gesetzt ist.und einen Ausgang besitzt. der einen Ein. macht die Schaltkreise komplett. sondern aus Transistoren. Beide Schaltkreise sind über ein Relais. So ist die Anzahl der Transistoren. Die Kombination der Schaltungen sieht hierbei so aus. Der NICHT-Schalter entspricht dem bitweisen Operator ~.

Wenn Sie sich wundern. Mit Volladdierern können Sie bereits beliebig große Binärzahlen addieren. lassen sich mit Halbaddierern weitere Schalter aufbauen. ansonsten aber auch nur die beiden Ausgänge S und Ü. sind S und Ü gesetzt. spricht man davon. Die Addition wird hierbei im Binärsystem durchgeführt. B und C. Das fertige Modul hat zwei Eingänge A und B und zwei Ausgänge S und Ü. Sind alle drei Eingänge gesetzt. ist Ü gesetzt.Rechnerarchitektur Der Halbaddierer ist ein Baustein. Der Volladdierer stellt also eine Schaltung dar. ist auch nur S gesetzt. Sind genau zwei Eingänge gesetzt. Der Volladdierer 1 + 1 + 1 = 11 So wie Sie aus den digitalen Grundschaltungen einen Halbaddierer aufgebaut haben. drei UND-Schaltern und einem ODER-Schalter besteht. Für einen Volladdierer benötigen Sie zwei Halbaddierer und einen ODER-Schalter. die drei binäre Zahlen addieren kann.sie haben soeben einen Baustein kennengelernt. weil S für Summe und Ü für Überlauf steht. Die Ausgänge heißen deswegen S und Ü. was das soll . wird lediglich Ü gesetzt. der aus zwei NICHT-Schaltern. Da nach einer Addition von 1 und 1 der Wert 2 im Binärsystem nicht durch ein einziges Zeichen ausgedrückt werden kann. wird der Ausgang S auch gesetzt. 19 . Wenn ein Eingang gesetzt wird. Der Volladdierer hat im Gegensatz zum Halbaddierer drei Eingänge A. Wieviel Volladdierer Sie benötigen hängt hierbei ganz alleine von der Größe der Binärzahlen ab. dass ein Überlauf stattfindet. die Zahl 0 einem nicht gesetzten. Addition beliebiger Binärzahle Addieren wie ein König Sie werden es wahrscheinlich schon vermutet haben: Durch die Kombination von mehreren Volladdierern lassen sich weitere Schaltungen erstellen. Die Zahl 1 entspricht dabei einem gesetzten Eingang. der eine Addition mit den Zahlen 0 und 1 durchführen kann. sondern auf eine zweite Stelle zurückgegriffen werden muss. die Sie addieren möchten. Wenn beide Eingänge gesetzt sind. Der Volladdierer arbeitet wie folgt: Ist lediglich einer der drei Eingänge gesetzt.

und Adreßbus mit dem Speicher und einer Ein. verwenden Sie einfach mehr Volladdierer. Die ALU ist die Arithmetical Logical Unit und führt die eigentlichen Berechnungen aus. Das Zusammenstellen in Module ist ein ganz wichtiger Prozess. Hat die ALU die Berechnung durchgeführt. Durch Kombination dieser Schalter ist es bereits möglich. Steuer. ALU und Rechenwerk Von digitalen Grundschaltungen zum Rechenwerk Durch Kombination von digitalen Grundschaltungen können Schalter erstellt werden. Danach kann aus dem Speicher über den Datenbus die nächste Zahl an das Rechenwerk weitergegeben werden. der Prozessor. die wiederum in noch größere Module gepackt werden können. Prozessor Struktur der CPU Der Kern des PCs. Dieser Prozess gilt auch für die Software-Entwicklung.und Ausgabeeinheit verbunden. die aus jeweils vier Stellen bestehen. Die ALU führt mit Hilfe des Akkus die Rechenoperation durch und speichert das Ergebnis wieder im Akku. wird über das Befehlswerk gesteuert. Der Speicher wird normalerweise als RAM abgekürzt. der für das Rechnen zuständig ist. Bekannte Prozessoren sind die Pentium-Chips von Intel. aber auch beispielsweise die Festplatte. Ein. Die ALU kann selber intern eine Zahl speichern. Die Ein.als auch beschreibbarer Speicher).und Ausgabeeinheit kann wiederum mit externen Peripheriegeräten verbunden sein. im Binärsystem Zahlen zwischen 0000 und 1111 zu addieren (entspricht 0 und 15 im Dezimalsystem). Von-Neumann-Rechner Struktur eines Computers Der Prozessor als Gehirn des Computers ist extern über Daten-. damit es nicht verloren geht. Das Rechenwerk ist der Bestandteil eines Prozessors. wird die zweite Zahl jeweils aus dem Akku gelesen.und Steuerbus verbunden. Über den Datenbus werden die Zahlen an das Rechenwerk weitergegeben. was für Random Access Memory steht (also sowohl les. wo die entsprechenden Zahlen im Speicher zu finden sind und so weiter. Während im Rechenwerk mit Akku und ALU Berechnungen durchgeführt werden. 20 . Müssen Sie größere Zahlen addieren. Rechenwerk und Befehlswerk sind intern im Prozessor über Daten. besteht aus dem Rechenwerk und dem Befehlswerk. verringert er doch wesentlich die Komplexität des gesamten Gebildes. Der Akku selber ist über einen Datenbus mit einem Speicher verbunden. wird das Ergebnis wieder im Akku gespeichert. die wiederum miteinander kombiniert in größere Module gesteckt werden. brauchen Sie einen Halbaddierer und drei Volladdierer. Packt man sehr viele Schalter zusammen. Monitor. erhält man irgendwann ein Rechenwerk. Akku. Der Akku ist eine Art Speicherelement. In diesem Speicher liegen zum Beispiel eine ganze Menge Zahlen. Da für Addition und Subtraktion jedoch zwei Zahlen notwendig sind.Rechnerarchitektur Für die Addition von Binärzahlen. in der Anweisungen zu Funktionen und Funktionen zu Bibliotheken zusammengepackt werden. was für Berechnungen eigentlich durchgeführt werden sollen. wird über den Datenbus aus dem Akku das Ergebnis in den Speicher übertragen. Maus. die addiert werden sollen. Damit im Akku Platz für die nächste Zahl aus dem Speicher ist. Die Verbindung zwischen Rechenwerk und Speicher erfolgt also über einen Datenbus.und Ausgabeeinheiten sind die Tastur. Das Rechenwerk enthält letztendlich zwei wesentliche Elemente: Akku und ALU.

21 . Der Ausgang Y soll dann gesetzt sein. 2. Dann wird das Zweier-Komplement zur ersten Zahl hinzuaddiert. dass eine Subtraktion eben nichts anderes ist als eine Addition. Sie müssen lediglich das Zweier-Komplement wie beschrieben bilden. 5. 4. Halb. Erstellen Sie aus den digitalen Grundschaltern eine Schaltung mit zwei Eingängen A und B und einem Ausgang Y. Überprüfen Sie die Funktionsweise. wenn A nicht gesetzt ist oder wenn B gesetzt und gleichzeitig C nicht gesetzt ist. C und D und einem Ausgang Y. Der Ausgang Y soll nur dann gesetzt sein. B und C und einem Ausgang Y. Dazu verwenden Sie wie im Kapitel beschrieben Halb. Eine Subtraktion wird technisch wie folgt realisiert: Von der zu subtrahierenden Zahl wird das Zweier-Komplement gebildet wird. Tipp Die Aufgabe hört sich schwieriger an als sie ist. Erstellen Sie aus den digitalen Grundschaltern eine EXKLUSIVE-ODER-Schaltung. B. 3. wenn man nur erst das Zweier-Komplement gebildet hat. führen Sie eine Addition durch. Das Ergebnis ist die Differenz der beiden Zahlen. Für Experten: Erstellen Sie aus digitalen Grundschaltern. wenn A und B nicht gesetzt sind oder wenn sowohl A als auch B gesetzt sind. Erstellen Sie aus den digitalen Grundschaltern einen Baustein mit drei Eingängen A. indem Sie die Differenz von 7 und 2 anhand Ihrer Schaltung nachvollziehen. wenn mindestens A oder B gesetzt ist und zusätzlich mindestens C oder D. Das Zweier-Komplement ist eine mit dem NICHT-Operator negierte Zahl (Einser-Komplement).und Volladdierern eine Schaltung. Erstellen Sie aus den digitalen Grundschaltern einen Baustein mit vier Eingängen A. die eine Subtraktion zwischen zwei 3-bit Zahlen durchführen kann. Der Ausgang Y soll dann gesetzt sein.Rechnerarchitektur Aufgaben Übung macht den Meister 1. Wenn Sie das Zweier-Komplement erst haben. Der Trick ist. der der Wert 1 hinzuaddiert wird.und Volladdierer.

eine intensive Berechnung durchzuführen und gleichzeitig auf Benutzereingaben zu reagieren. weiter ausgeführt wird. Mit den jeweiligen Programmfäden werden Funktionen verknüpft . dass es in der einen Programmiersprache wesentlicher leichter und schneller gehen könnte (immer abhängig von Art und Umfang des Programms. die jeweils andere Programmieransätze darstellen. ob die Anwendung in einer funktionalen oder objektorientierten Sprache entwickelt wurde. werden im Multithreading durch den Programmierer mehrere Programmfäden gestartet. Das Ausführen paralleler Aufgaben bedeutet. Das Programm war zu jedem Zeitpunkt mit der Ausführung eines ganz bestimmten Befehls beschäftigt. damit der Anwender gleichzeitig mit anderen Funktionen des Programms weiterarbeiten kann. Diese Unterscheidung bezieht sich lediglich auf den Programmieransatz. aus der der Aufruf erfolgt. die nacheinander ausgeführt werden müssen.Kapitel 4. dass Ihr Programm mehrere Threads ausführt. Das Besondere ist jedoch nun. Multithreading bedeutet wortwörtlich. Sie können sowohl in der einen als auch anderen Programmiersprache die gleichen Anwendungen entwickeln.0 Sekunden. Der Unterschied ist der. das entwickelt werden soll). dass durch den Aufruf der Funktion diese gestartet wird und gleichzeitig die Funktion. Verwechseln Sie Multithreading nicht mit Multitasking: Während Multithreading die parallele Ausführung von Aufgaben innerhalb eines Programms ist. Beide Aufgaben bestehen aus insgesamt zehn Schritten.es handelt sich hierbei also um eine Art Funktionsaufruf. dass ein Programm zu einem Zeitpunkt mehrere Anweisungen ausführen kann. die jeweils unterschiedliche Aufgaben bearbeiten können. Folgender Javascript-Code veranschaulicht dieses Beispiel. wie der Programmierer vom Problem zur Lösung gelangt. sollte es diese Berechnung "im Hintergrund" ausführen. Das Ausführen paralleler Aufgaben innerhalb einer Anwendung erfordert spezielle Programmiertechniken. Sie als Programmierer können Ihr Programm multithreading-fähig gestalten. während die Berechnung abläuft gleichzeitig auf neue Benutzereingaben zu reagieren. Dazu muss das Programm beispielsweise in der Lage sein.6 Sekunden benötigt. Wenn das Programm beispielsweise eine intensive Berechnung ausführt. Während unsere Beispielprogramme bisher alle nur aus einem Programmfaden bestanden. In den bisher umgesetzten Beispielen war zu einem bestimmten Zeitpunkt immer nur eine Anweisung aktiv. ist die zweite Aufgabe rechenintensiver und benötigt pro Schritt 1. Damit ist es beispielsweise möglich. Während die erste Aufgabe pro Schritt 0. Für den Anwender eines Programms ist jedoch grundsätzlich nicht erkennbar. Programmaufbau Allgemeines Viele Wege führen nach Rom Bisher kennen Sie lediglich funktionale und objektorientierte Programmiersprachen. weil unabhängige Aufgaben parallel ausgeführt werden können. Ab diesem Zeitpunkt laufen also zwei Funktionen gleichzeitig. 22 . über Multitasking entscheidet jedoch allein das Betriebssystem. Keine funktionale und objektorientierte Programmiersprache stellt grundsätzlich ein Hindernis dar. wenn es um die Entwicklung von bestimmten Computer-Anwendungen geht. Stellen Sie sich folgendes Beispiel vor: In Ihrem Programm müssen zwei Aufgaben durchgeführt werden. Dabei führen beide Wege zum Ziel. also die Art und Weise. ist Multitasking die parallele Ausführung von Programmen durch das Betriebssystem. Multithreading Mehrere Programmfäden Das Ausführen paralleler Aufgaben innerhalb einer Anwendung wird durch Multithreading gelöst. Mit Multithreading können Sie Ihr Programm leistungsfähiger gestalten. Unter Threads versteht man im Deutschen Programmfäden. Für den Anwender hingegen machen sich andere Dinge bemerkbar.

Die erste Funktion wird hierbei alle 0. 600).die die rechenintensivere Aufgabe simuliert alle 1. die Aufgaben werden hintereinander ausgeführt . var Schritt1 = 0. das Ergebnis des Programms ähnelt dem eines Programms mit echtem Multithreading. if (Schritt1 > 9) { window. if (Schritt2 > 9) { window.0 Sekunden. 1000). document.6 Sekunden aufgerufen. Schritt<br>".genau wie die Anweisungen in all den bisher kennengelernten Javascript-Programmen. Aufgabe2. Schritt2 = 0. Die beiden unabhängigen Aufgaben werden nun in zwei Threads ausgeführt. wird die zweite Aufgabe gestartet. die zweite Funktion . Das heißt. Zur Optimierung des Programms wird es umgeschrieben.innerHTML += text.clearInterval(Aufgabe2).Programmaufbau <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var Aufgabe1.setInterval("aufgabe_2()".innerHTML += text. Aufgabe2 = window. } } function aufgabe_2() { var text = "Aufgabe 2: " + ++Schritt2 + ".setInterval("aufgabe_1()".getElementsByTagName("body")[0]. <html> <head> <title>Allgemeine Grundlagen der Programmierung</title> <script type="text/javascript"> var Aufgabe1. Das heißt. } } Aufgabe1 = window. werden die Threads simuliert.clearInterval(Aufgabe1). function aufgabe_1() { var text = "Aufgabe 1: " + ++Schritt1 + ". Schritt<br>". indem automatisch nach einem fest vorgegebenen Zeitinterval eine bestimme Funktion gestartet wird. Aufgabe2. Nachdem Javascript das Erzeugen und Ausführen echter Threads nicht ermöglicht. die zur Ausführung der beiden Aufgaben benötigt wird. var Schritt1 = 0. Wenn der zehnte Schritt der ersten Aufgabe erreicht und die erste Aufgabe somit komplett ist.getElementsByTagName("body")[0]. Schritt2 = 0. Wenn Sie die Zeit stoppen.6 Sekunden. was aber nicht von entscheidender Bedeutung ist). die auch jeweils eine nach der anderen ausgeführt wurden. function aufgabe_1() { 23 . die jeweils eine Variable inkrementiert und dann den Wert dieser Variablen auf den Bildschirm ausgibt. erhalten Sie 16 Sekunden (aufgrund der verwendeten Funktionen in Javascript benötigt das Programm zur Ausführung insgesamt 17. document. </script> </head> <body> </body> </html> Der Javascript-Code simuliert die Ausführung der Aufgaben.

Schritt<br>". eine entsprechende Funktion zu identifizieren. document. Stoppen Sie die Zeit. der eine Zeit in Millisekunden angibt. Diese Funktion bekommt jeweils die Variable übergeben. Das heißt also. um die Funktion aufgabe_2 als Thread zu starten.clearInterval übergibt. Wichtig ist. erfolgt nun nicht mehr innerhalb von aufgabe_1. der hinzugefügt wird. Der restliche Code ist identisch. Schritt<br>". Der Wert der Variablen wird über den Operator ++ vor seiner Ausgabe jeweils um 1 erhöht. Das Erkennen paralleler Aufgaben und das Entwickeln von Threads kann also die Ausführungsdauer extrem verkürzen . der Code ++a ist äquivalent zum Code a = a + 1.getElementsByTagName("body")[0]. Der Aufruf von window. und Sie sehen. Über window. dem Wert einer Variablen und einem Zeilenumbruch. verhindert die Funktion.clearInterval aufgerufen.getElementsByTagName("body")[0]. Dieser Operator funktioniert so. document. die den Rückgabewert der Funktion window.in diesem Fall um knapp 40 Prozent. 24 . In welchen Zeitabständen die jeweiligen Funktionsaufrufe stattfinden legt der zweite Parameter fest. Das heißt. welche Aufgabe gerade ausgeführt wird. Die Ausgabe von Text in das Dokument erfolgt jedoch nur.also der Webseite selber . Aufgabe2 = window. } } Aufgabe1 = window. die entsprechenden Funktionen werden einfach automatisch immer wieder von Zeit zu Zeit aufgerufen und ausgeführt.clearInterval(Aufgabe1).innerHTML += text. die als erster Parameter angegeben sind.Text hinzugefügt. wird die Funktion window. Der Code in den Funktionsrümpfen bedeutet: Über den Zugriff auf die Eigenschaft innerHTML des Objekts mit dem HTML-Tag <body> wird dem Dokumentinhalt .clearInterval kann dann mit Hilfe der Variablen die automatisch in regelmäßigen Abständen aufgerufene Funktion gestoppt werden und das Intervall unterbrochen werden. dass nach 10 Sekunden (genau 11 Sekunden) die Aufgaben beide komplett ausgeführt wurden. die das Programm zum Durchlaufen aller zehn Schritte der zwei Aufgaben benötigt. Wenn also der Wert 10 in der Variablen erreicht ist.Programmaufbau var text = "Aufgabe 1: " + ++Schritt1 + ".innerHTML += text. weil die Variable bereits zehnmal um den Wert 1 erhöht wurde. 600).clearInterval(Aufgabe2). Das Programm löst nun die Aufgaben parallel in zwei Threads. wiederholt neu gestartet. Dies geschieht unter Verwendung des kombinierten Zuweisungs-Operators +=. if (Schritt2 > 9) { window. Der Wert der Variable ist hierbei unerheblich. indem sie die entsprechende Variable der Funktion window.setInterval werden die Funktionen. sondern außerhalb. besteht aus der Ausgabe.setInterval. Kurz zur Erklärung der Javascript-Beispiele: Durch den Aufruf von window. Der Text. </script> </head> <body> </body> </html> Der Javascript-Code unterscheidet sich kaum vom vorherigen.setInterval("aufgabe_2()". Ist dies nicht der Fall. dass es auf diese Weise möglich ist. dass der Code a += b äquivalent ist zum Code a = a + b. if (Schritt1 > 9) { window. } } function aufgabe_2() { var text = "Aufgabe 2: " + ++Schritt2 + ". auch weiterhin in Zukunft aufgerufen zu werden.setInterval("aufgabe_1()".setInterval entgegennahm. 1000). solange der Wert der Variablen kleiner als 10 ist.

ob ein bestimmtes Ereignis bereits eingetreten ist. Im Gegensatz hierzu muss in Javascript die entsprechende Funktion immer wieder regelmäßig neu gestartet werden. die nun das Ereignis entsprechend behandelt. Polling bedeutet. Als Programmierer könnte man nun auf folgenden Trick zurückgreifen. auf das die Anwendung wartet .normalerweise eine ganz bestimmte Funktion des Betriebssystems . während es eine rechenintensive Operation ausführt. ob ein Ereignis eingetreten ist. als dass der Einsatz von Threads in der Praxis der Software-Entwicklung meist recht kompliziert ist. Andernfalls würde zuerst die Berechnung zu Ende geführt werden und danach auf die Benutzereingabe überprüft werden. dass man Rechenressourcen und Prozessorzeit verschwendet. die 10. so dass das Programm erst verzögert auf Ereignisse reagiert. die ansonsten in einem Multithreading-Programm alle gemeinsam in die Funktion gepackt werden würden. wenn auch die Funktion beendet ist. wird beim Multiplexing die Anwendung zentral um einen Kern herum aufgebaut. Polling Wiederholtes Überprüfen Ein gutes Programm soll. Das ist insofern interessant. kehrt die Programmausführung zum Kern zurück. so dass Multiplexing vorgezogen werden soll- 25 . um jedesmal neu Anweisungen auszuführen. nachdem die Überprüfung erst nach der kompletten Berechnung stattfindet.also beispielsweise auf eine Eingabe über die Tastatur . In diesem Fall wäre die Abbrechen-Schaltfläche sinnlos. anstatt in mehreren Threads jeweils auf ein Ereignis zu warten. Dieses Modell ist als Polling bekannt . Ist dies erledigt. Beispielsweise sollte das Programm eine Schaltfläche Abbrechen zur Verfügung stellen. Während die langwierige Rechenoperation ausgeführt wird.und Ausgabegeräte. Multiplexing kann man als Gegenteil von Polling bezeichnen: Während beim Polling das Programm ständig nachprüfen muss. dass man auf mehrere Ereignisse gleichzeitig warten kann. Auch in diesem Fall muss das Programm also zwei Aufgaben gleichzeitig ausführen: Berechnen und auf Benutzereingaben überprüfen. wird es beim Multiplexing automatisch informiert. dass man ständig innerhalb seines Programms überprüft. Mit echtem Multithreading würde also beispielsweise eine while-Schleife in der Funktion von 0 bis 10 hochzählen und in jedem Schleifendurchgang eine Meldung auf den Bildschirm ausgeben. Multiplexing Hallo. Dieser Kern . oder aber man fährt die Überprüfung in so kurzen Zeitabständen aus. Tritt ein bestimmtes Ereignis ein.dann gibt der Kern eine entsprechende Meldung an die Anwendung weiter. Polling ist in jedem Fall Ressourcen-Verschwendung. ohne Threads verwenden zu müssen. weil man wiederholt auf Ereignisse überprüft. ob der Anwender nun auf Abbrechen geklickt hat. über die der Anwender jederzeit die rechenintensive Operation beenden kann.Programmaufbau Echtes Multithreading liegt dann vor. Im Gegensatz zum Multithreading kann beim Multiplexing mit einer Funktion auf mehrere Ereignisse gewartetet werden. die eventuell erst zu einem späten Zeitpunkt eintreten oder sogar gar nicht . wenn eine Funktion als Thread aufgerufen wird und der Thread dann endet.000mal ausgeführt wird. Multiplexing hat also den Vorteil. Während beim Multithreading Aufgaben parallel ausgeführt werden (und somit die einzelnen Threads im Vordergrund stehen). auch noch auf Benutzereingaben reagieren. könnte ja zwischendurch immer mal wieder überprüft werden. Wenn beispielsweise die Rechenoperation aus einer Schleife besteht.der Anwender klickt beispielsweise nicht auf die Abbrechen-Schaltfläche. ich hab da mal ein Ergebnis Multiplexing ist kein Konkurrenzmodell zu Multithreading. sondern wartet die Berechnung bis zum Ende ab. könnte mit einer if-Anweisung innerhalb dieser Schleife ebenfalls ständig auf Benutzereingaben überprüft werden.überwacht verschiedene Ein. wo auf das nächste Ereignis gewartet wird oder bereits ein neues Ereignis vorliegt. was man als Programmierer machen kann.und so ungefähr das Schlimmste. Das Problem hierbei: Entweder führt man die Überprüfung in zu großen Zeitabständen aus.

ist diese Technik außerdem ressourcen-schonender und schneller als Multithreading. wenn ein bestimmtes Ereignis eintritt. Diese Technik ist so neu. was es will . wenn es um rechenintensive Aufgaben geht. Asynchrone Ein. wenn mehrere rechenintensive Aufgaben ausgeführt werden sollen und die Ausführung durch Threads parallelisiert werden soll.und Ausgabe an. Der Unterschied zu Multiplexing ist.und Ausgabemodell stellt die signal-gesteuerte Einund Ausgabe dar. die parallel ausgeführt werden müssen. dass die Anwendung auf neue Ereignisse reagieren kann. Asynchrone Ein. müssen diese Schritte durch den wiederholten Aufruf einer Funktion ausgeführt werden.also auch jederzeit rechenintensive Operationen ausführen . werden die laufenden Anweisungen unterbrochen und eine Ereignisbehandlung ausgeführt. die informiert werden. wird das Programm sofort informiert. morgen geliefert Als Konkurrenzmodell zu Multiplexing bietet sich die asynchrone Ein. Da Multiplexing keinen Wechsel zwischen Threads benötigt. Tipp Anstatt die Division. Eine Abwandlung vom rein asynchronen Ein. Daraufhin bearbeitet Ihr Programm einfach eine andere Aufgabe. Wenn der Anwender dann die Taste drückt. beim entsprechenden Lesevorgang im Programm jedoch angezeigt wird. weil beim Abfragen eines Ereignisses dieses noch nicht eingetreten zu sein braucht. Stattdessen kann das Programm machen. Das Modell ist asynchron. Für Experten: Entwickeln Sie eine Javascript-Lösung für Aufgabe 4 aus Kapitel 2 (Umrechnung einer Dezimalzahl in eine Hexadezimalzahl) unter Verwendung eines Threads. bei Eintreten die entsprechende Information aber später automatisch nachgereicht wird. Asynchrone Ein. Durch Kombination von Multiplexing und Multithreading können Anwendungen erstellt werden. In diesem Fall würde die rechenintensive Behandlung eines Ereignisses bei Multiplexing verhindern. dass der Anwender noch gar keine Taste gedrückt hat. die nicht ganz so effizient arbeitet (jedoch auch heute schon in der Praxis der Software-Entwicklung angewandt werden kann). Multiplexing stellt jedoch keine Lösung dar.und wenn dann ein entsprechendes Ereignis eintritt.und Modulo-Operation jeweils in einem Schleifendurchgang neu durchzuführen.und Ausgabe Heute bestellt.Programmaufbau te. dass das Programm nicht um einen Kern herum aufgebaut sein muss und auf Meldungen aus dem Kern warten muss. und eine entsprechende Ereignisbehandlung kann ausgeführt werden.und Ausgabe vereint die Vorteile von Multiplexing und Multithreading. und die zur Behandlung von Ereignissen rechenintensive Operationen in Threads ausführen können. dass sie kaum standardisiert ist und noch weniger in der Praxis der Software-Entwicklung angewandt werden kann. Aufgaben Übung macht den Meister 1.und Ausgabe liegt dann vor. die der Anwender gedrückt hat). wenn Ihr Programm beispielsweise einen Wert von der Tastatur einlesen will (also eine Taste. 26 . Threads sind lediglich dann noch interessant.