Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Grundlagen der Informatik Sommersemester 2007 Prof. Dr. Peter Kneisel.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Grundlagen der Informatik Sommersemester 2007 Prof. Dr. Peter Kneisel."—  Präsentation transkript:

1

2 1 Grundlagen der Informatik Sommersemester 2007 Prof. Dr. Peter Kneisel

3 2 Didaktik: Durchführung Diese Vorlesung enthält Übungen Die Übungen werden je nach Bedarf durchgeführt. Zur Vorbereitung werden Übungsblätter, je nach Vorlesungsverlauf zusammengestellt. Weitere Übungen sind im Foliensatz vorhanden und sollten selbständig und vollständig bearbeitet werden. Vorsicht ! Kommen Sie in alle Veranstaltungen - machen Sie die Übungen Überschätzen Sie sich nicht - auch wenn Sie PC-Crack sind

4 3 Didaktik: Folien Der Vorlesungsstoff wird anhand von Folien dargelegt Die Folien bilden nur einen Rahmen für die Inhalte. Die Folien sollten daher mit Hilfe eigener Vorlesungsskizzen ergänzt werden - am besten in Form einer Vorlesungsnachbereitung max. 3 Tage nach der Vorlesung Zusätzlich zu den Folien werden Beispiele an der Tafel oder am Rechner gezeigt. Diese sollten Sie vollständig mitskizzieren. Zur vollständigen Nachbereitung, z.B. als Klausurvorbereitung, sind die Folien einheitlich strukturiert Es gibt genau drei Gliederungsebenen: Kapitel, Unterkapitel, Abschnitte Die Inhalte jedes Kapitels und jedes Unterkapitels werden jeweils motiviert und sind verbal beschrieben. Zusätzlich gibt es jeweils ein stichwortartiges Inhaltsverzeichnis der Unterkapitel, bzw. Abschnitte Die Vorlesung wird ständig überarbeitet, so dass sich die Foliensätze ändern können (und werden) Laden Sie sich zur endgültigen vollständigen Klausurvorbereitung nochmals zusätzlich den kompletten Foliensatz herunter.

5

6 5 Inhalt Wie jede Wissenschaft befasst sich die Informatik mit ihren eigenen Objekten. Was diese Objekte sind und was man mit diesen Objekten machen kann - und wie - wird in dieser Vorlesung auf eher abstraktem Niveau, aber immer mit Beispielen aus der Realität eines Informatikers (oder einer Informatikerin), erläutert. Diese Vorlesung konzentriert sich auf den Kern der Informatik. Vertieftere Einführungen in z.B die Bereiche der Programmierung, Rechnerarchitekturen, Betriebssysteme, etc. sollen daher bewusst den entsprechenden Veranstaltungen vorbehalten bleiben Inhalt 1.Informatik 2.Information und Codes 3.Zeichen und Zahlen 4.Datenstrukturen 5.Algorithmenentwurf

7 6 Überblick und Einordnung TechnischeTheoretischePraktische Informatik Dynamik (Algorithmik) Elemente Strukturierung EP OOP 1 AD Statik (Struktur) Information Codes Zeichen Zahlen Daten- strukturen RA AFS SWT RN 5 6

8 7 Kapitel 1Informatik 1962 wurde der Begriff Informatique(als Kombination der Begriffe Information und automatique) von Philippe Dreyfus, einem französischen Ingenieur eingeführt und als Informatik ins Deutsche übernommen. Als junge Wissenschaft ist die Informatik mittlerweile in viele Bereiche der älteren Wissenschaften eingezogen und hat viele eigene Bereiche neu erschlossen. Die Informatik ist damit mittlerweile wesentlich mehr, als der anglo- amerikanische Begriff Computer-Science vermuten lässt. Dieses Kapitel möchte einen (kurzen) Überblick über exemplarische Inhalte, Struktur und Geschichte der Informatik geben Inhalt 1.Motivation 2.Definition 3.Die Teilgebiete der Informatik 4.Die Geschichte der Informatik 5.Zusammenfassung des Kapitels

9 8 1.1Motivation Die Beherrschung eines Computers macht Spaß und gibt der informationssüchtigen Gesellschaft das Gefühl persönlicher Freiheit (so wie vor Jahren ein roter Sportwagen) Die Beherrschung gibt Macht. Für das Funktionieren einer demokratischen Gesellschaft ist es wichtig, daß viele Menschen Computer verstehen und beherrschen. Der Computer schafft und vernichtet Arbeitsplätze und ist eine Herausforderung für die Gesellschaft Das Verstehen der Gesetzmäßigkeiten bei der Entwicklung von Computerprogrammen ist eine intellektuelle Herausforderung Das Umsetzen dieses Verständnisses ist eine intellektuelle Genugtuung. Der Computer schafft neue Betätigungsfelder und Lebensinhalte Zunehmend viele Aufgabenstellungen der realen Welt sind ohne Einsatz von Methoden und Werkzeugen der Informatik nicht mehr zu bewältigen Der professionelle Umgang mit Computer ist im Beruftsleben eine nackte Notwendigkeit !

10 9 1.2Was ist Informatik Jedes Lehrbuch der Informatik gibt seine Definition der Informatik. Auch der Duden beschreibt die Informatik als Wissenschaft von der systematischen Verarbeitung von Informationen, besonders der automatischen Verarbeitung mit Hilfe von Digitalrechnern. Durch die Beschränkung auf den Aspekt der Verarbeitung geht diese Definition meines Erachtens nicht weit genug. Ich werde daher in diesem Unterkapitel eine eigene Definition wagen. Die dabei verwendeten Aspekte werden exemplarisch verdeutlicht, wobei bewusst in Grenzbereiche der Informatik gegangen wird. Was die Informatik wirklich ist, kann kein Lehrbuch erfassen. Sie werden - hoffentlich - am Ende Ihres Studiums eine sehr weitreichende Idee davon haben. Inhalt 1.Definition 2.Beispiele

11 Definition Informatik Die Wissenschaft, die sich mit dem (automatisierten) von Information befasst Erfassen Transportieren Speichern Verarbeiten Umsetzen

12 Wissenschaft Informatik ist nicht die Wissenschaft vom Computer (sowenig, wie Astronomie die Wissenschaft vom Teleskop ist) Informatik ist eine Wissenschaft … und keine Bastelecke für Software-Spieler Aspekte der Informatik als reine Lehre (verwandt mit der Mathematik) Naturwissenschaft: entdecken und beschreiben von natürlichen Phänomenen Ingenieurwissenschaft - mit der typischen Vorgehensweise Problemstellung Analyse Teillösungen Synthese Lösung

13 Information Information ist die Bedeutung, die durch eine Nachricht übermittelt wird (nachrichtentechnische Definition) Kapitel 2 Information ist eine elementare Kategorie Chemie: Stoffumwandlung Physik: Energieumwandlung Informatik: Informationsumwandlung

14 Erfassen Sensorik Bildverarbeitung Datenmenge (Byte) (52,204,248)(33,75,125,190,251)

15 Transportieren Telekommunikation Telephonie Hz ~ Hz

16 15 Abstrakte Datentypen (N. Wirth: Algorithmen und Datenstrukturen) 1.2.6Speichern Datenrepräsentation Einfache Typen Aufzählungstypen Integer Real Boolean Char... {rot, gelb, grün} [0,1,..,65535] [3,4e-038,..3,4e038] {TRUE, FALSE} {ASC(0),..,ASC(255)} Strukturierte Typen Array Record Varianten Record Menge... array [n..m] of Type record Type 1: element 1 Type n: element n end set of Type Abstrakte Typen Listen Binäre Bäume Vielweg Bäume Graphen...

17 Speichern Datenrepräsentation Objektrepräsentation Assoziation Vererbung Aggregation Verwendung Instantiierung Klassenname Attribute Operationen Einschränkungen (G. Booch: Objektorientierte Analyse und Design) Teil projekt Projekt Projektleiter Mitarbeiter n Buchhaltung Controlling Personalwesen 1

18 17 Class Teilprojekt: public Projekt { Projektleiter projektleiter; Mitarbeiter mitarbeiter[MAX_MITARBEITER]; public: Teilprojekt (Projektleiter); ~Teilprojekt (); } Teilprojekt::Teilprojekt(Projektleiter pl) { // some method-calls of Buchhaltung, Controlling, Personalwesen } main { Teilprojekt1 = new Teilprojekt(Projektleiter1) // See Budget1 for buget details on Teilprojekt1 } 1.2.6Speichern Datenrepräsentation Objektrepräsentation (B.Stroustrup: The C++ Programming Language) Teilprojekt Projekt Projektleiter Mitarbeiter n Buchhaltung Controlling Personalwesen 1 Assoziation Vererbung Aggregation Verwendung Instantiierung n1

19 Verarbeiten Prozessmodelle Petri-Netze (C.A.Petri: Kommunikation und Automaten))

20 Verarbeiten Prozessmodelle Interaktionsdiagramme (G. Booch: Objektorientierte Analyse und Design) R1R2R3R4R5 N2 N1

21 20 Axon Dendrite Synapsen 1.2.7Verarbeiten KI-Ansätze Neuronale Netze a i =F ( W ij * O j, a i ) aAktivierungszustand WVerbindungsgewichtung OAusgangswert FAktivierungsfunktion fAusgabefunktion OjOj O i =f ( a i ) W ij

22 Umsetzen Aktorik Manipulatoren Anzahl Freiheitsgrade 252 (1)9

23 Zusammenfassung Modellierung der realen Welt Abbildung realer Objekte und deren Beziehungen (Strukturen) auf rechnerinterne Objekte und Strukturen Reduktion von Redundanz Strukturierung von Information Abbildung realer Aufgabenstellungen und Prozesse auf Rechnerprozesse Umsetzung des Modells auf die reale Welt Abbildung von Rechnerprozessen auf reale Prozesse Abbildung von Datenstrukturen auf reale Strukturen Erfassen Transportieren Speichern Verarbeiten Umsetzen

24 23 1.3Die Teilgebiete der Informatik Wie viele Wissenschaften, ist die Informatik kein homogenes Gebilde, sondern lässt sich anhand unterschiedlicher Kriterien in Teilgebiete strukturieren. Dieses Kapitel beschreibt die wohl geläufigste Einteilung der Informatik in drei, bzw. vier Teilbereiche. Inhalte 1.Technische Informatik 2.Praktische Informatik 3.Theoretische Informatik 4.( Angewandte Informatik )

25 Technische Informatik Konstruktion von Verarbeitungselementen Prozessoren,... Konstruktion von Speicherelementen Hauptspeicher,... Konstruktion von Kommunikationselementen Bussysteme Lokale Rechnernetze (LAN: Local Area Networks), Weitverkehrsnetze (WAN: Wide Area Networks),... Mobilfunknetze, Satellitenkommunikation,... Konstruktion von Peripherie Drucker, Scanner,.... Festplatten, Optische Platten, Diskettenlaufwerke,......

26 Praktische Informatik Umgang mit Programmiersprachen Programmierung Compilerbau... Entwicklung von Software Analysemethoden Designmethoden Realisierungsmethoden Testverfahren... Unterstützung der Softwareentwicklung Projektmanagement von DV-Projekten Qualitätsmanagement in DV-Projekten...

27 Theoretische Informatik Sprachen und Automaten Formale Sprachen Grammatiken Sprachdefinitionen Berechenbarkeitstheorie Komplexitätstheorie...

28 Angewandte Informatik Anwendung in verwandten Wissenschaften Numerische oder stochastischer Verfahren in der Mathematik Simulationen in der Physik und der Chemie Bildverarbeitung in der Medizin Genanalyse in der Biologie Lehrprogramme für Natur-, Sozial- und Geisteswissenschaften... Anwendungen im täglichen Leben. Computerspiele, Multimediaanwendungen, Textverarbeitung, Tabellenkalkulation, Datenbanken,... Steuerung von technischen Prozessen Web-Anwendungen...

29 28 1.4Die Geschichte der Informatik Die Informatik ist eine junge Wissenschaft, hat aber, ähnlich wie andere Natur- und Ingenieurwissenschaften Wurzeln, die weit in die Menschheitsgeschichte hineinragen, Wie keine andere Wissenschaft wurde die Informatik jedoch von der Erfindung eines Gerätes, dem programmgesteuerten Rechner (später Computer) beeinflusst. Dieses Unterkapitel wird die Wurzel in der Menschheitsgeschichte und auch die Entwicklung des Rechners vorstellen. Inhalt 1.Information in der Geschichte 2.Automaten und Steuerungen 3.Erleichterung der Rechenarbeit 4.Pioniere der Informatik - Praktiker 5.Pioniere der Informatik - Theoretiker 6.Die Generationen

30 Information in der Geschichte Erfassung durch Sinnesorgane Transport durch akustische, optische, chemische Signale Speicherung durch Gene oder neuronale Elemente Verarbeitung über neuronale Elemente Umsetzung direkt oder indirekt über Gliedmaße Entwicklung von Wort,- Silben- und Buchstaben-schriften

31 Automaten und Steuerungen ca. 100 v. Chr. Mechanismus von Antikythera älteste erhaltene Zahnrad-Apparatur wahrscheinlich zur (analogen) Berechnung der Bewegungen von Himmelskörpern Mittelalter Mechanische Uhren mit Sonnen-, Mond- und Planetenbewegungen und Figurenumläufe an Kirchen und Rathäusern 17./18. Jhdt. Spieluhren, Schreib- und Schachspielautomaten 18./19. Jhdt. Fliehkraftregler für Dampfmaschinen, mechanischer Webstuhl mit Lochkartenbebändert (Jacquart, 1805)

32 Erleichterung der Rechenarbeit Rechenbretter Seit dem Altertum China, Japan, Russland Addition/Subtraktion ähnlich schnell wie Taschenrechner Lehre der Grundrechenarten Durch Zahlensystem schematisierbar Lehre an mittelalterlichen Universitäten Durch Rechenbücher weitere Verbreitung des Wissens (z.B. Adam Riese ) Rückführung der Multiplikation/Division auf Addition/Subtraktion durch logarithmisches Rechnen mit Hilfe von Tabellen.

33 Mechanische Rechenmaschinen Wilhelm Schickart ( ) Maschine für die Grundrechenarten (1623) Blaise Pascal ( ) Gottfried Wilhelm von Leibniz ( ) Arithmetik des Dualsystems Philipp Matthäus Hahn ( ) Feinmechanische Rechenmaschinen 19./20. Jhdt: Sprossenradmaschine Hermann Hollerith Lochkartenstanzer/ Sortierer/Tabellierer

34 Pioniere der Informatik - Praktiker Charles Babbage ( ) Difference Engine (1812). Überprüfung von Logarithmentafeln. Alle Merkmale eines programmierbaren Computers. Entwurf einer Analytical Engine (1836). Wurde nie gebaut Konrad Zuse (geb. 1910) Z1: mechanischer Rechner Z2 / Z3: Elektromechanischer Relaisrechner im Dualsystem mit Lochkartensteuerung. Erster voll funktionstüchtiger Computer (1941) Grundlegende Arbeiten zur Programmierung und algorithmischer Sprachen Howard Eiken Mark I, II, III, IV (1944) Dezimalrechnender Relaisrechner

35 Pioniere der Informatik - Theoretiker Kurt Gödel Theoretische Aussagen zum Algorithmenbegriff: Es gibt Aussagen die algorithmisch nicht entscheidbar sind (1931) Alan M. Turing ( ) Definition des Algorithmenbegriffes über eine hypothetische Maschine (Turing-Maschine) John von Neumann ( ) Grundlegende Arbeiten über Computerarchitektur: Speicherung der Daten und Programme auf dem gleichen Medium Definition von Registern insb. Indexregister

36 Die Generationen GenerationBeispielTechnologieSpeich./Geschw.Software Vorgenerat.Z3Elektro-0,0002 MIPSVerdrahtet Mark1mechanik 1.GenerationENIAC, Z22Elektro-0,02 MIPSMaschinen UNIVAC, IBM650röhren1-2 KByte sprache SIEMENS GenerationIBM1400, AEG TRTransistoren0,1 MIPSAssembler CDC6600Kernspeicher32 KByteFORTRAN Siemens2002Stapelbetrieb 3. GenerationIBM370, PDP11ICs5 MIPSHochsprachen Siemens7000,Halbleiter-1-2 MBytesC, Pascal Cray 1speicher 4. GenerationPC, Gray XMPMikro-50 MIPSSprachen der Sperry1100, VAXprozessoren8-32 MByte4. Generation IBM309xOptische Sp.Parallelisierung GegenwartWorkstationsPentium,100 MIPSNetzsoftware Hochleistungs-Power PC1 GByteOO-SprachenPCs NetzeC++. JAVA 5. Generationsupraleitende1000 MIPS Keramikenviele GBytes

37 36 1.5Zusammenfassung des Kapitels Die Informatik befasst sich mit der (automatisierten) Erfassung, dem Transport, der Speicherung, Verarbeitung und dem Umsetzen von Information Die Informatik ist eine naturwissenschaftliche Ingenieurswissenschaft Die Informatik gliedert sich in Technische, Praktische, Theoretische und Angewandte Informatik Die Geschichte der Informatik beginnt im Altertum, besteht in Ihrer heutigen Form aber erst seit ca Zur Zeit befinden wir uns in der 4. Generation.

38 37 Kapitel 2Information Information ist der grundlegende Begriff der Informatik. Mehr noch: Der Begriff der Information ist vermutlich das zentrale interdisziplinäre Brückenkonzept der modernen Wissenschaften *. Dieses Kapitel beschreibt, aus welchen Aspekten Information besteht, welche für die Informarik wesentlichen Definitionsansätze es gibt und wie Information in der Informatik tatsächlich dargestellt wird. Inhalt 1.Was ist Information 2.Nachrichtentechnische Definition 3.Algorithmische Definition 4.Darstellung in der Informatik * (einige Teile dieses Kapitels entstammen: H.Lyre: Informationstheorie) Im Anfang war das Wort Johannes 1.1

39 38 2.1Was ist Information Es deutet einiges darauf hin, dass Information ein zumindest ebenso fundamentaler Begriff ist, wie Stoff in der Chemie und Energie in der Physik (die tatsächlich schon zu Materie-Energie vereint wurden). Betrachtet man Information als ursächliche (atomare) Größe so ist die Frage: was ist Information eher irrelevant. Dafür rücken Fragestellungen wie woraus besteht Information, worin ist Information, was kann ich mit Information machen in den Vordergrund. In diesem Unterkapitel soll die erste dieser Fragen: woraus besteht Information? betrachtet werden Inhalt 1.Semiotische Dreidimensionalität 2.Semantik und Pragmatik 3.Semantische Ebenen

40 Semiotische Dreidimensionalität Die wohl wichtigste Charakterisierung des Informationsbegriffes entspringt der Semiotik – der Zeichenlehre (Also die Lehre, die sich mit Zeichen bzw. Symbolen befasst) und lässt sich auf den Informationsbegriff übertragen. Demnach haben Informationseinheiten drei Aspekte: die Syntax betrifft das Auftreten einzelnder Informationseinheiten und ihrer Beziehungen untereinander. die Semantik betrifft die Bedeutung der Informationseinheiten und ihre Beziehungen untereinander. die Pragmatik betrifft die Wirkung der Informationseinheiten und ihrer Beziehungen untereinander. Diese drei Aspekte müssen in ihrer Gesamtheit berücksichtigt werden (entweder explizit oder implizit) sind ungewichtet haben keinen Bezug zum informationsverarbeitenden System (z.B. Mensch, Maschine, …)

41 Semantik und Pragmatik Carl Friedrich von Weizsäcker: Information ist nur, was verstanden wird Information ist nur, was Information erzeugt (die wiederum syntaktische Aspekte hat, verstanden werden muss und Information erzeugen muss, die wiederum … hermeneutischer Zirkel) Der Aspekt verstanden werden erlaubt keine strenge Formalisierung (denn was bedeutet verstanden werden – wie kann man es messen) sehr wohl lässt sich aber der Aspekt Information erzeugen formalisieren. Beispiel: Person A bittet Person B, das Licht einzuschalten: Sequenz von Zeichen: B I T T E S C H A L T E D A S L I C H T A N Person B interpretiert die Zeichenkette = wertet die Semantik, die Bedeutung der Zeichenkette aus: ???? Person B generiert neue Information: Licht = on oder stellt sich einen erleuchteten Raum vor, was neurologisch zu messen ist. Da Semantik und Pragmatik eng miteinander verzahnt sind spricht man auch vom semantopragmatischen Aspekt der Information

42 Semantische Ebenen Der semantopragmatischen Aspekt der Information zeigt die Unmöglichkeit eines absoluten Begriffs von Information, d.h. Information ist relativ zu den semantischen Ebenen der beteiligten Systemen. Beispiel (siehe 2.1.2): Person A spricht deutsch, Person B kann kein deutsch d.h. die semantischen Ebenen sind völlig disjunkt. Daher ist in diesem Bezugssystem zwar der syntaktische Aspekt von Information, aber keine semantischer und damit (sehr wahrscheinlich;-) auch kein pragmatischer Aspekt und damit auch keine Information vorhanden. In der Realität sind unterschiedliche semantische Ebenen die Regel und verändern sich auch dynamisch: Beispiel: Beim Erlernen der Muttersprache testet ein Kleinkind zunächst Laute. Bei einer positiven Reaktion (z.B. Ma-Ma) erfolgt rudimentäre Wortbildung, die mit dem Semantikverständnis von Worten zu komplexeren syntaktischen Strukturen (Sätzen) mit komplexeren semantischen Strukturen weiterentwickelt werden. In der Informatik strebt man oft (z.B. bei einer Datenkommunikation) gleichartige semantische Ebenen an.

43 42 2.2Nachrichtentechnische Definition (nach Shannon) Information hat vielfältige Repräsentationsformen. Noch vor Entstehen der Informatik als Wissenschaft hat Claude Elwood Shannon ( ) wichtige Maßzahlen zur Erfassung von Information definiert. Dabei geht er von der nachrichtentechnischen Repräsentation von Information, der Nachricht aus. Diese Repräsentation von Information hat eigentlich nur syntaktische Aspekte (im Sinne der Semiotischen Dreidimensionalität), denn es wird weder nach dem Sinn der Nachricht gefragt, noch nach deren Konzequenz. Dieses Unterkapitel stellt diese Maßzahlen und deren Grundlagen dar. Inhalt: 1.Nachricht 2.Informationsgehalt einer Nachricht 3.Informationsgehalt eines Zeichens 4.Mittlerer Informationsgehalt 5.Informationsgehalt des Menschen

44 Definition: Nachricht sei Alphabet X: Menge von Symbolen/Zeichen X = {x 1, x 2,... x n } Eine Zeichenkette (ein Wort) der Länge n über X ist eine Folge von n Zeichen aus X (ein n-Tupel über X) Beispiel:X={a,b} Worte über X:{a,b,ab,ba,aba,abb,baa,bbb,...} Worte der Länge n mit n=3:{aaa,aab,aba,abb,baa,bab,bba,bbb} Die Menge aller n-Tupel über X ist das n-fache Kreuzprodukt X X... X (n mal), bezeichnet als X n |X n | = | X X... X | = |X| * |X| *... * |X| = |X| n Die Anzahl der Elemente alle Worte mit der maximalen Länge n ist |X| n Wird eine Zeichenkette übermittelt, so spricht man von Nachricht N x SenderKanalEmpfänger Störung Informationsübetragung (nach Shannon, Hartley, Weaver und Wiener)

45 Definition: Informationsgehalt einer Nachricht Ein Maß für die Information (der Informationsgehalt) einer Nachricht N n,x der Länge n (über ein Alphabet X) ist die kürzeste Länge der Beschreibung, die notwendig ist, um die Nachricht N n,x aus der Menge aller möglichen Nachrichten der Länge n sicher zu ermitteln Beispiel: Information der Nachricht N 8,{0,1} : Suche in |{0,1}| 8 = 256 Wörtern Der Informationsgehalt einer aus mehreren (voneinander unabhängigen) Zeichen bestehenden Zeichenkette ist gleich der Summe der Informationen der einzelnen Zeichen: 1 * ld(|X|) + 1* ld(|X|) * ld(|X|) = n * ld(|X|) = ld(|X| n ) Optimal mit binärem Suchen Anzahl Fragen: ld(|X n |) = ld(|X| n ) = n ld(|X|) obere Hälfte ? janein obere Hälfte ? janein obere Hälfte ? janein...

46 Definition: Informationsgehalt eines Zeichens Idee: Der Informationsgehalt eines Symbols x i hängt von der Wahrscheinlichkeit seines Auftretens ab: Je seltener ein Symbol auftritt, desto höher ist sein Informationsgehalt: h(x i ) = f(1/p(x i )) Definition nach Shannon (ca. 1950): Der Informationsgehalt h (Einheit bit) eines Symbols x i ist definiert als der Logarithmus Dualis des Reziprokwertes der Wahrscheinlichkeit, mit der das Symbol auftritt: h(x i ) = ld(1/p(x i )) = -ld p(x i )

47 Beispiel: Informationsgehalt Beispiel: Sei die Wahrscheinlichkeit von E = 0,5 und die von H = 0,25 Informationsgehalt des Zeichens E : h E = ld (1/0.5) = 1bit Informationsgehalt des Zeichens H : h H = ld (1/0,25) = 2 bit Informationsgehalt der Zeichenkette EHE h EHE = ld(2) + ld(4) + ld(2) = ld(2 * 4 * 2) = 4 bit log a b = log c b log c a mit a = 2, c = 10 gilt: ld b = lg b lg 2 3,322 lg b Umrechnungsregel des ld in den 10er-Logarithmus (lg)

48 Definition: Mittlerer Informationsgehalt Kennt man die Einzelwahrscheinlichkeiten aller möglichen Symbole einer Symbolsequenz, so ist der mittlere Informationsgehalt H s der Symbole s (Entropie der Quelle) definiert als: H s = (p(x i ) * h(x i )) = (p(x i ) * ld(1/p(x i ))) = - p(x i ) * ld(p(x i ))) Der mittlere Informationsgehalt H s,n einer Symbolkette der Länge n ist: H s,n = H s * n Beispiel H s = 0,5 * 1bit + 0,25 * 2bit + 0,25 * 2bit = 1,5 bit d.h. die Symbole haben einen mittleren Informa- tionsgehalt von 1,5 bit.

49 Informationsaufnahme des Menschen Beim Lesen (eines deutschen Textes) erreicht der Mensch eine Geschwindigkeit von ca. 25 Zeichen/sec das entspricht 25 * 2 Bit (mittleren Informationsgehalt in der deutschen Sprache) = 50 Bit/sec dieser Wert ist unabhängig vom Alphabet - kann also auch z.B. im chinesischen erreicht werden (weniger Zeichen/sec, größerer mittlerer Informationsgehalt). Nachrichten, die mit anderen Medien dargestellt werden, können ca. genauso schnell verarbeitet werden. Aufnahme des Menschen Bewusst aufgenommen werden ca. 50% von 50 Bit/sec also 25 bit/sec Bei einer Aufnahmedauer von ca. 16 Stunden am Tag ergibt sich eine Lebensinformationsmenge von ca. 3 * Bit die Speicherkapazität des Gehirns ist mit ca Bit auch in der Lage, diese Informationsmenge zu speichern (sogar 100 Mal) Die Lebensinformationsmenge findet auf einer CD-ROM Platz und ist über Glasfaserkabel in wenigen Sekunden zu übertragen.

50 49 2.3Algorithmische Definition Betrachten wir folgende Nachrichten (A und B): Nachricht A: Nachricht B: nach Shannon ist der Informationsgehalt der ersten Zeichenkette A identisch mit dem der zweiten Zeichenkette B (denn h A (0)=h B (0) und h A (1)= h B (1) ) Aber: Ist das (intuitiv) wirklich so ? Tatsächlich lässt sich die Information aus Nachricht B leicht (algorithmisch) beschreiben: 4 1en, dann 3 0en, das Ganze 4 mal Hat man also die Regelmäßigkeit der Nachricht verstanden lässt sich die Information einfacher (kürzer) formulieren. Im Sinne der Semiotischen Dreidimensionalität berücksichtigt die Algorithmische Definition von Information zusätzlich zur Syntax auch die Semantik. Inhalt: 1.Die Turing-Maschine 2.Das Turing-Programm 3.Beispiele

51 Einige Fragen 1.Kann jede Zeichenkette durch Regeln (einen Algorithmus) beschrieben werden. 2.Wie können diese Regeln zur Generierung von Zeichenketten beschieben werden? 3.Gibt es ein Modell, mit dem man solche Regeln formalisieren kann? Wie sieht ein solches abstraktes Model aus ? Gibt es genau ein Model oder mehrere ? Sind diese Modelle äquivalent ?

52 Die Turing-Maschine Als abstraktes Modell eines Computers beschrieb Alan Turing ( ) also noch vor der Erfindung des Digitalrechners - eine nach ihm benannte abstrakte Maschine Formal kann eine Turing-Maschine wie folgt beschrieben werden: Alphabet: A = {a 0,..., a n }, der Zeichenvorrat der Turing-Maschine, wobei a 0 das Leerzeichen ("blank") darstellt (Oft: a 1 =0, a 2 =1) Bandinschrift: B: Z A eine Zuordnung, die jeder Stelle des rechtsseitig unendlichen Bandes ein Zeichen zuordnet. Dabei wird festgesetzt, dass B(k) = a 0 für alle bis auf endlich viele. Kopfposition: k Z Zustände: eine endliche Menge von Maschinenzuständen.Q = {q 0,..., q m } Darunter sind q 0, der Anfangszustand und H Q, die Menge der Haltezustände, ausgezeichnet. Statt Haltzustände wird oft auch eine Halteaktion angegeben Turing-Tabelle: eine Übergangsrelation: d : A Q A Q {r, l, n, h}, das jedem (gelesenen) Zeichen in Abhängigkeit eines Zustandes ein neues Zeichen, einen Folgezustand und eine Aktion (r,l,n,h} zuordnet

53 Das Turing-Programm Die Aktionen: r (right): das Verschieben des Kopfes nach rechts l (left): das Verschieben des Kopfes nach links optional n (none): keine Bewegung des Kopfes optional h (halt): Impliziter Übergang in einen Endzustand a1a1 a2a2 a3a3 a4a4...a6a6 die Maschine im Zustand das unter dem Kopf gelesene Zeichen die Aktion der neue Zustand q q r oder l akak das neue Zeichen fallsso ist alal

54 Beispiel Das Busy beaver-Problem: Wie viele 1-en kann ein terminierendes Turing-Programm auf einem leeren Band mit einer vorgegebenen Anzahl von Zuständen maximal erzeugen. In dieser Notation wird statt eines Übergangs in den Haltezustand (z.B. q5) die Aktion halt ausgeführt. Der Rekord für |Z|=5 liegt bei en (J.Buntrock, H.Marxen, 1989) Es wurde gezeigt, dass es möglich ist, mehr als en zu generieren - allerdings nicht wie. 11 Schritte, 6 Einsen 96 Schritte, 13 Einsen

55 Information Die algoritmische Definition definiert Informationgehalt: Der algorithmische Informationsgehalt einer Nachricht ergibt sich aus der Länge L des kürzesten Algorithmuses (z.B. Turing-Programms), welches die Nachricht erzeugt. Daraus ergibt sich, dass der algorithmische Informationsgehalt (bis auf eine kleine Konstante) immer kleiner oder gleich dem (nachrichtentechnischen) Informationsgehalt einer Nachricht ist, denn im einfachsten Fall kann die Turing-Maschine die komplette Nachricht auf dem Turingband codieren und besteht aus einem leeren Programm. Es gibt keine Möglichkeit, für beliebige Nachrichten zu bestimmen, ob der algorithmische Informationsgehalt kleiner als der nachrichtentechnische Informationsgehalt (ob es also ein Turing-Programm gibt, welches die Nachricht geschickter codiert).

56 55 2.3Darstellung in der Informatik Die Wurzeln der Informatik liegen weniger in der Nachrichtentechnik, als vielmehr in der Mathematik. Darum ist die Repräsentation von Information als Nachricht weniger relevant als die Darstellung von Zahlen (in binärer Repräsentation) und algebraischen (boolschen) Objekten. In diesem Unterkapitel geht es um diese Repräsentationen. Inhalt 1.Das Bit in der Informatik 2.Die Darstellung des Bit 3.Beispiel 4.Das Byte und mehr

57 Das Bit in der Informatik Definition aus der Informatik: Ein bit ist die Informationsmenge in einer Antwort, auf eine Frage, die zwei Möglichkeiten zulässt: ja /nein wahr/falsch schwarz/weiß... Der Informationsgehalt eines Zeichens einer zweielementigen Alphabetes mit gleicher Auftretungswahrscheinlichkeit ist (nach Shannon) h = -ld p = -ld 0,5 = 1bit

58 Die Darstellung des Bit Diese zwei Möglichkeiten werden meist mit 0 bzw. 1 codiert Die technische Darstellung erfolgt u.a. mit Hilfe von: Ladung 0 = ungeladen 1 = geladen Spannung 0 = 0 Volt 1 = 5 Volt Magnetisierung 0 = nicht magnetisiert 1 = magnetisiert Licht 0 = kein Licht 1 = Licht Reflexionseigenschaften 0 = reflektiert 1 = reflektiert nicht...

59 Beispiel: Bitfolge Aus welcher Himmelsrichtung weht der Wind (N, O, S, W) ? Bei anzunehmender Gleichverteilung der Antworten ist der mittlere Informationsgehalt H = p(x i ) * ld(1/p(x i )) = 4*(0,25*2) = 2 bit Die Frage lässt sich in zwei Fragen umsetzen Weht der Wind aus N oder O (ja/nein) ? Weht der Wind aus O oder W (ja/nein) ? Eine mögliche Antwort: 1 Frage=ja, 2 Frage=nein lässt sich durch die Bitfolge 10 darstellen und bezeichnet eindeutig Norden als die Windrichtung 10 = Norden 11 = Osten 01 = Westen 00 = Süden Nimmt man noch die Zwischenrichtungen NO, SO, SW und NW hinzu, so können die 8 Zustände mit 3 Bit codiert werden (wie?)

60 Das Byte und mehr Aus bestimmten Gründen Geschwindigkeit von Lese- und Schreiboperationen Darstellungsmöglichkeit häufiger Zeichen (z.B. Alphabet) Darstellungsmöglichkeiten von Zahlen, etc. werden in der Informatik oft Vielfache von 8Bit-Gruppen verwendet (8Bit, 16Bit,...) Eine 8-Bitsequenz heißt ein Byte. Bestimmte 2er-Potenzen werden in der Informatik häufig als Maßzahlen (z.B. für Speichergrößen) verwendet: 1 KByte = 2 10 = 1024 Byte (1 Kilobyte) 1 MByte = 2 10 * 2 10 Byte (1 Megabyte) 1 GByte = 2 10 * 2 10 * 2 10 Byte (1 Gigabyte) 1 TByte = 2 10 * 2 10 * 2 10 * 2 10 Byte (1 Terrabyte)

61 60 2.4Zusammenfassung des Kapitels Was ist Information Nachrichtentechnische Definition Informationsgehalt eines Zeichens (x)h(x) = ld (1/p(x)) = - ld (p(x) einer Nachricht (n)h(n) = h(n 1 ) + h(n 2 ) + h(n 3 ) +... Mittlerer Informationsgehalt ein/aller Zeichen(s) (x)H(x) = p(x i ) * h(x i ) einer Nachricht (n)n * H(x) Algorithmische Definition Definition in der Informatik Bits und Bytes Achtung: Nicht verwechseln !

62 61 Kapitel 3Codes Information ist abstrakt: damit Information in einem Rechner verarbeitet werden kann, muss sie in eine für den Rechner verarbeitbare Form transformiert werden. Dabei kann man sich beliebig ungeschickt anstellen. Dieses Unterkapitel beschreibt, wie eine solche Transformation funktionieren kann, welche Möglichkeiten man dabei hat und gibt ein Maß für die Qualität einer Transformation an. Inhalt 1.Definitionen 2.Codes zur Optimierung der Codelänge 3.Codes zur Fehlererkennung und Fehlerkorrektur 4.Beispiele … und das Wort ward Fleisch Johannes 1.14

63 62 3.1Definitionen … ein paar Definitionen.. Inhalt 1.Definition 2.Willkürliche Codes 3.Fano-Bedingung 4.Mittlere Wortlänge 5.Redundanz

64 Definition: Code Definition: Seien X,Y zwei Alphabete Eine Codierung ist eine Abbildung C:X n Y m aller n-Tupel aus X nach m-Tupel aus Y. oft ist n=1 oft ist X,Y = {0,1} Die Worte aus Y m werden Code genannt. Die Umkehrrelation C -1 bezeichnet man als Dekodierung Definition: Ein Code heißt vollständig, wenn alle Wörter aus X n mit Hilfe des Codes abgebildet werden können. Definition: Für ein Wort X i n aus C:X i n Y i m ist m die Länge l(X i n ) von C(X i n ) (Zur Erinnerung: meist in n=1, d.h. die Codierung bildet ein jeweils ein Zeichen x i auf mehre Zeichen x i m ab) Definition: Ein Code heißt Code gleicher Länge, wenn die Anzahl der Symbole auf die ein Wort abgebildet wird, für alle Worte gleich ist (also: l(X n )=m konstant für alle X n Y m ). Ansonsten heißt der Code: Code unterschiedlicher Länge

65 Definition: Eindeutigkeit Definition: Ein Code heißt eindeutig, wenn C -1 injektiv ist, ansonsten heißt er mehrdeutig Codes sollten also (meist) so beschaffen sein, dass sie bei der Decodierung eindeutig sind. Gegenbeispiel: Problem Dekodierung: = (aui) (aoil) zphh * pcll * p A0,22,320, ,60 E0,31,740,520120,60 I0,22,320, ,60 O0,252,000,501120,50 U0,054,320, ,25 R=L-H=0,38H = 2,17L = 2,55

66 Definition: Fano-Bedingung Fano-Bedingung: Kein Codewort darf Anfang eines anderen Codewortes sein Beispiel: Die Fano-Bedingung ist hinreichend aber nicht notwendig hinreichend: Wenn die Fano-Bedingung erfüllt ist, ist der Code eindeutig nicht notwendig:Auch eine Codierung, die die Fano-Bedingung nicht erfüllt kann eindeutig sein. Beispiel: a 1, b 10 Anmerkung: Eine Betrachtung der Fano-Bedingung macht eigentlich nur Sinn bei Codes unterschiedlicher Länge (warum ?) zc A101 E01 I100 O11 U11100 zc A00 E10 I010 O11 U011

67 Definition: Mittlere Wortlänge Codiert man die Zeichen eines Alphabetes binär (also mit Sequenzen eines 2- Zeichen-Alphabetes, z.B. 0 und 1), so versteht man unter der mittleren Wortlänge L eines Codes die mit den Auftrittswahrscheinlichkeiten gewichtete Summe der Längen l(x i ) der den einzelnen Symbole entsprechenden Codewörtern L = p(x i ) * l(x i ) Beispiel yxxzyx H = 1,5 Bit L = 1,5 Bit

68 Definition: Redundanz Die mittlere Wortlänge eines Binärcodes ist immer größer oder gleich dem mittleren Informationsgehalt. Die Differenz zwischen mittlerer Wortlänge und mittlerem Informationsgehalt wird als Redundanz R des Codes bezeichnet: R = L - H Die Redundanz bezogen auf die Wortlänge nennt man relative Redundanz r: r = R / L Redundanz ist also ein Maß für die Qualität einer Kodierung (insofern die Länge eines Codes als Qualität angesehen wird)

69 Redundanz – Beispiel Beispiel yxxzyx H = 1,5 Bit L = 1,5 Bit H = 1,156 Bit L = 1,3 Bit H= p i * h i = - p i * ld(p i ) = 0,360+0,464+0,332 = 1,156 L= p i * l i = 0,7+0,4+0,2 = 1,3 R = L - H = 1,3 - 1,156 = 0,144 r = R / L = 0,144 / 1,3 = 0,111

70 Codierungsarten Die Entropiekodierung kodiert ungeachtet der zugrundliegenden Information und betrachtet die zu komprimierten Daten als reine Bitsequenz (also nur die Syntax). es werden nur (informationstheoretische) Redundanzen eliminiert, es geht keine Information verloren. unterschiedliche Kompressionsquoten bei unterschiedlichen zu komprimierenden Daten. Die Quellenkodierung ist abhängig von den zu kodierenden Informationen (daher: Quellcodierung). und verwendet dazu die Semantik der zu kodierenden Information. eliminiert für das Ziel (z.B. den Menschen) definierte Redundanzen und ist (meist) verlustbehaftet. Spezifika der Informationen können dadurch gut genutzt werden und man erreicht eine wesentlich bessere Kompressionsraten bei "akzeptabler" Qualität.

71 70 3.2Huffman-Codierung Oft ist es wichtig, einen Code möglichst kurz zu gestalten aus Gründen der Speicherplatzoptimierung aus Gründen der Übertragungskapazitäts-Optimierung … Idee Häufige Symbole – kurze Codes, Seltene Symbole – lange Codes Kodierung Die Häufigkeit des Auftretens der Bitmuster (Bytes) wird bestimmt Die am häufigsten auftretenden Bytes werden mit kurzen Bitfolgen (Huffmann-Code) kodiert Der Huffmann-Code wird zur Kodierung der Bitfolge verwendet Dekodierung Dekodierer besitzt identischen Huffmann-Code (oder bekommt die Zuordnungstabelle explizit übertragen) Dekodierer setzt den Huffmann-Code in Bytefolge um Die Huffmann-Codierung generiert einen vollständigen, eindeutigen Code unterschiedlicher Länge (der die Fano-Bedingung erfüllt)

72 Vorgehen Der Baum wird von oben nach unten mit den zwei Buchstaben (oder Buchstabengruppen) mit den jeweils kleinsten Wahrscheinlichkeiten schrittweise aufgebaut sei P(A) = 0,16 P(B) = 0,51 P(C) = 0,09 P(D) = 0,13 P(E) = 0,11 P(B)=0,51 P(BCEAD)=1,0 10 P(CEAD)=0,49 10 P(D)=0,13P(A)=0,16 P(AD)=0,29 10 P(C)=0,09P(E)=0,11 P(CE)=0,2 10 Kodierung A = 000 B = 1 C = 011 D = 001 E = 010

73 Verbesserung Codierung ist optimal, wenn sich die Wahrscheinlichkeiten der Zeichen geschickt ergeben geschickt sind Wahrscheinlichkeiten mit negativen 2er-Potenzen. Durch Betrachtung (und Codierung) von Zeichenpaaren, -drillingen,..., n- Tupeln können solche geschickten Wahrscheinlichkeiten gefunden werden Die Redundanzen lassen sich sogar beliebig verkleinern, weil die Einzelwahrscheinlichkeiten von n-Tupeln beliebig klein werden und dadurch immer geschickter kombiniert werden können. Beispiel: zp A0,80 B0,20 zp AA0,64 AB0,16 BA0,16 BB0,04 Produkt der Einzelwahrscheinlichkeiten (Annahme: Auftritt von A,B unabhängig) zp AAA0,512 AAB0,032 ABA0, BBB0,008...

74 Beispiel für Tupelbildung Beispiel zphh * pcll * p A0,800,320,26010,80 B0,202,320,46110,20 R = 0,26H = 0,72L = 1,00 zphh * pcll * p AA0,64 0,41010,64 AB0,162,640,421020,32 BA0,162,640, ,48 BB0,044,640, ,12 R = 0,12H = 1,44L = 1,56

75 74 3.3Hamming-Codierung Manchmal ist es wichtig, Fehler in einem Code zu erkennen und ggf. zu korrigieren. (z.B. bei der Übertragung) Idee Gezielter Einsatz von Redundanz Nicht alle möglichen Codeworte sind daher gültig Kodierung Dem Code werden zusätzliche Bits hinzugefügt. Die Werte der zusätzlichen Bits stehen in Bezug zu den ursprünglichen Bits Beispiel aus der natürlichen Sprache Ich studiere in Gießer – Fehler kann erkannt und behoben werden Ich liebe rich – Fehler kann erkannt, aber nicht behoben werden

76 Beispiel ASCII Paritätsbit bei der 7-bit ASCII-Codierung wähle das 8te Bit so, dass immer eine gerade Anzahl von Bits gesetzt ist (gerade Anzahl = even parity, ungerade Anzahl = odd parity) erhält man eine Nachricht mit ungerader Anzahl, so weiß man, dass (mindestens) ein Bit verkehrt ist. man weiß allerdings nicht welches man weiß auch nicht, ob nicht mehr als ein Bit verkehrt ist man weiß bei richtigem parity-Bit auch nicht, ob nicht mehr als 1 Bit verkehrt ist Idee: den Abstand gültiger Worte so groß wie nötig wählen ZeichenBinärmit even := = 2 A := = 2 B := = 2 C := = 4

77 Hamming-Distanz Definition: Der Hamming-Abstand (die Hamming-Distanz D) zwischen zwei Wörtern ist die Anzahl der Stellen, an denen sich zwei Worte gleicher Länge unterscheiden. Beispiel: Hamming-Abstand von (A) und (B) = 2 Definition: Der Hamming-Abstand (die Hamming-Distanz D) eines Codes ist der minimale Hamming-Abstand zwischen zwei beliebigen Wörtern des Codes. Beispiel: Hamming-Abstand von ASCII (mit even parity) = 2 Einige Konsequenzen: Codes mit Hamming-Distanz = 0 sind nicht eindeutig Bei Codes mit Hamming-Distanz = 1 kann das Kippen eines Bits zu einem anderen gültigen Codewort führen (muss nicht) Bei Codes mit Hamming-Distanz = 2 kann ein Ein-Bit Fehler erkannt werden.

78 Fehlererkennung Fehler, bei denen höchstens D-1 Bits gestört sind, können sicher erkannt werden einige andere Fehler können, müssen aber nicht unbedingt erkannt werden können. (genau dann, wenn die Hamming-Distanz zwischen zwei Wörtern eines Codes größer als die Distanz des Codes ist) Fehler werden erkannt, wenn ein Codewort ungültig ist 1-Bit-Fehler 2-Bit-Fehler gültiges Codewort nur erkennbares Codewort korrigierbares Codewort A B

79 Fehlerkorrektur Fehler, bei denen höchsten (D-1)/2 Bits gestört sind, können sicher korrigiert werden einige andere Fehler können, müssen aber nicht korrigiert werden können (genau dann, wenn die Hamming-Distanz zwischen zwei Wörtern eines Codes größer als die Distanz des Codes ist) Falsches Codewort wird dem nächstmöglichen Codewort (d.h. dem mit der minimalen Distanz) zugeordnet. gültiges Codewort 1-Bit-Fehler 2-Bit-Fehler korrigierbares Codewort A B

80 Hamming Idee Jedes Prüfbit stellt die gerade Parität einer gewissen Menge von Bits (einschließlich sich selbst) sicher Jedes Datenbit kann in mehreren dieser Mengen einbezogen sein Die Hamming-Methode Es werden an der 1,2,4,8,... Stelle Prüfbits eingeführt Jedes Prüfbit hat damit in seiner dualen Stellennummer genau eine Stelle mit einer 1 (1,2,4,8,... = 1,10,100,1000,...) Alle Stellen im Wort, die an derselben Stelle eine 1 haben (und an den anderen 1 oder 0) werden aufsummiert 1 001,011,101,111,...also 1,3,5,7,... Stellen ,011,110,111,...also 2,3,6,7,... Stellen ,101,110,111,...also 4,5,6,7,... Stellen Das entsprechende Parity-Bit wird als even-parity Bit gesetzt Die Hamming-Methode generiert einen eindeutigen, vollständigen Code gleicher Länge PDDDPDPP... 18

81 Beispiel Hamming zu kodieren: 1011 Prüfbit 1 (001) relevant 011,101,111 also Bit 3,5,7 Summe = 3 Bit setzen Prüfbit 2 (010) relevant 011,110,111 also Bit 3,6,7 Summe = 2 Bit löschen Prüfbit 4 (100) relevant 101,110,111 also Bit 5,6,7 Summe = 2 Bit löschen kodiert: P1P1 101P1PP P

82 Beispiel Hamming Fehlerhafter Code: Verfahren prüfe alle Parity-Bits k = Summe der fehlerhaften Bitnummern k gibt die Nummer des gestörten Bits an (nur bei 1-Bit Fehler zuverlässig) Hier: Bit1 prüft 3,5,7: falsch Bit2 prüft 3,6,7: ok Bit4 prüft 5,6,7: falsch k = = 5 Bit5 muss getauscht werden

83 82 3.4Beispiele Anhand zweier Beispiele soll gezeigt werden, wie: die Natur, Gott (oder das fliegende Spaghetti-Monster) der Mensch Information codiert Inhalt 1.Genetische Codierung 2.Bildcodierung

84 Genetische Codierung Beim Menschen ist die Desoxyribonukleinsäure (DNS, engl. DNA) der Träger der genetischen Information und Hauptbestandteil der Chromosomen. Die DNS ist ein kettenförmiges Polymer aus Nukleotiden, die sich in ihren Stickstoffbasen unterscheiden (Thymin/Cytosin bzw. Adenin/Guanin,) das Alphabet des Codes ist also: {Thymin, Cytosin, Adenin, Guanin,} oder auch { T, C, A, G } Je drei aufeinanderfolgende Basen bilden ein Wort Es gibt also pro Wort 4 3 = 64 Kombination die Wortlänge ist also ld(64) bit = 6 bit Ein Gen enthält etwa 200 Worte Ein Chromosom enthält ca bis 10 5 Gene Die Anzahl der Chromosomen pro Zellkern ist beim Menschen 46 Die pro Zellkern gespeicherten Daten haben damit ein Volumen von 6 bit * 200 * 10 5 * 46 = bit * * 10 9 bit * 10 9 Byte = 1 GByte

85 Bildcodierung Datenkompression bei der Bildcodierung (z.B. JPEG, MPEG, …) durchläuft typischerweise vier Schritte: 1.Datenaufbereitung erzeugt eine geeignete digitale Darstellung der Information Bsp.: Zerlegung eines Bildes in Pixelblöcke 2.Datenverarbeitung erster Schritt der Kompression, z.B. Transformation aus dem Zeitbereich in den Frequenzbereich (z.B. durch Discrete Cosinus Transformation – DCT) 3.Quantisierung Gewichtung der Amplituden und Zuordnung zu Quantisierungsstufen (nicht notwendigerweise linear) 4.Entropiekodierung verlustfreie Kompression (z.B. durch Huffmann-Codierung)

86 85 3.6Zusammenfassung des Kapitels Definitionen Codierung, Code, Vollständigkeit, Länge Eindeutigkeit Fano-Bedingung mittlere WortlängeL = p(x i ) * l(x i ) RedundanzR = L - H Codierungsarten Huffmann-Codierung Vorgehen Verbesserungen Hamming-Codierung Beispiel ASCII Hamming-Distanz Fehlererkennung / -korrektur Hamming-Codierverfahren Beispiele Genetische Codierung Bildcodierung

87 86 Kapitel 4Zeichen und Zahlen Auch wenn Objekte der realen Welt beliebig komplex in Zusammensetzung und Struktur sind, so werden sie meist auf zwei einfache Repräsentationen - als Abstraktion - abgebildet: Zeichen und Zahlen. Dieses Kapitel beschreibt, wie diese Objekte in eine für den Rechner verarbeitbare Form kodiert werden können. Inhalt 1.Kodierung von Zeichen 2.Darstellung von Zahlen … da schrieb er auf die Tafeln, wie die erste Schrift war 5. Mose 10.4

88 87 4.1Kodierung von Zeichen Die Wurzeln der Informationscodierung in der Menschheitsgeschichte liegt in der Entwicklung der Schrift. Menschen haben dabei versucht, mündliche Erzählung in Form von Bild-, Silben- oder Buchstabenschriften dauerhaft zu codieren. Dabei kommt der Buchstabenschrift im westlichen Kulturbereich eine besondere Bedeutung zu und wird durch Schriftzeichen aus aller Welt zunehmend ergänzt. Diese Entwicklung spiegelt sich auch in folgenden Unterkapiteln wider. Inhalt ASCII EBCDIC UNICODE

89 ASCII -Tabelle (7Bit) American Standard Code for Information Interchange

90 ASCII - Sonderzeichen Bedeutung der Sonderzeichen im ASCII-Code

91 EBCDIC - Tabelle Extended Binary Coded Decimals Interchange Code

92 EBCDIC - Sonderzeichen Die Bedeutung der Sonderzeichen

93 Unicode Aktuelle Version (siehe auch Buchstaben und Symbole aus allen wichtigen geschriebenen Sprachen der Welt Amerika, Europa, Mittlerer Osten, Afrika, Indien, Asien, Pazifik Symbole Satzzeichen Sonderzeichen Wird genormt in ISO/IEC Kompatibilität mit ASCII F: identisch mit 7-bit ASCII 007F - 00FF: Latin-1 Supplement (nationale Sonderbuchstaben) FF: Blockgraphikzeichen (Box Drawing:...)

94 Unicode (www.wikipedia.org, Dez-3-06)www.wikipedia.org Unicode reserves 1,114,112 (= or 17 × 2 16, hexadecimal ) code points. As of Unicode 5.0.0, 101,063 (9.1%) of these codepoints are assigned, with another 137,468 (12.3%) reserved for private use, leaving 875,441 (78.6%) unassigned. The number of assigned code points is made up as follows: 98,884 graphemes 140 formatting characters 65 control characters 2,048 surrogate characters The first 256 codes correspond with those of ISO , the most popular 8-bit character encoding in the Western world. As a result, the first 128 characters are also identical to ASCII. The Unicode code space for characters is divided into 17 planes, each with 65,536 (= 2 16 ) code points, although currently only a few planes are used: Plane 0(0000–FFFF): Basic Multilingual Plane (BMP) Plane 1(10000–1FFFF): Supplementary Multilingual Plane (SMP) Plane 2(20000–2FFFF): Supplementary Ideographic Plane (SIP) Planes 3 to 13(30000–DFFFF) unassigned Plane 14(E0000–EFFFF): Supplementary Special-purpose Plane (SSP) Plane 15(F0000–FFFFF) Private Use Area (PUA) Plane 16(100000–10FFFF) Private Use Area (PUA) The cap of 2 20 code points (excluding Plane 16) exists in order to maintain compatibility with the UTF- 16 encoding, which addresses only that range. Currently, about ten percent of the Unicode code space is used. Furthermore, ranges of characters have been tentatively blocked out for every known unencoded script, and while Unicode may need another plane for ideographic characters, there are ten planes available if previously unknown scripts with tens of thousands of characters are discovered. This 20 bit limit is unlikely to be reached in the near future.

95 Unicode: Beispiele 05F1 FA0E AC xxD0 - xxDF Rejected

96 Unicode Bereiche Black = Latin scripts and symbols Light Blue = Linguistic scripts Blue = Other European scripts Orange = Middle Eastern and SW Asian scripts Light Orange = African scripts Green = South Asian scripts Purple = Southeast Asian scripts Red = East Asian scripts Light Red = Unified CJK HanHan Yellow = Aboriginal scriptsAboriginal Magenta = Symbols Dark Grey = DiacriticsDiacritics Light Grey = UTF-16 surrogates and private use Cyan = Miscellaneous characters White = Unused

97 96 4.2Darstellung von Zahlen Die Darstellung von Zahlen spielt in der Informatik nach wie vor eine wichtige Rolle. Dabei gibt es unterschiedliche Mengen von Zahlen und auch unterschiedliche Operationen auf Zahlen. Dieses Unterkapitel beschreibt die Grundlagen der Zahlenkodierung, gibt für alle Mengen von Zahlen eine konkrete Kodierung an und führt in die Computerarithmetik ein. Inhalt 1.Zahlensysteme 2.Konvertierung 3.Arithmetik 4.Ganze positive Zahlen 5.Ganze negative Zahlen 6.Gebrochene Zahlen 7.Gleitpunktzahlen 8.Standards

98 Zahlensysteme Nicht systematische Zahlendarstellungen, z.B.: Strichliste: I, II, III, IIII, IIII, IIII I,... römische Zahlen:MIM, IX,.... Systematische Zahlendarstellungen in einem Stellenwertsystem Jede Zahl N lässt sich als Sequenz von Zeichen a i darstellen Die Anzahl der notwendigen unterscheidbaren Zeichen ist B a i * B i Im Dezimalsystem ist B = 10 und die unterscheidbaren Zeichen sind: 0,1,2,3,4,5,6,7,8,9 Im Binärsystem ist B = 2 und die unterscheidbaren Zeichen sind: 0,1

99 Zahlensysteme - Beispiele Dezimalsystem: (Basis 10) =1 * * * * 10 0 Binärsystem: (Basis 2) =1 * * * * * * * * * Hexadezimalsystem (Sedezimalsystem) (Basis 16) Zeichen: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F =7 * * * 16 0 =7CF 16 = 0x07CF = H07CF 4 Zeichen einer Binärzahl lassen sich durch eine Hexadezimalziffer darstellen (4 Binärziffern nennt man auch NIBBLE) Oktalsystem (Basis 8) Zeichen: 0,1,2,3,4,5,6, =3 * * * * 8 0 = Zeichen einer Binärzahl lassen sich durch eine Oktalziffer darstellen

100 Konvertierung: Intuitivmethode Addition von geeigneten Zweierpotenzen (Dezimalzahl Dualzahl) positive Zweierpotenzen für Vorkommaanteil negative Zweierpotenzen für Nachkommaanteil Vorgehen (getrennt nach Vor- und Nachkommateil) Suche größte Zweierpotenz, die noch in die Zahl passt Subtrahiere die Zweipotenz von der Zahl daraus ergibt sich die neue Zahl für die Suche der Zweierpotenz Dieses Vorgehen terminiert beim Vorkommateil: wenn die Zahl = 0... beim Nachkommateil: wenn die Zahl erreicht ist, vielleicht nie Beispiel: = = = = , , ,5= 0,3125 0, , ,25 = 0,0625 0, , ,0625= 0 0, , =100111,

101 Konvertierung: Restwertmethode Erzeugen des Hornerschemas (Ausklammern der Basis b) c 0 = a n b n + a n-1 b n a 2 b 2 +a 1 b 1 + a 0 b 0 c 0 = ((... (a n b + a n-1 ) b a 2 ) b +a 1 ) b + a 0 c 0 / b = c 1 Rest a 0, mit c 1 = (... (a n b + a n-1 ) b a 2 ) b +a 1, c 1 / b = c 2 Rest a 1, mit c 2 =... (a n b + a n-1 ) b a 2,... c n / b = 0 Rest a n ( terminiert mit c n+1 = 0 ) Konversion der Nachkommastellen (folgt aus Hornerschema): 1.Multiplikation mit Basis (bis ganzzahliges Ergebnis oder gewünschte Genauigkeit) 2.Abspalten der Vorkommastelle des Ergebnisses, weiter mit 1. Beispiel 19 : 2 =9Rest 1 9 : 2 =4Rest 1 4 : 2 =2Rest 0 2 : 2 =1Rest 0 1 : 2 =0Rest 1 0,6875 * 2 =1,3751 abspalten 0,375 * 2 =0,750 abspalten 0,75 * 2 =1,51 abspalten 0,5 * 2 =11 abspalten ,1011 c1c1

102 Arithmetik Addition Subtraktion Multiplikation Division = = = = 0 Übertrag = = 1 Übertrag = = 0 0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = Überträge Überträge * Überträge : 11 =

103 Ganze positive Zahlen Positive ganze Zahlen werden meist direkt in ihrer binären Darstellung kodiert. Die BCD (Binary Coded Digits) - Darstellung von Zahlen ist eine Mischform aus Dezimal- und Binärdarstellung: Jede Ziffer der Dezimalzahl wird binär dargestellt. Die Darstellung jeder Ziffer erfolgt mit 4 Bits. Die Reihenfolge der Ziffern bleibt erhalten. Beispiele: Pseudotetraden

104 Ganze negative Zahlen: Probleme Darstellung des Vorzeichens im ersten Bit, z.B. 0000=01000= =11001= =21010= =31011= =41100= =51101= =61110= =71111=-7 Nachteil durch Redundanz der Darstellung der 0 Nachteil durch Probleme beim formalen Addieren

105 Ganze negative Zahlen: Zweierkomplement Zweierkomplementdarstellung -2 n... +(2 n -1) Negative Zahl durch bitweise Komplementierung und Addition von 1 (eventl. Überlauf weglassen) 0000=0Beispiel: =11001= Binärdarstellung 0010=21010= Komplement 0011=31011= Komplement + 1 = =41100= =51101= =61110= =71111=-1 Vorteile Darstellung des Vorzeichens im ersten Bit Abdeckung von 16 Zahlen, also keine Redundanz Kein Nachteil durch Probleme beim formalen Addieren Subtraktion durch Addition des Zweierkomplements Auf gleiche Länge bringen 2. Bitweise Komplementbildung 3. 1 Addieren 4. Addieren (wie bei Binärzahlen) 5. Überlauf ggf. weglassen

106 Gebrochene Zahlen: Binärdarstellung Darstellung mit Vor- und Nachkommateil Beispiele Gebrochene BinärzahlGebrochene Dezimalzahl 0.10, , , ,1 Mit 32 Bit lassen sich nur 2 32 verschiedene Zahlen darstellen. Problem: extrem große und extrem kleine Zahlen lassen sich mit wenigen Bits nicht darstellen Bei 8 Bit mit 4 Vorkomma und 4 Nachkommastellen (ohne Vorzeichen): < n < ,0675 < n < 15,9425

107 Gebrochene Zahlen: Exponentialdarstellung Anforderung sehr große und sehr kleine Zahlen sollen darstellbar sein Masse Elektron = 9 * g Anzahl Moleküle pro Mol = 6,022 * die relativen Genauigkeiten sind wichtiger als die absoluten Ältere Quellen geben die Anzahl der Moleküle pro Mol mit 6,065 * an Eine Änderung in der Mantisse von 0,04 entspricht einer Toleranz von 6,065 / 6,022 1,0071 also ca. 0,7%. Fixkommadarstellung wäre große Verschwendung zur Darstellung dieser beiden Größen wären 194 Bit nötig 87 Bit Vorkommateil 107 Bit Nachkommateil Idee: Signifikante Stellen und Größenordnung werden getrennt Signifikant Masse Elektron: 9 Größenordnung Masse Elektron:

108 Gleitpunktzahlen: Real Darstellung Darstellung durch Real-Zahlen, bestehend aus drei Teilen: Vorzeichenbit V Gibt an, ob die Zahl positiv oder negativ ist Mantisse M Wird mit dem Exponenten multipliziert Die Normalform wird erreicht, indem das Komma soweit nach links oder rechts geschoben wird, bis die erste Stelle nach dem Dezimalpunkt die erste von Null verschieden Ziffer ist. Der Exponent wird entsprechend der Verschiebungen erhöht oder vermindert. Exponent E Potenz einer Basiszahl (2) mit der die Mantisse multipliziert wird wird oft in BIAS-Darstellung abgelegt, d.h. wird mit 126 addiert um negatives Vorzeichen zu vermeiden. Vorsicht: 126 (nicht 128). Asymmetrisch, da 2 1 bei der Normalisierung zweimal geschoben wird, 2 -1 gar nicht Vorsicht: Bei manchen Maschinen wird so normalisiert, dass die erste Stelle vor dem Komma gleich 1 wird, dann ist der BIAS 127

109 Gleitpunktzahlen: Umwandlung Umwandlung Dezimalzahl in binäre Gleitpunktzahl (nach IEEE 754) Umwandlung der Dezimalzahl in Binärzahl mit Nachkommateil Verschieben des Kommas nach links oder rechts bis zur Normalform Damit ist erste Nachkommastelle = 1 und daher redundant, kann also in der Mantisse weggelassen werden. 2 * größere Genauigkeit der Mantisse Erhöhen oder Erniedrigen des Exponenten Umwandlung des Exponenten in binäre Form Addition des BIAS = (um negative Exponenten zu vermeiden) auf den Exponenten Das Vorzeichen der Mantisse wird bestimmt: positiv 0, negativ 1 IEEE 754 sieht noch eine optionale Rundung der Mantisse vor Nicht jede gebrochene Dezimalzahl lässt sich endlich als gebrochene Binärzahl darstellen (und umgekehrt). Dadurch entstehen Rundungsfehler

110 Gleitpunktzahlen: Beispiele Beispiel: 148, Konvertieren: ,101 2.Normalisieren: ,101 = 0, *2 +8 Exponent ist 8. M = (die führende 1 ist in Normalform redundant) 3.Bias addieren E = = = Vorzeichen V= 0 5.Ergebnis :VEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM Beispiel: -2, Konvertieren: 10,11 2.Normalisieren: 10,11 = 0,1011*2 +2 Exponent ist 2. M = 011 (die führende 1 ist in Normalform redundant) 3.Bias addieren E = = = Vorzeichen V= 1 5.Ergebnis :VEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM

111 Gleitpunktzahlen: Arithmetik Addition/Subtraktion Die Exponenten werden angeglichen, indem die Mantisse des Operanten mit dem kleineren Absolutbetrag entsprechend verschoben wird. Anschließend werden die Mantissen addiert Beim Verschieben können Stellen verloren gehen. Multiplikation Die Mantissen der Operanten werden multipliziert Die Exponenten werden addiert Sind die Exponenten zu groß, kann es zu Exponenten-Overflow kommen Division Die Mantissen der Operanten werden dividiert Der Exponent ergibt sich aus der Differenz des Dividenden und Divisors Ist der Divisor zu klein und/oder der Dividend zu groß kann es zu einem Exponenten- Underflow kommen. Das Ergebnis wird dann zu 0, alle Ziffern sind verloren Nach allen Operationen wird die Normalform ggf. wiederhergestellt

112 Standards Short (8Bit) Integer (16Bit) Unsigned Int (16Bit) LongInt (32Bit) Real nach IEEE 754 Float1 VZ-Bit, 8 Bit E, 23 Bit M (32Bit) Double1 VZ-Bit, 11 Bit E, 52 Bit M(64Bit) zwei Varianten 0,5 M < 1 bzw. 1 M < 2 Numbersignexponent mantissa normalized number0/101 to FEany value denormalized number0/100any value zero0/1000 infinity0/1FF0 NaN0/1FFany value but 0

113 Standards: Beispiel (Delphi) In Borlands Delphi (Pascal) sind folgende Typen festgelegt: TypBereichSignifikantGröße (Byte) Real482,9 x 10^-391,7 x 10^ Single1,5 x 10^-453,4 x 10^ Double5,0 x 10^-3241,7 x 10^ Extended3,6 x 10^-49511,1 x 10^ Comp-2^63+12* Currency Der generische Typ Real ist in der aktuellen Implementierung mit dem Typ Double identisch. ( )

114 Zusammenfassung des Kapitels Darstellung von Zeichen ASCII EBCDIC UNICODE Darstellung von Zahlen Zahlensysteme Konvertierung Arithmetik Ganze positive Zahlen Ganze negative Zahlen Gebrochene Zahlen Gleitpunktzahlen Standards

115 114 Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte) Abstraktion der Wirklichkeit dar und spiegeln in vielen Fällen die Strukturen der Wirklichkeit wider. In diesem Kapitel wird ein Überblick über die wichtigsten abstrakten Datenstrukturen gegeben, wobei dieser Begriff zum Begriff des Datentyps erweitert wird. Anmerkung: Dieses Kapitel abstrahiert die Objekte mit denen Sie in Einführung in die Programmierung umgehen. Dort werden diese abstrakten Objekte konkret für Java vorgestellt. Inhalt 1.Datenstrukturen - Datentypen 2.Datentypen: Ein Überblick 3.Konkrete Datentypen 4.Abstrakte Datentypen … da schied Gott das Licht von der Finsternis 1. Mose 1.4

116 Datenstrukturen - Datentypen In der Literatur wird meist der Begriff Datenstruktur verwendet. In diesem Unterkapitel soll der Unterschied zwischen diesem Begriff und dem Begriff des Datentyps erläutert werden. Inhalt 1.Datenstrukturen 2.Datentypen 3.Variablen eines Datentyps

117 Datenstrukturen In der Informatik werden Objekte der realen oder abstrakten Welt erfasst Bei der Erfassung beschränkt man sich möglichst auf die für den weiteren Transport / Speicherung/Verarbeitung/Umsetzung notwendige Information Zur internen Repräsentation werden diese Objekte abstrahiert Zur Abstraktion gehört die Erkennung von Strukturen - zunächst im Sinne einer Aggregation. Also Aus welchen Teilobjekten bestehen Objekte ? In welchem Verhältnis stehen die Teilobjekte zueinander ? Welches sind die atomaren Teilobjekte ? es existieren noch weitere strukturelle Beziehungen (z.B. Vererbung) Anschließend werden diese Objekte typisiert. Typisierung ist die Einteilung von abstrakten internen Objekten in Gruppen mit gleichen oder ähnlichen Eigenschaften.

118 Datentypen Typen sind also nicht die intern repräsentierten Objekte, sondern beschreiben die Eigenschaft einer Gruppe von Objekten. Zu diesen Eigenschaften gehören: Struktur Wertebereich anwendbare Operatoren, Funktionen, Relationen Beziehungen zu anderen Typen interne Repräsentationsweise … Einige Anmerkungen:: Der Begriff Datentyp ist weitergehend als der Begriff Datenstruktur In der Objektorientierten Programmierung wird statt Datentyp auch der Begriff Klasse verwendet (Klassen beschreiben mehr Eigenschaften) Konkrete Repräsentanten eines Datentyps werden (u.a) Variable oder - bei OO-Sprachen - Instanz genannt Beispiel: Imaginäre Zahlen

119 Variable eines Datentyps Einen speziellen (rechnerinternen) Repräsentanten eines Datentyps bezeichnet man als Variable. Die Festlegung, von welchem Datentyp eine Variable ist, bezeichnet man als Variablendeklaration. Die Zuordnung eines Typs Typ an eine Variable X wird (zunächst) wie folgt notiert: var x : Typ; Eine Variable hat alle Eigenschaften eines Datentyps. Zusätzlich dazu hat eine Variable: einen konkreten Wert. Der Wert muss aus dem Wertebereich des Datentyps sein (oder undefiniert) Die Zuweisung eines Wertes Wert an eine Variable X sei (zunächst) wie folgt notiert: x = Wert; einen konkreten Speicherplatz Dieser Speicherplatz ist so dimensioniert, dass die Struktur der Variable abgebildet werden kann Dieser Speicherplatz wird (meist) implizit durch die Deklaration zugeordnet Beispiel: var x : Datentyp; // x ist vom Typ: Datentyp x = 531; // Zuweisung von 531 an X

120 Datentypen: Überblick Nachdem sich nun der Begriff des Datentyps als Oberbegriff der Datenstruktur erwiesen hat, konzentrieren wir uns im Rest des Kapitels auf wichtige Datentypen. In diesem Unterkapitel wird ein Klassifikationssystem für die in der Informatik verwendeten Datentypen aufgestellt und kurz erläutert Inhalt 1.Klassifikation der Datentypen 2.Erläuterung der Klassifikation

121 Klassifikation der Datentypen Datentypen IdealisierteAbstrakteKonkrete EinfacheStrukturiertePointer(Zeiger) Boolean (Wahrheitswert) Integer (Ganzzahl) Char (Zeichen) Enumeration (Aufzählung) OrdinaleReal (Fließkomma) Array (Feld) Record (Verbund) Union (Variantenverb.)...

122 Erläuterung der Klassifikation Idealisierte Datentypen aus der Mathematik bekannte Datentypen: R, N, Z,... Variablen dieser Typen sind oft nicht endlich darstellbar (Bsp: 2) In einem Computer-Algebra-System symbolisch darstellbar (Bsp: 2^( 1/2)) Konkrete Datentypen in einem Rechner von Hard- oder Software bereitgestellte Datentypen entweder vordefiniert oder durch den Benutzer definierbar Abstrakte Datentypen verbergen ihren inneren Aufbau vor dem Benutzer bestehen aus beliebigen Strukturen über konkrete/idealisierte Datentypen, sowie aus Zugriffsfunktionen bzw. Prozeduren Beispiel:Baum insert (Element) delete (Element) search (Element)

123 Konkrete Datentypen Die am häufigsten abstrahierten Objekte der realen Welt sind, zumindest was die für eine weitere Verarbeitung notwendigen Informationen betrifft, einfach strukturiert und lassen sich demnach mit konkreten Datentypen abbilden. Dieses Unterkapitel gibt einen Überblick über alle konkreten Datentypen und beschreibt diese. Inhalt 1.Einfache Datentypen 2.Strukturierte Datentypen 3.Verweise

124 Einfache: Boolean (Wahrheitswert) zur Darstellung von Wahrheitswerten Wertebereich: true, false intern in manchen Programmiersprachen als 1 bzw. 0 dargestellt Operatoren: und, oder, nicht, Vergleiche,... Operatoren entsprechend der boolschen Algebra oft auch allgemeine arithmetische Operationen möglich Vorsicht vor Integer-Arithmetik mit Boolean-Variablen Notation: var booleanVar : boolean; Beispiel: var switch : boolean; switch = false; // = 0 Bool-Literal switch = not(switch); // = not(0) = 1 switch = switch and not(switch); // = 1 and 0 = 0 switch = switch or not (switch); // = 0 or 1 = 1 Wir müssen uns gleich angewöhnen die Dinge so zu bezeichnen, wie sie in der Informatik bezeichnet werden: Schlüsselwort var (Variablen)Bezeichner switch Schlüsselzeichen(-wort) : (Typ)Bezeichner boolean Schlüsselzeichen(-wort) ; Bezeichner switch Operator = (Boolean)Literal false Schlüsselzeichen(-wort) ;

125 Einfache: Integer (Ganzzahl) zur Darstellung ganzer Zahlen mit oder ohne Vorzeichen Wertebereich: Unterschiedlich unsigned integer: Ganze Zahlen ohne Vorzeichen ( ) oft 16 bit bzw. 32 bit als short int bzw. long int bezeichnet Vorsicht:16 bit Integer ist verdammt wenig ((± 32267) Speicherplatz ist nicht mehr teuer benutzen Sie long int (Ausnahmen bestätigen die Regel) Operatoren: Grundrechenarten, Vergleiche Operatoren entsprechend der klassischen Algebra Notation: var integerVar : integer; Beispiel: var i : integer; i = 1; // = 1 Integer-Literal i = i + 32;´ // = = 33 i = i / 17; // = 33 / 17 = 1 ! i = i ; // bei unsigned Int.: Fehler !

126 Einfache: Char (Zeichen) zur Darstellung von Zeichen Vorsicht:Typischerweise wird die ASCII-Codierung zugrundegelegt, kann aber auch Unicode sein Wertebereich: Alle Zeichen Intern codiert als ASCII oder - neuerdings immer öfter - als Unicode ASCII: 8 Bit (7 benutzt), Unicode: 16 Bit Intern oft als Integer repräsentiert Operationen: Vergleich oft auch allgemeine arithmetische Operationen möglich Vorsicht vor Integer-Arithmetik mit char-Variablen Notation: var charVar : char; Beispiel: var symbol : char; symbol = A; // = A Char-Literal symbol = symbol + 32;´ // = A + 32 = a symbol = symbol - 128; // = a = Fehler

127 Einfache: Enum (Aufzählung) zur Darstellung endlicher benutzerdefinierter Wertebereich Es ist guter Stil, Mengen mit (garantiert) kleiner Mächtigkeit (<10) als Enum-Type zu deklarieren, anstatt sie z.B. als Integer zu kodieren. Intern werden Enum-Werte oft als Integer abgelegt Operatoren: Vergleich oft auch allgemeine arithmetische Operationen möglich Vorsicht vor Integer-Arithmetik mit Enum-Variablen Notation: var enumVar : enum { Wertemenge }; Beispiel: var ampelfarbe : enum {gruen,gelb,rot} ; ampelfarbe = gruen; // = gruen Enum-Literal // Vorsicht: C++ erlaubt das ampelfarbe = ampelfarbe +1 ; ´ // = gruen + 1 = gelb ampelfarbe = ampelfarbe +1 ; ´ // = gelb + 1 = rot ampelfarbe = ampelfarbe +1 ; ´ // = rot + 1 = Fehler !

128 Einfache: Real (Fließkomma) zur näherungsweisen Darstellung reeller Zahlen Wertebereich: Unterschiedliche Genauigkeiten und Wertebereiche Wertebereich entspricht typischerweise der IEEE 754 Norm, also: Float: 32 bit Double: 64 bit Operationen: Grundrechenarten, erweiterte Arithmetik, Vergleich Notation: var realVar : real; Beispiel: //--- Variable declaration var pi, flaeche, radius : real; // all real ! //--- Initialisation pi = 3,141; // needs not to be more accurate radius = 5; // might be changed by user //--- Computation of surface flaeche = 2 * pi * (radius ^ 2); // common formula

129 Strukturierte: Array (Feld) Arrays sind eine Aggregationen von Daten des gleichen Typs (des Basistyps) Aggregation := Zusammenfassung, Anhäufung, Angliederung Die Grenzen des Arrays sind (meist) statisch bestimmt Operation: Auswahl Die Auswahl eines Datenelementes erfolgt über einen ganzzahligen Index über den (Auswahl-)Operator [ ] Vorsicht: Zugriff außerhalb des deklarierten Bereiches führt zu Fehlern Notation: var arrayVar : array[min.. max] of Datentyp Beispiele Eindimensionales array: var Vektor : array[1..4] of real; Zweidimensionales array: var Matrix : array[1..3] of array[1..2] of real; Operator var m : array[1..3] of array[1..2] of real; var v : array[1..4] of real; v[3] = 5,03; v[4] = 4,12; m[1][2] = v[3] * 12 - v[4];

130 Strukturierte: Record (Verbund) Verbunde sind Aggregationen von Daten möglicherweise unter-schiedlichen Typs manchmal auch structure oder struct genannt Operation: Auswahl Die Auswahl erfolgt durch Angabe des Komponentennamens (durch einen Punkt vom Variablennamen getrennt) Notation: var recordVar : record { komponent1 : type1;... }; Beispiel: var d : record { tag : Integer; monat : Integer; }; d.monat = 10; d.tag = 20;

131 Strukturierte: Variant Record (Variantenverb.) Verbunde, deren Struktur mögliche Alternativen zulassen manchmal auch union genannt lassen Varianten eines Record-Types zu Operation: Auswahl (wie bei records über Punkt-Operator) Notation: var recVar : record { komponent1 : type_1;...; TAGGED TYPE case variant (variant1,...) of { variant1 : type_n;... } } Unterelement variant implizit definiert bei tagged type Nur ein Unterelement aus variant1,... (sinnvoll) verwendbar Beispiel: var adam,eva : record { name : array [1..20] of char;adam.sex = m; case sex (m,f) of {adam.muscle = 20,5; f: {IQ: integer};eva.sex = f; m: {muscle: real}; // in cmeva.IQ = 132; }

132 Strukturierte: Variant Record var adam,eva : record { name : array [1..20] of char;adam.sex = m; case sex (m,f) of {adam.muscle = 20,5; f: {IQ: integer;} eva.sex = f; m: {muscle: real;}} eva.IQ = 132; } Umsetzung: Variant Records mit Untagged Types (z.B. C, C++ : Union) (2. Variante) struct { char[20] name; enum {m,f} sex; //...adam.sex = m; union {adam.muscle = 20,5; int IQ;eva.sex = f; real muscle;} // in cmeva.IQ = 132; } adam, eva; namesexIQ / muscle

133 Vereinfachung der Notation (type) var Person : record { surname : array [1..20] of char; forename : array [1..20] of char; birthday : record { year : integer; month : enum {jan,...}; day : integer; }; }; var Akt_Datum : record { year : integer; month : enum {jan,feb,...}; day : integer; }; In (fast) allen Programmiersprachen ist es möglich, beliebig strukturierte Datentypen neu zu bezeichnen und diese Typ-Bezeichner wie vordefinierte Typen zu verwenden: Notation: type NeuTyp : Typ; Beispiel: type Datum : record { year : integer; month : enum {jan,feb,...}; day : integer; }; var Person: record {surname : array [1..20] of char; forename : array [1..20] of char; birthday : Datum }; var Akt_Datum: Datum;

134 Pointer (Zeiger, Verweis) Zeiger-Datentypen sind durch folgende Eigenschaften gekennzeichnet: Die Struktur ist identisch der eines Integer-Datentyp (also oft 16,32,... Bit) Der Wertebereich ist der des Adressbereiches eines Rechnersystems, der zusätzliche Wert nil bezeichnet einen ungültigen Zeiger. Operatoren sind: Erzeugen eines Zeigers (Referenzierung &) Zugriff auf verwiesenen Bereich (Dereferenzierung *) Integer-Operatoren (Vorsicht !!!!) Notation: var pointerVar : *Type; Beispiel: var x : *Integer; // Deklaration var y,z : Integer; // Deklarationen y = 5; // Initialisierung der Variablen y x = &y; // Referenzieren: x ist Zeiger auf y x* = 2; // Derefenzierung: das worauf x zeigt wird zu 2 z = y; // Variable z bekommt den Wert von Variable y zugewiesen. // z hat jetzt den Wert 2

135 134 Bsp.: x : *Integer; // Deklaration y : Integer; // Deklaration y = 5; // Initialisierung der Variablen y x = &y; // Referenzieren: x ist Zeiger auf y x* = 2; // Dereferenzierung: das worauf x zeigt x = 2; // Zuweisung ohne Dereferenzierung ! 5.3.3Pointer: Beispiel nil nil Vorsicht:: Werte oft undefiniert Wortadressen

136 Pointer: Dynamische Datentypen Mit konkreten, d.h. einfachen und strukturierten Datentypen lassen sich nur statische Struktur aufbauen d.h. Strukturen, deren Speicherbedarf beliebig aber fest sind Bem.: Die Beliebigkeit ist begrenzt durch die Gesamtspeicherkapazität Mit Zeiger-Datentypen lassen sich Strukturen aufbauen, die sich dynamisch auf- und abbauen lassen d.h. Strukturen, deren Speicherbedarf sich dynamisch verändern kann d.h. der Speicherplatz muss auch dynamisch organisiert werden. Bem.: Auch hier ist die Beliebigkeit begrenzt durch die Gesamtspeicher-kapazität Beispiel: type knoten : record { symbol : char; links : *knoten; rechts : *knoten; } var wurzel : knoten B CEDA Huffman (Bsp. aus Kap.2)

137 Beispiel: Kombinierte Datentypen Um nun beliebig komplexe Strukturen der realen Welt in einem Rechensystem abbilden zu können, kann man die vorgestellten Datentypen beliebig miteinander Kombinieren Beispiel.: type Person : record {type Date : record { surname : array [1..20] of char; year : integer; forename : array [1..20] of char; month : enum {jan,feb,...}; birthday : Date; day : integer; next : *Person;} previous : *Person; }

138 137 Datenstrukturen 5.4Abstrakte Datentypen Grundsätzlich lassen sich alle Objekte der realen Welt ausschließlich mit Hilfe einfacher Datentypen abbilden. Diese Abbildung ist aber meist unnatürlich, weil sie die Struktur realer Objekte nicht ausreichend berücksichtigt. Abhilfe schaffen hier strukturierte Datentypen, die allerdings grundsätzlich nur endliche Objektmengen repräsentieren können. Hier schaffen Zeigertypen Abhilfe. Kann man nun mit diesen Mitteln Strukturen realer Objekt natürlich abbilden, so fehlen diesen abstrakten Datentypen einige der Eigenschaften, die konkreten Datentypen von Datenstrukturen unterscheiden, dies sind insb. Operationen und Beziehungen zu anderen Typen. Einen vertieften Einblick in die bunte Welt abstrakter Datentypen bietet die Vorlesung des 2. Semesters

139 Zusammenfassung des Kapitels Wir sind damit auch an die Grenzen dessen gelangt, was in dieser Vorlesung über die Statik von Objekten gesagt werden soll und wenden uns einem noch spannenderem Themenbereich zu ;-) Datentypen IdealisierteAbstrakteKonkrete EinfacheStrukturiertePointer(Zeiger) Boolean (Wahrheitswert) Integer (Ganzzahl) Char (Zeichen) Enumeration (Aufzählung) OrdinaleReal (Fließkomma) Array (Feld) Record (Verbund) Union (Variantenverb.)...

140 139 Kapitel 6Algorithmus In den vorangegangenen Kapiteln wurde, aufbauend auf dem Begriff der Information, beschrieben, wie die statischen Objekte der Informatik aussehen und notiert werden können. In diesem Kapitel wird aufgezeigt, wie man die Verarbeitung dieser Objekte (also die Dynamik) beschreiben kann. Wesentlicher Begriff dabei ist der Begriff des Algorithmus Inhalt 1.Ein Beispiel 2.Definition 3.Die Strukturelemente 4.Strukturierung 5.Blockung 6.Iteration und Rekursion 7.Zusammenfassung Teile dieses Kapitels sind aus: R.Manthey: Vorlesung Informatik 1, Uni Bonn, 2001 … und Vögel sollen fliegen auf Erden 1. Mose 1.20

141 Ein Beispiel Zunächst soll ein kleines Beispiel in eine mögliche Aufgabenstellung aus dem (bekannten) Bereich der Mathematik einführen und dadurch auch eine (eingeschränkte) Vorstellung über die Aufgaben und Elemente eines Algorithmuses geben. Inhalt 1.Das Problem (Beispiel) 2.Ein Algorithmus I 3.Ein Algorithmus II 4.Vergleich der Algorithmen 5.Ein Algorithmus III 6.Fragestellungen 7.Ein weiterer Algorithmus

142 Das Problem Eine quadratischen Gleichung: Allgemeine Darstellung der quadratischen Gleichung Allgemeine Lösung der quadratischen Gleichung Lösung der quadratischen Gleichung x 2 + 8x + 7 = 0 x 2 + px + q = 0 x 1,2 = -p/2 p 2 /4 - q + - x 1,2 = -8/2 8 2 /4 - 7 = x 1 = -1 x 2 = -7

143 142 Zuweisungen 6.1.3Ein Algorithmus I 1.Lies die Zahlen p und q ein 2.Berechne die Zahl w = p 2 /4 - q 3.Berechne die Zahl x 1 = -p/2 + w 4.Berechne die Zahl x 2 = -p/2 - w 5. Gib x 1 und x 2 als Ergebniss aus Ein Algorithmus Berechnungen Ausgaben Eingaben Variable Konstante x 1,2 = -p/2 p 2 /4 - q + -

144 Ein Algorithmus II Ein zweiter Algorithmus 1.Lies die Zahlen p und q ein 2.Berechne die Zahl p/2 ; Nenne diese Zahl a 3.Berechne die Zahl a 2 ; Nenne diese Zahl b 4.Berechne die Zahl b-q ; Nenne diese Zahl c 5.Berechne die Zahl c ; Nenne diese Zahl d 6.Berechne die Zahl -a ; Nenne diese Zahl e 7.Berechne die Zahl e + d ; Nenne diese Zahl x 1 8.Berechne die Zahl e - d ; Nenne diese Zahl x 2 9. Gib x 1 und x 2 als Ergebniss aus FHSymbol1 Es gibt (oft unendlich) viele Algorithmen zur Lösung eines Problems x 1,2 = -p/2 p 2 /4 - q + -

145 Vergleich der Algorithmen Berechne die Zahl w = p 2 /4 - q Berechne die Zahl x 1 = -p/2 + w Berechne die Zahl x 2 = -p/2 - w Berechne die Zahl p/2 ; Nenne diese Zahl a Berechne die Zahl a 2 ; Nenne diese Zahl b Berechne die Zahl b-q ; Nenne diese Zahl c Berechne die Zahl c ; Nenne diese Zahl d Berechne die Zahl -a ; Nenne diese Zahl e Berechne die Zahl e + d ; Nenne diese Zahl x 1 Berechne die Zahl e - d ; Nenne diese Zahl x 2 A1A2 Anzahl Berechnungen107 Anzahl Zuweisungen37 Anzahl Variablen59 FHSymbol1 Welcher Algorithmus ist besser ? Warum ?

146 145 1.Lies die Zahlen p und q ein 2.Berechne die Zahl a = p/2 3.Berechne die Zahl b = a 2 4.Berechne die Zahl c = b-q 5.aWenn c negativ ist brich den Algorithmus ab Ansonsten mache mit nächstem Schritt weiter 6.Berechne die Zahl d = c 7.Berechne die Zahl e = -a 8.Berechne die Zahl x 1 = e + d 1 9.Berechne die Zahl x 2 = e - d 10. Gib x 1 und x 2 als Ergebniss aus 6.1.6Ein Algorithmus III Problem: Negatives Wurzelargument Bedingte Ausführung 5.bWenn c negativ ist gehe zu Schritt 1 Schleife

147 Fragestellungen Wer gibt p und q ein ? Wie wird p und q eingegeben ? Werden p und q in endlicher Zeit eingegeben ? Sind p und q im richtigen Format ? Ist Variable a im richtigen Format ? Gibt es die Quadrat-Funktion ? Ist c positiv ? Ist Variable e im richtigen Format ? Sind die restlichen Variablen im richtigen Format Reicht die Genauigkeit der Darstellung ? Wo wird das Ergebnis ausgegeben ? Ist ausreichend Variablenkapazität für den Algorithmus vorhanden ? Läuft der Algorithmus schnell genug ?... 1.Lies die Zahlen p und q ein 2.Berechne die Zahl a = p/2 3.Berechne die Zahl b = a 2 4.Berechne die Zahl c = b-q 6.Berechne die Zahl d = c 7.Berechne die Zahl e = -a 8.Berechne die Zahl x 1 = e + d 1 9.Berechne die Zahl x 2 = e - d 10. Gib x 1 und x 2 als Ergebniss aus

148 Ein weiterer Algorithmus

149 Definition Der Begriff des Algorithmus ist zentral in der Informatik und soll in diesem Unterkapitel formal definiert werden Inhalt 1.Herkunft 2.Der Algorithmus 3.Weitere Prinzipien 4.Algorithmen und Programme 5.Ausflug: Algorithmus und WinOSe

150 Herkunft Muhammad ibn Musa abu Djafar al-Choresmi (ca n.Chr) arabischer Mathematiker, geboren in Choresmien (heute: Usbekistan) lebte und wirkte in Bagdad im Haus der Weisheit ( Noah Gordon: Der Medicus) war beteiligt an der Übersetzung der Werke griechischer Mathematiker ins Arabische schrieb ein Kurzgefasstes Lehrbuch für die Berechnung durch Vergleich und Reduktion die lateinische Übersetzung dieses Buches (liber algorismi) kam durch Kreuzfahrer nach Europa verfasste auch ein Buch mit dem Titel Al-Mukhtasar fi Hisab al-Jahr va l-Muqabala Algebra Algorithmus

151 Der Algorithmus: Definition Ein Algorithmus (algorithm) ist die Beschreibung eines Verfahrens, um aus gewissen Eingabegrößen bestimmte Ausgabegrößen zu berechnen. Dabei müssen folgende Bedingungen erfüllt sein Spezifikation Es muss spezifiziert sein, welche Eingabegrößen erforderlich sind und welchen Anforderungen diese Größen genügen müssen, damit das Verfahren funktioniert (Eingabespezifikation) und welche Ausgabegrößen bzw. Resultate) mit welchen Eigenschaften berechnet werden (Ausgabespezifikation) Durchführbarkeit Endliche Beschreibung: das Verfahren muss in einem endlichen Text vollständig beschrieben sein Effektivität: Jeder Schritt des Verfahrens muss effektiv (d.h. tatsächlich) mechanisch ausführbar sein. (Bem.: Effektivität ist nicht zu verwechseln mit Effizienz = Wirtschaftlichkeit) Determiniertheit: Der Verfahrensablauf ist zu jedem Zeitpunkt fest vorgeschrieben Korrektheit partielle Korrektheit: Jedes berechnete Ergebnis genügt der Ausgabespezifikation, sofern die Eingaben der Eingabespezifikation genügt haben Terminierung: Der Algorithmus hält nach endlich vielen Schritten mit einem Ergebnis an, sofern die Eingaben der Eingabespezifikation genügt haben Algorithmen, die eine oder mehrere dieser Eigenschaften nicht besitzen werden dann als Nicht- Algorithmen bezeichnet (Bsp: Nicht-Deterministische Algorithmen)

152 Weitere Prinzipien Neben den in der Definition angegebenen Eigenschaften gibt es weitere wichtige Prinzipien, die bei der Erstellung eines Algorithmussees zu beachten sind: Effizienz Der Algorithmus soll möglichst wenig Aufwand verursachen –Das Ergebnis mit möglichst wenig Rechenschritten (oder mit möglichst wenig Speicherbedarf) erzielen Wartbarkeit Ein Algorithmus sollte so verständlich sein, dass ihn Personen, die ihn nicht entwickelt haben zumindest so weit verstehen, umm ggf. Fehler zu beheben Erweiterbarkeit Unter Erweiterbarkeit versteht man die Anwendbarkeit eines Algorithmus auch für Anwendungen, die zunächst nicht vorgesehen sind. Man sollte daher bei der Eingabespezifikation von Spezialfällen abstrahieren. Robustheit Unter Robustheit versteht man gutartiges Verhalten auch für Eingabewerte außerhalb der Eingabespezifikation, Man sollte daher die Eingabemenge der Eingabespezifikation gleich möglichst so definieren, dass auch exotischere Eingabewerte betrachtet werden..

153 Algorithmen und Programme: Der Weg gegeben: das Problem durch Spezifizieren wird das Problem formal beschrieben Durch Algorithmierung (Algorithmenentwurf) wird ein Algorithmus erzeugt durch Verifizieren kann der Algorithmus auf Übereinstimmung mit der Spezifikation überprüft werden Durch Programmieren wird aus den Algorithmus ein Programm erzeugt durch Testen kann das Programm auf Übereinstimmung mit der Spezifikation und dem Algorithmus überprüft werden. ProblemAlgorithmusProgramm SpezifizierenVerifizierenTesten AlgorithmierungProgrammierung

154 Algorithmen und Programme: Beziehungen Programmieren setzt Algorithmenentwicklung voraus Kein Programm ohne Algorithmus ! Jedes Programm repräsentiert einen bestimmten Algorithmus. Ein Algorithmus kann durch viele Programme repräsentiert werden. AlgorithmusProgramm Programmierung Problem Algorithmierung Problem Algorithmus1 Algorithmus2 Programm21 Programm22...

155 Ausflug: Algorithmus und WinOSe Klassische Programmierung Windows Programmierung Algorithmus OS Eventqueue

156 Strukturelemente Um die Dynamik - also die Abfolge von Aktionen - eines Algorithmu-ssees zu beschreiben, benötigt man formale Beschreibungsmittel, sowie eine Festlegung, wie diese Beschreibungsmittel zu notieren und zu interpretieren sind. Dieses Unterkapitel stellt die formalen Beschreibungsmittel für Algorithmen vor. Diese Beschreibungsmittel sind dabei gleichzeitig Strukturierungselemente für Algorithmen, denn sie definieren die Struktur von Algorithmen. Inhalt: 1.Die Elemente 2.Folge 3.Auswahl 4.Wiederholung

157 Die Elemente: Aus dem Beispiel Zuweisungen Berechnungen Mathematische Grundoperationen komplexe Funktionen... Bedingte Ausführungen Schleife... Variable Texte Zahlen... Konstanten (Literale) Texte Zahlen... EINGABE AUSGABE

158 Die Elemente: Notation Für die Beschreibung von Algorithmen gibt es viele Möglichkeiten Alltagssprache Konkrete Programmiersprache Dazwischen gibt es eine Vielzahl von Notationen, die den Übergang zwischen Problembeschreibung und Programm erleichtern sollen Eine mögliche - eindimensionale - Notation ist Pseudocode: // Dies ist eine Zuweisung x = 42; Kommentare werden (hier) mit vorangestellten Slashes // gekennzeichnet Aktionen werden (hier) mit Semikolon ; getrennt Visualisierung durch graphische - zweidimensionale -Notation Flussdiagramme Struktogramme (=Nasi-Schneidermann-Diagramme) Aktion

159 Die Elemente: atomare Elemente Anweisungen sind die atomaren Elemente eines Algorithmus, die Elemente also, aus denen ein Algorithmus aufgebaut ist. Es gibt (zunächst) drei Arten dieser atomaren Elemente Zuweisung: Pseudocode x = y; Auf der linken Seite der Zuweisung steht eine Variable auf der rechten Seite der Zuweisung steht entweder eine Variable, ein Literal oder eine Berechnung aus Variablen und Literalen Eingabe Pseudocode: x ; Als Eingabegerät kann ein geeignetes physikalisches Gerät (Tastatur, Schnittstelle,...) angegeben werden. Ausgabe Pseudocode: x >> ; Als Ausgabegerät kann ein geeignetes physikalisches Gerät (Bildschirm, Drucker, Schnittstelle,...) angegeben werden Ein- und Ausgabe können auch als Zuweisung verstanden werden.

160 Die Elemente: Kontrollelemente Die atomaren Elemente eines Algorithmussees können durch drei einfache Strukturierungsmethoden, den Kontrollelementen, zueinander in Beziehung gesetzt werden: 1.Folge (Sequenz) 2.Auswahl (Selektion, Fallunterscheidung) 3. Wiederholung (Iteration, Schleife) Die Kontrollelemente bestimmen die Reihenfolge von Aktionen in Algorithmen Eine Aktion (A i ) - auch Verarbeitung genannt - ist ein atomares Element oder eine durch die Strukturmethoden zusammengefasste Menge mehrerer Aktionen

161 Folge Folgen bestimmen die lineare Reihenfolge von Aktionen in Algorithmen: FlussdiagrammStruktogrammPseudocode: A1A1 A2A2 AnAn... A1A1 A2A2 AnAn... { A 1 ; A 2 ;... A n ; }

162 Auswahl : bedingte Verarbeitung Eine Aktion wird, in Abhängigkeit einer boolschen Bedingung ausgeführt oder nicht auch einarmiges if genannt. FlussdiagrammStruktogrammPseudocode: Beispiel: if (x<0) then x = -x; A1A1 B A1A1 if B then A 1 ; B f w fw

163 162 A2A Auswahl : einfache Alternative In Abhängigkeit einer boolschen Bedingung wird entweder eine Aktion oder eine andere Aktion ausgeführt auch zweiarmiges if genannt. FlussdiagrammStruktogrammPseudocode Beispiel: if (x<0) then x=-x else x=0; A1A1 B A1A1 if B then A 1 else A 2 ; B f w fw A2A2

164 Auswahl : mehrfache Alternative In Abhängigkeit einer Bedingung (mit mehreren möglichen Werten w 1, w 2,..., w n ) wird eine Aktion aus einer Menge möglicher Aktionen ausgewählt und ausgeführt FlussdiagrammStruktogrammPseudocode Beispiel: switch x: { case 0: x = x/2; case 1: x = x+1; } Oft auch mit else-Alternative (statt w n ) A1A1 B switch B: { case w 1 : A 1 ; case w 2 : A 2 ;... case w n : A n ; } B w1w1 w1w1 A2A2 AnAn A1A1 A2A2 AnAn wnwn w2w2 wnwn

165 Schleife: mit vorausgehender Prüfung Solange eine boolsche Bedingung erfüllt ist, wird eine Aktion ausgeführt. Die Bedingung wird vor der ersten Ausführung der Aktion geprüft heißt auch: abweisende Schleife (While-Schleife) FlussdiagrammStruktogrammPseudocode Beispiel: while x < 100 { x = x + 1; } A1A1 A1A1 while B { A 1 } B f w B

166 Schleife: mit nachfolgender Prüfung Solange eine boolsche Bedingung nicht erfüllt ist, wird eine Aktion ausgeführt. Die Bedingung wird (erst) nach der ersten Ausführung der Aktion geprüft heißt auch: Repeat-Schleife Manchmal auch als Variante Do-While-Schleife - z.B. in C++ - aber: Die Do-While-Schleife wird solange ausgeführt solange eine boolsche Bedingung erfüllt ist. FlussdiagrammStruktogrammPseudocode Beispiel: repeat { x = x + 1; } until x == 100 A1A1 A1A1 repeat { A 1 } until B B f w B

167 Schleife: Beispiel (abweisende Schleife) Untersuche ob eine gegebene natürliche Zahl Primzahl ist. p > 2 ist Primzahl, falls sie durch kein t mit 12) and (p mod 2 != 0)) then { t = 3; // initialize t while ((t*t=p oder p mod t == 0 if (t*t>p) then p ist Primzahl >> Bildschirm; else p ist keine Primzahl >> Bildschirm; } else { p > Bildschirm; } // Primzahl ?

168 Schleife: Beispiel (Vergleich while repeat) Sind diese Schleifen im Ergebnis identisch ? while x < 100repeat {{ x = x + 1; x = x + 1; }} until x < 100 und jetzt ? repeat { x = x + 1; } until x >= 100 Letzer Versuch: if (x = 100 } Welche Lösung ist eleganter ? aber: oft wird eine erstmalige Aktion benötigt, um ein Datum überhaupt überprüfen zu können.

169 Schleife: Beispiel (Vergleich repeat while) Ausdrucken einer Datei repeat { x > Drucker; } until x == eof //endoffile... das Ganze als while-Schleife ? while (x != eof ) { x > Drucker; } Nochn Versuch: x > Drucker; x << Datei; }

170 Schleife: Beispiel (Schleife mit Zählern) Sehr häufig werden Schleifen verwendet, deren Bedingung abhängig von Zählerwerten sind. Die Zählerwerte werden vor Eintritt in die Schleife initialisiert Die Bedingung prüft den Zählerwert Im Schleifenkörper wird der Zähler erhöht (increase) oder erniedrigt (decrease) Vorsicht mit: dem Zählertyp, dem Additionswert, der Bedingung Algorithmus: // --- Initialisierung s = 0; i = 1; // Initialisierung des Schleifenzählers // --- Schleife (Berechnet Summe 1..n) while ( i <= n ) { s = s + i; i = i + 1; // Erhöhung des Schleifenzählers (oft um 1) }

171 Schleife: Die For-Schleife Da Schleifen mit Zähler sehr häufig auftreten, stellen viele Programmiersprachen ein eigenes sprachliches Mittel dafür zur Verfügung: Die For Schleife Pseudocode:Beispiel: for var=start_value to end_valuefor i=1 to 10 {{ A; x = x + i; }} Der Zähler ( var ) wird pro Schleifendurchlauf implizit um 1 erhöht (Bei manchen Sprachen - z.B. Basic, C, C++ - kann man dies ändern) Dieser Code ist äquivalent mit folgender Schleife: i = start_value while i <= end_value { A; i = i+1; }

172 Schleife: Beispiel (Endlosschleife) Manchmal macht es Sinn, Schleifen endlos laufen zu lassen: z.B. bei der zyklischen Abprüfung von Systemzuständen (Windows Event-Queue) manchmal macht das keinen Sinn - passiert aber trotzdem ;-) FlussdiagrammStruktogrammPseudocode Beispiel: while true { Druckerpapier ist teuer >> Drucker; } A1A1 A1A1 while true { A 1 } B

173 Strukturierung Mit Hilfe atomarer Elemente und der Kontrollelemente lassen sich Algorithmen strukturieren. In diesem Kapitel sind einige Begriffe zur Strukturierung erläutert. Insbesondere wird ein weiteres - viertes - Kontrollelement vorgestellt (und auch gleich wieder verworfen) Inhalt 1.Control Flow 2.Strukturierung durch Sprung 3.Strukturiert-iterative Beschreibungsform 4.Strukturierungstypen

174 Control Flow Mithilfe der Kontrollelemente können die atomaren Elemente (Anweisungen) strukturiert werden Die Anordnung der Anweisungen (als atomare Elemente) eines Algorithmus, die bestimmt, in welcher Reihenfolge Dinge geschehen, heißt control flow (Steuerungsverlauf, Kontrollfluss) des Algorithmus genannt Manchmal wird auch der Programmablauf oder Kontrollfaden (thread of control, thread), also die tatsächlich abgespulten Schritte und Anweisungen so bezeichnet

175 Strukturierung durch Sprung Bei der Vorstellung der Kontrollelemente wurde (aus hinterhältig, didaktischen) Gründen auf ein viertes Element verzichtet: Der Sprung (Goto-Anweisung) Die Konstruktion fahre fort mit Schritt x (goto x) stellt einen solchen Sprung (jump) im Steuerungsverlauf dar Zur Anwendung von goto werden Schritte mit einer Marke (Label) versehen, um das Ziel des Sprunges zu kennzeichnen Dies ist die elementarste Form, eine Wiederholung oder sonstige Verzweigung im Ablauf auszudrücken Dadurch erhalten wir die elementar-iterative Beschreibungsform von Algorithmen, die die Strukturierung mit ein-/mehrfacher Auswahl und Schleifen funktional abdeckt. Beispiel: while x =100 goto 2 x = x+1 x = x+1; } goto 1; 2:...

176 Strukturierung durch Sprung Anwendung von Sprüngen ist sehr gefährlich! Sprünge strukturieren komplexe Programm nicht ausreichend - der Steuerungsverlauf kann verworren und unübersichtlich sein Um den Steuerungsverlauf auch bei komplexen Algorithmen übersichtlich zu halten, schränkt man die Sprünge ein: Schleifen der Flussdiagramme sind höchstens ineinander geschachtelt Schleifen überkreuzen sich nicht! Bei gut strukturierten Algorithmen würde man z. B. nur wieder eine geschlossene Schleife oder einen (vorzeitigen) Sprung bedingt durch die Behandlung des Trivialfalls erlauben Wir sprechen in diesem Fall von strukturierten Sprüngen im Gegensatz zu freien Sprüngen, die prinzipiell beliebige Ziele haben können

177 Strukturiert-iterative Beschreibungsform Sprünge können alle höhere Strukturierungsarten funktional abbilden. Hier gilt auch der Umkehrschluss In der strukturiert-iterativen Beschreibungsform kommen Sprünge nur noch implizit bei der Ausführung höherer Iterationsstrukturen vor Dieses sind Fallunterscheidungen (Auswahl) wie if-then-else oder insbesondere Schleifenkonstrukte Diese bewirken, dass der Programmfluss In einer Auswahl zu genau einer Auswahl geht. in einer Schleife von einer Prüfung zu den Aktionen des Schleifenkörpers und wieder zurück zur Prüfung geht. Viele höhere Programmiersprachen (Pascal, C, C++) erlauben jedoch die Verwendung von Sprüngen Aus Optimierungsgründen (Nähe zur Maschinensprache) Aus Strukturierungsgründen)

178 Strukturierungstypen Beispiel: Schemen einiger Kontrollflüsse Strukturiert-iterativElementar-iterativSpaghetti-Code

179 Blockung Mit Hilfe der bislang vorgestellten Kontrollelemente lassen sich die atomaren Elemente (Anweisungen) eines Algorithmus zu einem Kontrolfluss strukturieren. Wie wir gesehen haben, kann dieser Kontrollfluss mehr oder weniger wohlstrukturiert sein. In diesem Unterkapitel wird eine Element beschrieben, mit dem Aktionen statisch nochmals zusammengefasst werden können. Diese Zusammenfassung hat auch Einfluss auf das dynamische Verhalten von Verarbeitungsobjekten (Variable). Inhalt: 1.Die Idee 2.Notation 3.Formale Parameter 4.Aufruf 5.Beispiel: Ein einfacher Block 6.Eigenschaften 7.Beispiel: Seiteneffekte 8.Vorzeitiges Verlassen 9.Goldene Regeln

180 Die Idee Idee: Eine Zusammenfassung von Aktionen bekommt einen Namen und kann durch das Nennen des Namens (Aufruf) aktiviert werden. In einen Block sollen Daten formal hinein und herausgelangen Ein Block soll eigenen Daten besitzen Vorteile: Gliederung des Algorithmus durch hierarchische Dekomposition (Divide et impera: Teile und herrsche) Wiederverwendbarkeit durch mehrfachen Aufruf statt durch mehrfaches notieren. universeller ( Anzahl muss nicht bekannt sein) fehlerunanfälliger Kapselung unwichtiger Details (information Hiding) Vorteile bei der Organisation von Programmiertätigkeit durch Verteilbarkeit der Aufgaben.

181 Notation Ein Block ist die Zusammenfassung von Aktionen und wird wie folgt beschrieben: Pseudocode: blockname (IN: x 1 :Type 1, … ; OUT: y 1 :Type 2, … ; THROUGH: z 1 :Type 3, … ) { var w 1 :Type 41 ; w 2 :Type 42 ; … ; A; } blockname ist der Name des Blockes x i,y i,z i heißen formale Parameter und sind typisiert w i heißen lokale Variable A ist eine Menge von Aktionen. Blöcke werden in vielen Sprachen als Funktion (nur ein OUT -Parameter) bzw. Prozeduren umgesetzt oft steht der Block-Bezeichner selbst für einen OUT-Parameter (und wird daher auch oft mit einem Typ versehen. (Bsp ?) blockname Flussdiagramm Struktogramm

182 Formale Parameter IN -Parameter (Eingabeparameter) sind Parameter, die an den Block übergeben werden Dazu werden beim Aufruf des Blockes an die Stelle der Eingabeparameter Variable, Literale oder Ausdrücke (Berechnungen) notiert. Diese werden beim Aufruf zu Werten transformiert, die an den entsprechenden Variablen zugewiesen werden. (call by value) OUT -Parameter (Ausgabeparameter) sind Parameter, die aus dem Block durch Zuweisung an Variable zurückgegeben werden. Dazu werden beim Aufruf des Blockes an die Stelle der Ausgabeparameter Variablen notiert, die nach dem Aufruf die zurückgegeben Werte beinhalten (call-by reference) THROUGH -Parameter (Ein-/Ausgabeparameter) sind Parameter die Werte in den Block hinein und hinaus übermitteln. Eingabe wie bei IN -Parametern (aber: nur Angabe einer Variable) Rückgabe wie bei OUT -Parametern

183 Aufruf Ein Block wird über seinen Namen aufgerufen Die Parameter werden als Argument übergeben: IN -Parameter werden als Wert übergeben, können also Variablenbezeichner, Literale oder komplexe Ausdrücke aus Variablenbezeichner und Literalen sein OUT - und THROUGH -Parameter werden by reference, meist durch einen Variablenbezeichner übergeben Meist wird die Zuordnung der übergeben Variablen zu den formalen Parametern über die Reihenfolge implizit vorgegeben. In manchen Programmiersprachen … … kann das auch explizit, z.B. über eine Zuweisung erfolgen … kann die Anzahl der übergebenen Variablen kleiner der Anzahl der formalen Parametern sein – dann werden die fehlenden Parameter von rechts nach links nicht übergeben … können formale IN -Parameter mit einem Standardwert initialisiert werden. Die Zuordnung der übergebenen Parameter zu den formalen Parametern nennt man Bindung.

184 Beispiel: Ein einfacher Block Ein Block zur Berechnung von Summen (mit Aufrufzähler) summe (IN: value1 : Integer; value2 : Integer; OUT: result : Integer; THROUGH: counter : Integer; ) { var i : integer; // lokale Variable result = 0; // Initialisierung for i=1 to value2 // ein wenig umständlich value1 = value1 + 1; result = value1; counter = counter + 1; } Aufruf anzahl = 1; // schon erste Summe hat zwei Summanden initial = 5; summe(initial, 9, ergebnis, anzahl); summe(ergebnis, 9, ergebnis, anzahl); ergebnis/anzahl >> Bildschirm; // Mittelwert

185 Eigenschaften Jeder Block kann über einen Satz lokaler Variable verfügen, die außerhalb des Blockes nicht sichtbar sind Die Variablenbezeichner können also außerhalb ohne Einfluss auf den Block verwendet werden Auch die in der Blockdefinition als formale Parameter verwendeten Variablenbezeichner sind nur im Block sichtbar: Auch sie können außerhalb ohne Einfluss verwendet werden, Aber Vorsicht: die Veränderung von OUT und THROUGH-Parametern bewirkt (oft) eine Veränderung der beim Aufruf verwendeten zugehörigen Parameter (der zugehörigen gebundenen Parameter). Variable, die in einem Block verwendet aber nicht deklariert werden, werden als global angenommen Viele Sprachen erlauben die Definition von Blöcken innerhalb von Blöcken Variablen, die in einem Block nicht deklariert sind, werden im umgebenden Block vermutet.

186 Beispiel: Seiteneffekt Das (ungewollte) implizite Verändern von äußeren Parametern durch Veränderung innerer Parameter nennt man Seiteneffekt summe (THROUGH: value1 : Integer; value2 : Integer; result : Integer; ) { value1 = value1 + value2; result = value1; } Aufruf x = 5; y = 7; summe (x,y,z); Die Summe von >> Bildschirm; x >> Bildschirm; und >> Bildschirm; y >> Bildschirm; ist >> Bildschirm; z >> Bildschirm; Die Summe von 12 und 7 Ist 12

187 Vorzeitiges Verlassen Manchmal ist es sinnvoll, die Abarbeitung eines Blockes vorzeitig zu beenden Dies wird oft im Fehlerfall gemacht, wenn eine Weiterbearbeitung nicht mehr sinnvoll erscheint - z.B. nach einer negativen Überprüfung der Eingabeparameter FlussdiagrammStruktogrammPseudocode Beispiel: wurzel(IN: argument:real; OUT: result:real) { if (x<0) return; // return already here else result = sqr(argument); } Block Return; Block

188 Goldene Regeln Namen so lokal wie möglich deklarieren Möglichst keine globalen Variablen verwenden Wenn doch: Ganz wenige - nur eine (z.B. strukturiert) Auffällig kennzeichnen: z.B. global_error_handle Nach Möglichkeit call by value verwenden Wird nicht von allen Programmiersprachen unterstützt Probleme bei der Rückgabe umfangreicher Daten (wg. Umkopieren) Blöcke sind so zu wählen dass: Der innere Zusammenhang stark ist Der äußere Zusammenhang schwach ist (minimale Schnittstellen, keine Datenteilung, z.B. durch globale Variable)

189 Iteration und Rekursion Im Bereich der Datenstrukturen haben wir es oft mit rekursiven Strukturen z.B. Bäumen zu tun. Auch in der Mathematik sind rekursive Definition weit verbreitet.und finden über zugehörige Algorithmen Einzug in die Informatik. Das Konzept der Rekursion wird in der Informatik allerdings teilweise mit Skepsis umgesetzt, führt es doch, in ungeeigneten Fällen, zu inakzeptablen Laufzeiten. Hinzu kommt, dass einige Programmier-spachen (z.B. FORTRAN) Rekursion nicht unterstützen. In diesem Unterkapitel soll auf die Möglichkeiten der Verwendung von Rekursion bzw. Iteration eingegangen werden Inhalt 1.Definition 2.Beispiele 3.Aufrufverwaltung 4.Wo nicht 5.Wo nicht und wo

190 Definition: Rekursion Ein Objekt heißt rekursiv, wenn es sich selbst als Teil enthält oder mit Hilfe von sich selbst definiert ist. Wesentlich ist die Möglichkeit, unendliche Mengen von Objekten durch eine endliche Aussage zu definieren. Bsp.: Definition natürlicher Zahlen: 0 sei eine natürliche Zahl Der Nachfolger (n+1) einer natürlichen Zahl ist wieder eine natürliche Zahl Ein Algorithmus heißt rekursiv, wenn er sich selbst als einen seiner Aktionen (Verarbeitungsschritten) enthält. In der Regel enthält er sich mit verkleinerter Aufgabenstellung. Damit er terminiert, muss er einen Zweig beinhalten, der einen (den) elementaren Wert nicht rekursiv bestimmt. (den Basisfall) Objekte (Algorithmen), die andere Objekte (Algorithmen) enthalten, die wiederum die ursprünglichen Objekte (Algorithmen) enthalten, heißen indirekt rekursiv

191 Beispiel: Fakultät Mathematisch rekursive Definition: 1n = 0 n != n x (n - 1) !n > 0 Algorithmisch rekursive Definition: fakultaet (IN: n:integer, OUT: result:integer) { if (n == 0) then result = 1; else { fakultaet (n-1, result); result = result x n; } }

192 Beispiel: Hilbert Kurven Die Hilbert Kurve ist eine stetige Kurve, die jeden beliebigen Punkt einer quadratischen Fläche erreichen kann, ohne sich zu schneiden – und damit ein Fläche beliebig dicht füllen kann. D.Hilbert: Über stetige Abbildungen einer Linie auf ein Flächenstück, Math. Annalen, 1891 Idee: Die Kurve wird aus vier Grundformen und vier Bildungsgesetzen generiert, die sich direkt und indirekt rekursiv aufrufen Grundformen: Bildunggesetze:A:B A A C B:A B B D C:D C C A D:C D D B Beispiel: ABCD wir müssen wissen, wir werden wissen A B A A C t=1 t=2t=3

193 Beispiel: Hilbert Kurven A:B A A C B:A B B D C:D C C A D:C D D B A (IN: t:integer) { if (t>0) B(t-1); S(); A(t-1); O(); A(t-1); N(); C(t-1); } B (IN: t:integer) { if (t>0) A(t-1); O(); B(t-1); S(); B(t-1); W(); D(t-1); } C (IN: t:integer) { if (t>0) B(t-1); W(); A(t-1); N(); A(t-1); O(); C(t-1); } D (IN: t:integer) { if (t>0) B(t-1); N(); A(t-1); W(); A(t-1); S(); C(t-1); } // S(), N(), W(), O() sind Blöcke, die eine // Linie nach Süden, Norden, Westen und Osten // zeichnen A B CD

194 Aufrufverwaltung Eine Aktivierung der Tiefe n wird erst verlassen, wenn die von ihr erzeugte Aktivierung der Tiefe n+1 schon verlassen wurde Verwaltung der Aktivierung als Stapel (Stack) fakultaet(3,x) fakultaet(2,x) fakultaet(1,x) fakultaet(0,x)result=1 result=2 result=6

195 Wo nicht: Modulo-Berechnung Alle Grundrechenarten - und vergleichbar einfache mathematische Operationen - lassen sich mit Hilfe sog. Primitiv Rekursiver Funktionen beschreiben (siehe Beispiel. Algorithmenbeweis) afalls a < b mod(a,b)= mod(a-b,b)falls a b In gängiger mathematischer Notation könnte ein Verfahren zur Berechnung der Modulus-Funktion a mod b wie folgt aussehen: modulo (IN a,b: integer, OUT result: integer) { if (a

196 Wo nicht: Fibonacci-Zahlen Fibonacci definiert im 13.Jahrhundert eine Zahlenfolge mit der die Verhältnisse des goldenen Schnitts ebenso beschrieben werden können, wie die Populationsentwicklung in einem Kaninchenstall: 0n = 0 fib(n)= 1n = 1 fib(n-2)+fib(n-1)n > 1 fib(IN: n:integer, OUT: result:integer) { r,s : integer; if (n==0) then result = 0 else if (n==1) then result = 1 else { fib(n-1,r); fib(n-2,s); result = r + s; } }

197 Wo nicht: Fibonacci-Zahlen fib(IN: n:integer, OUT: result:integer) {... fib(n-1,r); fib(n-2,s); result = r + s;...} nAufrufeRechenzeit (1 Aufruf = 1 nsec) 01nZeit 11100,18 sec sec sec Jahre Die Anzahl der Aufrufe verhält sich offenbar selbst ähnlich der Fibonacci-Reihe: Anzahl (n) = 2 x fib(n+1) - 1 Anstieg ist praktisch exponentiell also nicht verwendbar

198 Wo nicht: Fibonacci-Zahlen Idee: Merken von zwei Folgewerten in Variablen und Aufsummieren in Schleife, wobei die Werte immer umgespeichert werden: fib (IN: n:integer, OUT: result:integer) { a,b,z : integer; a = 0; b = 1; // fib0, fib1 while (n > 0) do { z = a + b; // Berechnung der nächsten fib a = b; b = z; // Umspeichern der fibs n = n - 1; // dicrease n } result = a; // das Resultat steht in a } Anzahl (n) = n Zeit (n=100) = 1 sec (anstatt Jahre !)

199 Wo nicht und wo? Man sollte überall dort auf Rekursion verzichten, wo es eine offensichtliche Lösung mit Iteration gibt. Jeder rekursive Algorithmus lässt sich in eine iterative Form umwandeln (z.B. über explizites Ausformulieren einer Stackverwaltung) Es gibt allerdings einige Fälle, in denen Rekursion angewandt werden sollte: Rekursion ist überall dort sinnvoll anwendbar, wo sich ein Problem in mehrere (oft: zwei) nicht überlappende Teilprobleme aufspalten lässt und sich die Teilprobleme leicht rekombinieren lassen. Rekursion sollte dort verwendet werden, wo die zugrunde liegenden Datenstrukturen selbst rekursiver Art sind (z.B.: Bäume) Für einige Probleme gibt es keine direkte Vorschrift zur Berechnung. Diese können oft nur durch Trial and Error gelöst werden. Oft lassen sich diese Versuche (Trials) durch Untersuchung eines Teilproblems natürlich in rekursiver Form darstellen. Dieses Vorgehen nennt man Backtracking

200 Beispiel: Backtracking Weg des Springers Gegeben sei ein n x n Spielbrett (z.B. n=8). Ein Springer - der nach den Schachregeln bewegt werden darf - wird auf das Feld mit der Anfangskoordinate (x 0,y 0 ) gestellt (z.B. (1,1)). Zu finden ist ein Weg des Springers, der genau einmal über jedes der Felder des Schachbrettes führt.

201 Beispiel: Backtracking Ansatz eines Algorithmus (in unvollständiger Notation) track (IN: kandidat, OUT: erfolgreich) // ohne Typ { trage_ein(kandidat); // erst mal eintragen erfolgreich = false; // Initialisierung if (fertig) then erfolgreich = true; // Abbruchfall else // weitersuchen { repeat { wähleKandidat(neukandidat); // wie auch immer if (neukandidat) then // es geht weiter track (neukandidat, erfolgreich) // Rekusion else // Sackgasse ! trage_aus (kandidat); // wieder austragen } until (erfolgreich) or (not neukandidat) } }

202 Zusammenfassung des Kapitels 1.Ein Beispiel Drei Algorithmen im Vergleich zur Lösung einer quadratischen Gleichung 2.Definition des Algorithmenbegriffes Definition und dessen Anwendung im Beispiel. Weitere Prinzipien und der Zusammenhang von Algorithmen und Programmen. 3.Strukturelemente: Die atomaren Elemente und die Konstruktionselemente Folge, Auswahl, Wiederholung 4.Strukturierung Der Begriff des Control Flows, das Problem der Strukturierung mit Sprung und Blockung 5.Blockung Prinzip und Beispiele, Probleme und Regeln 6.Iteration und Rekursion Definition, Realisierung, wo und wo nicht

203 202

204 203 Anhang ASpiel des Lebens Das Spiel des Lebens findet in einer Welt statt, die einfachen Regeln gehorcht. Die Welt besteht aus einem unendlich großen Schachbrett in dessen Feldern primitive Tierchen, die Nöpel wohnen. Diese sitzen ein Jahr unbeweglich auf ihren Feldern, unterhalten sich mit ihren Nachbarn - es gibt erhitzte Diskussionen, Gedichtvorträge, Tratsch und Klatsch über andere Nöpel, politische Reden, Deklamationen, Verleumdungen und Schmeicheleien. Jedes Jahr genau um 12 Uhr in der Silvesternacht lösen sich Nöbel entweder in Luft auf, bleiben sitzen oder werden aus dem Nichts erschaffen. Dabei schlägt das Schicksal nicht blind zu: Hat ein Nöpel (von acht möglichen) keinen oder nur einen Nachbarn, so stirbt er an Vereinsamung. Hat ein Nöpel vier oder mehr Nachbarn, so stirbt er an Erschöpfung ob der vielen Plaudereien. Überleben tun Nöbel mit zwei und drei Nachbarn. Nöpel werden auf leeren Feldern geboren, wenn dort im Jahr zuvor genau drei Nöpel gelebt haben

205 204 A.1Die Generationen 0,1,4,5,6,7,8 2,3 3

206 205 A.2Interessante Völker Der Gleiter Der Blinker

207 206 A.3Rechnerdarstellung Wie kann man strukturell und algorithmisch dieses Spiel auf einem Rechner darstellen ? 1.Überlegen Sie sich Rahmenbedingungen für das Spiel des Lebens 2.Formalisieren Sie dieses Problem 3.Stellen sie einen umgangssprachlichen Lösungsansatz auf 4.Formalisieren Sie den Lösungsansatz als Algorithmus 5.Spielen Sie den Algorithmus anhand eines Beispieles durch 6.Bewerten Sie den Algorithmus bezüglich seine Laufzeit und seines Platzbedarfes

208 207 A.4Formalisierung Gegeben ist: Eine zweidimensionales Spielfeld Annahme:die Grenzen werden verbunden. Auch möglich:Unendliche Grenzen, abschneidende Grenzen Anfangszustand: beliebige Nöpelpositionen im Spielfeld Regeln: entsprechend der Spielregeln für Spiel des Lebens Gesucht: Zwischenzustand nach beliebigen Generation (entsprechend der Regeln) Optional: Erkennung von Endzuständen

209 208 A.4Strukturen Entwurf der Datenstrukturen - zwei Ansätze: Der Spielfeldzustand wird als zweidimensionales Feld repräsentiert act_state: array [1..max_reihen][1..max_spalten] of boolean; Der Spielfeldzustand wird über die Positionen der Nöpel präsentiert typedef struct nöpel {reihe: int; spalte: int ; // next_nöpel: *nöpel } ; act_state: array [1..max_nöpel] of nöpel;

210 209 A.4Algorithmus: Feld 0,1,4,5,6,7,8 2,3 3 act_state = Startzustand solange kein Endzustand { get_next_state (act_state, next_state); } get_next_state (In: act_state, Out: next_state) { // iterate fields an set nöpel accordingly // determine survivors durchlaufe act_state // zweifach-verschachtelte Schleife { falls act_state[act_field] hat 2,3 Nachbarn in act_state setze next_state[act_field] } // determine babies durchlaufe next_state // zweifach-verschachtelte Schleife { falls next_state[act_field] hat 3 Nachbarn in act_state setze next_state[act_field] } }

211 210 A.4Algorithmus: Liste 0,1,4,5,6,7,8 2,3 3 act_state = Startzustand solange kein Endzustand { get_next_state (act_state, next_state); } get_next_state (In: act_state, Out: next_state) { // iterate through list durchlaufe act_state // einfache Schleife durch Nöpelliste { // determine survivors find_neighbors(act_nöpel, no_of_neighbors) falls no_of_neighbors = 2 oder 3 kopiere act_nöpel nach next_state // determine babies durchlaufe nachbar_nöpel von act_nöpel // max. 8 { find_neighbors(nachbar_nöpel, no_of_neighbors) falls no_of_neighbors = 3 kopiere nachbar_nöpel nach next_state } } }

212 211 A.4Komplexität get_next_state (In: act_state, Out: next_state) { durchlaufe act_state // einfache Schleife durch Nöpelliste { // determine survivors find_neighbors(act_nöpel, no_of_neighbors) // Durchsuche // alle Nöpel falls no_of_neighbors = 2 oder 3 kopiere act_nöpel nach next_state // determine babies durchlaufe nachbar_nöpel von act_nöpel // max. 8 { find_neighbors(nachbar_nöpel, no_of_neighbors) falls no_of_neighbors = 3 kopiere nachbar_nöpel nach next_state } } // Zeit: Nöpel * ( Nöpel + ( 8 * Nöpel ) ) = 9 * Nöpel 2 } // Platz: 2 * Nöpel

213 212

214 213 Beispielklausur In diesem Kapitel wird ein Beispiel für eine Klausur vorgestellt. Dabei sind jeweils die Aufgaben und die Lösungen gegeben. Beachten Sie Diese Beispielklausur erhebt weder in Form, Inhalt noch Umfang einen Anspruch auf Vollständigkeit.- dies betrifft insbesondere reine Wissensfragen, die hier etwas vernachlässigt sind. Grundsätzlich ist der gesamte in der Vorlesung und den Übungen behandelte Stoff möglicher Gegenstand der Prüfung Vorbereitung Arbeiten Sie die gesamten Folien nochmals durch Bearbeiten Sie alle Übungsaufgaben nochmals Arbeiten Sie das Skript von Herrn Geise durch Bearbeiten Sie dessen Übungsaufgaben Bedenken Sie: In der Klausur sind keine Hilfsmittel zugelassen. … daran will ich euch prüfen 1. Mose 42.15

215 214 Informatik Informatik ist... Geben Sie für jede dieser 5 Kernprozesse der Informatik jeweils 3 Beispiele an Die Wissenschaft, die sich mit dem (automatisierten) von Information befasst Erfassen Transportieren Speichern Verarbeiten Umsetzen

216 215 Informatik Fehlt in dieser Beispielklausur: a)weitere Wissensfragen b)...

217 216 Information Eine Nachrichtenquelle sendet Zeichen aus dem Alphabet X = {a,b,c,d,e} mit den Wahrscheinlichkeiten p(a)=1/2, p(b)=p(c)=p(d)=p(e)=1/8 a)Wie groß ist der Informationsgehalt der einzelnen Zeichen b)Wie groß ist der Informationsgehalt der Nachricht abc c)Wie groß ist der mittlere Informationsgehalt einer Nachricht mit 1000 Zeichen d)Finden Sie einen möglichst optimalen Code für dieses Alphabet e)Angenommen die Wahrscheinlichkeiten wären p(b)=1/2, p(a)=p(c)=p(d)=p(e)=1/8. Wie groß wäre dann die Redundanz Ihres Codes aus Aufgabe d) Hamming a)Codieren Sie die Binärzahl 1000 mit der Hamming-Methode b)Wieviele Bits können als fehlerhaft erkannt werden ? c)Wieviele Bits können korrigiert werden ?

218 217 Information Fehlt in dieser Beispielklausur: a)Textaufgaben b)Huffman-Codierung c)Turing-Maschinen d)…

219 218 Zahlensysteme Stellen Sie die Dezimalzahl 7,25 a)Binär b)Hexadezimal c)Oktal dar Berechnen Sie im Binärsystem (mit Vollständiger Rechnung) a) : 101 b)Machen Sie schriftlich die Gegenprobe (auch im Binärsystem) c)10111 – 1010 (durch Addition des Zweierkomplements)

220 219 Zahlensysteme Fehlt in dieser Beispielklausur: a)Gleitpunktzahlen b)IEEE 754 c)...

221 220 Datenstrukturen Gegeben ist folgende Struktur a)Definieren Sie Datenstrukturen, mit denen diese Struktur einer zweifach verketteten Liste repräsentiert werden kann. b)Begründen Sie, weshalb diese Datenstruktur als dynamisch bezeichnet wird (im Gegensatz zu statisch) c)Geben Sie jeweils zwei Gründe für die Verwendung dynamischer bzw. statischer Datentypen an. d)Definieren Sie statische Datenstrukturen, mit denen man die oben aufgezeichnete Struktur möglichst vollständig abbilden kann. Vorname Nachname Vorname Nachname Vorname Nachname...

222 221 Datenstrukturen Gegeben ist folgender Algorithmus: x : *Integer; y : Integer; x = &y; x* = 2; x = 2; x* = 5; a)Gehen Sie davon aus, dass der Compiler der Variablen x die Speicherstelle 4 und der Variablen y die Speicherstelle 6 zugeordnet hat. Jede Variable belegt dabei genau eine Speicherstelle: Zeichnen Sie die Werte in den Speicherstellen 1 bis 8 jeweils nach den Zuweisungen.

223 222 Datenstrukturen Fehlt in dieser Beispielklausur: a)Wissensfragen (z.B. Überblick über Datenstrukturen) b)spezielle Datenstrukturen (z.B. Variantenrecord) c)...

224 223 Algorithmenentwurf Gegeben ist folgender Algorithmus: x=a, y=5; while (x>0) { y = y+1; x = x-1; } a)Formen sie die while Schleife in eine repeat-Schleife um b)Bilden Sie die Funktion dieses Algorithmus ohne Schleifen, mit Hilfe von Sprüngen und Marken nach

225 224 Algorithmenentwurf Gegeben ist folgender Algorithmus test ( IN: x:Integer; THROUGH: y:Integer; b:Integer; OUT: z:Integer; ) { x = y + b; b = y + x; } c = 3; d = 5; e = 7; f = 9; test (f,e,c,d); c >> Bildschirm; d >> Bildschirm; e >> Bildschirm; f >> Bildschirm;; a)Geben Sie die Bildschirmausgabe an

226 225 Algorithmenentwurf Fehlt in dieser Beispielklausur: a)Weitere Umformungen b)Umwandlung Rekursion/Iteration c)Wissensfragen (z.B. Überblick über Strukturierungselemente) d)weitere Notationen (Nassi-Shneidermann, Flußdiagramm) e)...

227 226 Lösung: Informatik Information erfassen über: Kamera, Tastatur, Maus, Datenleitung, Tastsensoren, Gehirnsensoren,... Information Transportieren über Ethernet: WLAN, ISDN, S/ADSL, Datenbus, Druckerkabel, VGA-Kabel, verschränkte Quantenzustände,... Information speichern auf: Festplatte, EPROM, RAM, ROM, CD, DVD, Tape, Tesa-Film,... Information verarbeiten mit: Analogrechner/Digitalrechner, Parallelrechner, CPU, FPU, Mikro-Prozessor, Turing-Maschine,... Information umsetzen als: Ausgabe auf dem Bildschirm, Drucker, Braille-Zeile, Roboter-Aktion, Schalten, optisches/akustisches Signal, Raketenstart,...

228 227 Lösung: Information Eine Nachrichtenquelle sendet Zeichen aus dem Alphabet X = {a,b,c,d,e} mit den Wahrscheinlichkeiten p(a)=1/2, p(b)=p(c)=p(d)=p(e)=1/8 a)h(a) = -ld(1/2) = 1bit. h(b)=h(c)=h(d)=h(e)=-ld(1/8)=3bit b)1bit + 3bit + 3bit = 7 bit c)1000 x Mittlerer Informationsgehalt: H(x)= p(x i )h(x i ) = 1000 x ( 1/2x1 + 1/8x3 + 1/8x3 + 1/8x3 + 1/8x3 )bit = 1000 x 2bit = 2000 bit d)Nach Huffmann: p(de)=1/4, p(bc)=1/4, p(debc)=1/2, p(a)=1/2). p(abcde)=1 also z.B.: a=1, b=000, c=001, d=010, e=011 e)Redundanz = L(x)-H l(x)=1bit, l(b)=l(c)=l(d)=l(e)=3bit (entsprechend der Codierung in d.) L(x) = p(x i )l(x i ) = (0,125x1 + 0,5x3 + 0,125x3 + 0,125x3 + 0,125x3)bit = 2,75 bit h(b) = 1bit, h(a)=h(c)=h(d)=h(e)=-ld(1/8)=3bit H(x) = p(x i )h(x i ) = (0,5x1 + 0,125x3 + 0,125x3 + 0,125x3 + 0,125x3 )bit = 2 bit Redundanz = L(x)-H = 2,75bit – 2bit = 0.75 bit Hamming a)100P0PP (Relevant: Bit 3,5,7) 100P0P1 (even Parity: also 1 ergänzen) 100P0P1 (Relevant: Bit 3,6,7) 100P011 (even Parity: also 1 ergänzen) 100P011 (Relevant: Bit 5,6,7) (even Parity: also 1 ergänzen) b)Der Hamming-Abstand D ist 3bit, es können D-1 = 2bit Fehler erkannt werden c)Es können (D-1)/2 = 1bit Fehler korrigiert werden.

229 228 Dezimalzahl 7,25 a)Vorkommateil:Nachkommateil 7 : 2 = 3 Rest: 12 · 0,25 = 0,5 --> Ziffer: 0 3 : 2 = 1 Rest: 12 · 0,5 = 1 --> Ziffer: 1 1 : 2 = 0 Rest: 1 -> 111->0,01 Binärzahl: b)0111, = 7,4 16 (7 * * ) c)111,010 2 = 7,2 8 (7 * * 8 -1 ) Berechnung : 101 = x – auf gleiche Längen bringen Binärkomplement = Lösung: 1101 Überlauf weggelassen Lösung: Zahlensysteme

230 229 Lösung: Datenstrukturen Doppelt verkettete Liste a)Person : record { vorname : array[1..64] of char; nachname: array[1..64] of char; prev : *Person; next : *Person; } b)Man kann aus diesen Strukturen beliebig lange Ketten von Personen bilden c)Pro: Dynamisch: Verwaltung von Objekten, deren Anzahl zur Entwicklungszeit nicht bekannt ist. Speicherverbrauch nur für die Objekte, die tatsächlich zur Laufzeit existieren. Pro Statisch: Einfach in der Realisierung, schnell in der Bearbeitung (Fehlerunanfälliger) d)Person : record { vorname : array[1..64] of char; nachname: array[1..64] of char; } Personenliste: array[ ] of Person;

231 230 Lösung: Datenstrukturen x : *Integer; y : Integer; x = &y; x* = 2; x = 2; x* = 5; nd xy

232 231 Lösung: Algorithmenentwurf Umformung der while-Schleife: a)Als repeat-Schleife: x=a; y=5; if (x>0) { repeatdo {{ y = y+1; y = y+1; x = x–1; x = x-1; } until (x 0} } b)Sprünge und Marken x=a; y=5; x=a; y=5; 1: if (x 0) y = y+1; { x = x–1; y = y+1; goto 1; x = x–1; 2:... goto 1 } 2:...

233 232 Lösung: Algorithmenentwurf Gegeben ist folgender Algorithmus test ( IN: x:Integer; THROUGH: y:Integer; b:Integer; OUT: z:Integer; ) { x = y + b; b = y + x; } c = 3; d = 5; e = 7; f = 9; test (f,e,c,d); c >> Bildschirm; d >> Bildschirm; e >> Bildschirm; f >> Bildschirm; Rechnung: (ROT = call by reference) cdef 3579 bzyxtest(f,e,c,d) x = y + b b = y + x Ausgabe:


Herunterladen ppt "1 Grundlagen der Informatik Sommersemester 2007 Prof. Dr. Peter Kneisel."

Ähnliche Präsentationen


Google-Anzeigen