Skript-Info1-WS1011, Teil1 4x1


Add to my manuals
107 Pages

advertisement

Skript-Info1-WS1011, Teil1 4x1 | Manualzz

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

1. Organisatorisches und Motivation

1

Vorstellung Robert Lorenz

Kurzer Berufsweg geb. 1969

Studium der Mathematik in Eichstätt (1990 – 1996)

Promotion in Mathematik 2001 (Eichstätt)

Habilitation in Informatik 2006 (Eichstätt) seit 1.7.2008: Lehrprofessur für Informatik

(finanziert aus Studiengebühren)

3

Inhalt

Vorstellung Robert Lorenz

Angebot der Uni + Ihr Beitrag

Vorlesungs- und Übungsbetrieb, Prüfungsmodalitäten, Klausuren

Software, Literatur/Materialien

Was ist Informatik

Inhalt der Vorlesung Informatik 1

2

Vorstellung Robert Lorenz

Lehrprofessur für Informatik

Einführung in die praktische Informatik:

Informatik I (WS): Rechnerarchitektur, Algorithmus-Begriff,

Programmieren in C

Informatik II (SS): Objektorientierter Softwareentwurf mit UML,

Programmieren in Java

Programmierkurse (C: WS, Java: SS)

Finanziert aus Studiengebühren (Sie bestimmen mit!)

Laufzeit: 2+2+2 Jahre

Einheitliche Betreuung der ersten zwei Semester

Verbesserung der Programmierausbildung

4

Vorstellung Robert Lorenz

Forschungsinteressen:

Design, Simulation, Verifikation, Synthese nebenläufiger

Systeme:

Geschäftsprozesse

(Web-)Services

Kommunikationsnetzwerke

Verteilte Steuerungen (eingebettete Systeme)

Mit theoretisch fundierten Methoden praktisch relevante

Probleme lösen

5

Das Angebot des Lehrstuhls

Übungen dienen der konkreten Anwendung der abstrakten Konzepte fördern dadurch deren Verständnis verschiedene Übungsangebote:

Übungsblätter als „Hausaufgaben“ (Korrektur, Musterlösungen)

Übungsgruppen (Vorrechnen von Lösungen)

Betreutes Programmieren

7

Das Angebot des Lehrstuhls

Vorlesungen dienen der Vermittlung von abstrakten Konzepten, Wissen,

Problemlösungsstrategien dienen der Anregung und Orientierung haben keinen Anspruch auf Vollständigkeit sollten durch selbstständiges Erarbeiten von Inhalten ergänzt werden

Einheit von Lehre und Forschung

6

Das Angebot des Lehrstuhls

Service

Folien und Vorlesungsmitschrift online

Beispielprogramme zur Vorlesung online

Musterlösungen zu allen Aufgaben online http://www.informatik.uni-augsburg.de/lehrstuehle/inf/

Betreute Themen im Studentenforum http://studentenforum.uni-augsburg.de/

8

Das müssen Sie leisten

Studium selbstständig organisieren

Studien- und Prüfungsordnung lesen zu Prüfungen und Lehrveranstaltungen anmelden

Engagement in Gremien (Fachschaft  Studienbeiträge)

Gruppenarbeit: anderen Inhalte erklären

 am meisten profitieren die Erklärer

Grundlagen schaffen zum Lösen der Hausaufgaben

 nicht die Aufgaben selbst aufteilen!

Probleme frühzeitig artikulieren

Herausforderungen annehmen/suchen

Verwaltungssysteme

LectureReg: Verwaltungssystem der Lehrstühle https://peaches.informatik.uni-augsburg.de/lecturereg/

Anmeldung zu Übungsgruppen (18.10. - 22.10.)

Anmeldung zu Klausuren (1.12. - 10.12. + 7.1. - 17.1.)

Abfrage von Ergebnissen

Anmeldefristen: Lehrstuhl-Webpage, Rundmails, Vorlesung

9

11

Das müssen Sie leisten

Eigenstudium (8-10 Stunden/Woche)

Übungsaufgaben lösen

Vorlesung nachbereiten und ergänzen

über den Tellerrand hinaus schauen

Inhalte hinterfragen auf Vorlesung/Übungsgruppe vorbereiten

Präsenzstudium (6 Stunden/Woche)

Vorlesung: Selektiv Mitschreiben, Mitdenken, Fragen stellen

Übungsgruppen: Vorrechnen, Fragen stellen, Diskutieren, Mitarbeiten

1 LP = 30 Stunden: 8 LP = 240 Stunden

1 Semester = 15 Wochen: 16 Stunden/Woche

10

Verwaltungssysteme

STUDIS: Verwaltungssystem des Prüfungsamts https://www.studis.uni-augsburg.de/studisaugsburg/fai/

Anmeldung zu Prüfungsmodulen (7.1. - 17.1.)

Teilnahme an den Klausuren ohne STUDIS-Anmeldung ist

NICHT möglich

Anmeldefristen: Lehrstuhl-Webpage, Rundmails, Vorlesung

Der Lehrstuhl ist nicht für Studis zuständig

 Bei Problemen: Prüfungsamt!

12

Vorlesungsbetrieb

Zwei Vorlesungen pro Woche im Hörsaal 1 (HS1)

Montag 10:00 – 11:30

Mittwoch 12:15 – 13:45

Folien zur Vorlesung http://www.informatik.uni-augsburg.de/lehrstuehle/inf/ auch ausgedruckt (4 Folien/Seite)

13

Übungsbetrieb…

Übungsblätter

Abgabe…

…bis Montag, 12 Uhr:

…per Mail an den Tutor der eigenen Übungsgruppe

…und schriftlich in Vorlesungs-Briefkasten im Informatikgebäude

Angabe von…

…Name+Matrikelnummer aller Teammitglieder

…und Nummer der Übungsgruppe

15

Übungsbetrieb

Übungsblätter

1 Übungsblatt/Woche, Ausgabe Montags (Start 25.10.) unter http://www.informatik.uni-augsburg.de/lehrstuehle/inf/

Bearbeitung (nur) in Teams von 2 bis 3 Studenten einer

Übungsgruppe

Bearbeitungszeit 1 Woche

Jede Übungsaufgabe bringt 1 Übungspunkt

Übungspunkte benötigt man für die Klausurzulassung

14

Übungsbetrieb

Übungsgruppen

Geleitet durch Tutor (Student aus höherem Semester)

Besprechen und Vorrechnen der Übungsblätter (nach deren

Abgabe und Korrektur)

Rückgabe der korrigierten Übungsblätter

Start: 25.10. (Kennenlernen, Teambildung, Fragen)

Vorrechnen einer Aufgabe bringt einen Übungspunkt

Übungspunkte benötigt man für die Klausurzulassung

16

Übungsbetrieb

Übungsgruppen

13 Gruppen zu maximal 20-25 Teilnehmern

Automatische Verteilung auf die Gruppen durch Lehrstuhl

 Vorregistrierung und Angabe von Prioitäten notwendig

Wiederholergruppe (zur Verwaltung, für Rundmails):

Klausurzulassungen ab WS 2008/2009 sind gültig

 Anmeldung bei keiner Teilnahme am Übungsbetrieb

Lehramtsgruppe (zur Verwaltung, für Rundmails):

Anmeldung als Lehramtsstudent (keine Klausurteinahme), falls keine Teilnahme am Übungsbetrieb

17

Übungsbetrieb

Betreutes Üben/Programmieren

Bearbeiten zusätzlicher Übungs-/Programmier-Aufgaben mit

Unterstützung durch Tutoren

Mittwoch, 14.00 – 19.00

Räume 1001 N + 1002 N (neues Gebäude)

Beginn: 27.10.

Zusatzaufgabe bringt einen Übungspunkt

Übungspunkte benötigt man für die Klausurzulassung

19

Übungsbetrieb

Übungsgruppen

Anmeldung:

1. Unter https://peaches.informatik.uni-augsburg.de/lecturereg/

in Vorregistrierungs-, Lehramts- oder Wiederholergruppe

(Anmeldefrist bis 22.10.2010, Mitternacht)

2. Vorregistrierungsgruppe: Zusätzlich Angabe von Prioritäten unter http://141.78.96.4/PrioMan/

(Anmeldefrist bis 22.10.2010, Mitternacht)

3. Wir starten Algorithmus zur optimalen Einteilung gemäß Prioritäten

 keine Ausnahmen, Einteilung gültig ab 25.10.2009,

Bekanntgabe am Wochenende online (Lehrsuhl-Webseite)

18

Übungsbetrieb

Globalübung

Nach Korrektur eines Übungsblatts

Fragen, häufige Fehler, alternative Lösungen,

Nachbetrachtungen, kein Vorrechnen

Betreuung durch den Lehrstuhl

Dienstag, 15.45 – 17.15

Raum 1058 N (neues Gebäude)

Beginn: 16.11.

20

Übungsbetrieb

Verbreitung von Lösungen

Übungsleistungen sind Teil der Prüfungsleistung

 Verbreitung von Lösungen nur eingeschränkt erlaubt: innerhalb des Übungsblatt-Teams nach Besprechung in letzter Übungsgruppe

 Nach der Besprechung in letzter Übungsgruppe:

Wir unterstützen Veröffentlichung kommentierter Lösungen

Wir stellen kommentierte Musterlösungen online

21

Prüfungsmodalitäten

Für ALLE gilt:

Am Semesterende: 1. Klausur

Vor Veranstaltungsbeginn nächstes Semester: 2. Klausur

Anmeldung notwendig unter Studis und LectureReg

Achtung: Studis-Anmeldung führt zur Bewertung auch bei

Nicht-Teilnahme (als nicht bestanden)

Je nach Studiengang unterscheiden sich

Anmelde-Modalitäten

Anzahl der Prüfungsversuche

23

Übungsbetrieb

Rechnerräume

1001 N (neues Gebäude)

1002 N (neues Gebäude)

1005 N (neues Gebäude)

134 T (Physikgebäude)

22

Prüfungsmodalitäten

Für ALLE gilt:

Man soll zielgerichtet studieren, d.h. jede

Prüfungsmöglichkeit (jedes Klausurangebot) wahrnehmen

Nicht zielgerichtet zu studieren hat Nachteile

Erhöhung des Lernaufwands (über die Ferien alles vergessen) mehr Überschneidungen mit anderen Veranstaltungen

Probleme bei Anträgen auf Fristverlängerung

Bereiten Sie sich aus denselben Gründen gleich auf die 1.

Klausur gründlich und gewissenhaft vor

24

Prüfungsmodalitäten

Für Bsc. Informatik/Informatik&Multimedia ab PO 2008 gilt:

Jede Klausur ist ein eigenes Prüfungsmodul

 für jede Klausur (Prüfung) ist Studis-Anmeldung erforderlich

Sonderregelung: Man kann mit 2. Klausur Note verbessern in Informatik 1 (und Informatik 2)

25

Prüfungsmodalitäten

Für Bsc. Wirtschaftsinformatik gilt:

Einführung in die Informatik = Informatik 1

Einführung in die Softwaretechnik = 1. Hälfte Informatik 2

Jede Klausur ist ein eigenes Prüfungsmodul

 für jede Klausur (Prüfung) ist Studis-Anmeldung erforderlich

Bei Bestehen kann die Note nicht mehr verbessert werden

27

Prüfungsmodalitäten

Für Bsc. Informatik/Informatik&Multimedia nach PO 2008 gilt:

Nach dem 3. Semester müssen zur Orientierungsprüfung zählende Prüfungen bestanden sein

 u.a. in Informatik I, Informatik II, Programmierkurs, …

Damit hat man faktisch:

3 Prüfungsversuche in Informatik I

2 Prüfungsversuche in Informatik II

5 Prüfungsversuche im Programmierkurs

26

Prüfungsmodalitäten

Für Bsc. Wirtschaftsinformatik gilt:

Informatik 1 (und Informatik 2) sind Pflichtveranstaltungen

 müssen bis spätestens zum 8. Semester bestanden sein

Nach dem 2. Semester müssen für Orientierungsprüfung notwendigen Leistungspunkte (30 LP) gesammelt sein

 Informatik 1 (Informatik 2) können/müssen aber nicht eingebracht

28

Prüfungsmodalitäten

Für alle anderen gilt:

Beide Klausuren zählen zusammen als ein Prüfungsmodul

 nur eine Studis-Anmeldung vor 1. Klausur nötig

Es zählt die bessere Note aus beiden Klausuren

Anzahl der Prüfungsversuche, Obergrenze Semesteranzahl

 bitte eigene PO lesen!

29

Programmierkurs

Termine und Modalitäten:

1 Woche Blockveranstaltung täglich 9 – 16 Uhr

Teilnehmerzahl/Block: maximal 30

Im WS: 2 Blöcke, im SS: 1 Block

Inhalt:

Vertiefung des Programmierstoffs aus Informatik 1 (im WS) bzw. Informatik 2 (im SS), 5 Tagesthemen

31

Programmierkurs

Teilnehmer:

Verpflichtend für Bsc. Informatik/Informatik&Multimedia

Kann nur von Bsc. Informatik/Informatik&Multimedia belegt und eingebracht werden

Angebote:

Im WS: Programmiersprache C

Im SS: Programmiersprache Java

30

Programmierkurs

1. Prüfung:

5 Tagesprüfungen jeweils zum Tagesthema

Integriert in Veranstaltungsblock jeweils 60-90-minütige Programmieraufgabe

2. Prüfung:

Vor Veranstaltungsbeginn nächstes Semester

Eine 5-6-stündige Prüfung mit 5 Aufgaben

Ohne Veranstaltungsblock

32

Klausur

Zulassung (gilt für alle trotz unterschiedlicher POs!)

Mindestens 20 Übungspunkte aus…

…Bearbeitung von Übungsblättern (ca. 11-12 Stück)

1 Punkt für jede richtig bearbeitete Aufgabe

4 Aufgaben pro Übungsblatt

…Vorrechnen in den Übungsgruppen

1 Punkt jede vorgerechnete Aufgabe

Maximal 12 mal Vorrechnen zählen

…Bearbeitung der zusätzlichen Aufgabe im betreuten

Programmieren (ca. 14-15 Termine)

1 Punkt für richtig bearbeitete Aufgabe

33

Klausur

Bewertung

Für je 5 Punkte über der Zulassungsgrenze (20 Punkte) gibt es einen Bonuspunkt

 es sind maximal ca. 10-11 Bonuspunkte erreichbar

In der Klausur sind 120 Punkte erreichbar

Zum Klausurergebnis werden die Bonuspunkte hinzugezählt

Das Prüfungsmodul ist bestanden mit 50% der

Gesamtpunkte (also 60 Punkten)

Klausurnote zählt zur Endnote

35

Klausur

Zulassung

Mindestens 1 mal Vorrechnen in der Übungsgruppe

Anmeldung zur Klausur in LectureReg und Studis

Klausur

Alte Zulassungen

Zulassungen/Bonuspunkte seit WS08/09 bleiben erhalten

Zulassungen vor WS08/09 zählen nicht

34

36

Klausur

Termine

1. Klausur:

Teil 1: 22.12., HS 1 + 1001 Jura, 60 Minuten

12.00 – 13.00 Uhr (Block 1)

13.00 – 14.00 Uhr (Block 2)

Stoff: bis einschließlich Übungsblatt 6 (29.11.)

Teil 2: 9.2., HS 1 + 1001 Jura, 60 Minuten

12.00 – 13.00 Uhr (Block 1)

13.00 – 14.00 Uhr (Block 2)

Punkte beider Teile zusammengerechnet bewertet

2. Klausur: 1-2 Wochen vor Folgesemester, 120 Minuten

37

Klausur

Vorbereitung

Lernen Sie nicht auswendig, sondern verstehen Sie den Stoff:

Setzen Sie Inhalte in Beziehung zueinander

Hinterfragen Sie Inhalte: Wieso mache ich etwas so und nicht anders?

Verschaffen Sie sich einen kompletten Überblick über den Stoff

Arbeiten Sie den roten Faden heraus

Erstellen Sie sich eigene Zusammenfassungen in unterschiedlicher

Detailliertheit (Abstraktionsebene)

Verschaffen Sie sich andere Perspektiven auf die Inhalte durch Bücher

39

Klausur

Vorbereitung

Erfahrungen:

< 20%, die die 1.Klausur nicht bestehen, schaffen die 2.Klausur

ca. 30% bestehen die erste Klausur nicht

Bonuspunktedurchschnitt Nicht-Bestehen: 3-4 (wenig geübt)

Bonuspunktedurchschnitt Bestehen: 6-8 (viel geübt)

> 95% würden auch ohne Bonuspunkte bestehen

 Bereiten Sie sich schon auf die 1.Klausur ausreichend vor

 Üben Sie viel und gleichmäßig über das Semester

38

Klausur

Vorbereitung

Wiederholen Sie alte Übungsaufgaben ohne Benutzung der

Lösung

Eine Lösung nachvollziehen können reicht nicht; Sie müssen selbst auf die Lösung kommen.

Sehen Sie nur in die Musterlösung, wenn sie an einer Stelle absolut nicht weiterkommen.

Wenn ihre Lösung nicht mit der Musterlösung übereinstimmt, überprüfen

Sie, ob die Musterlösung falsch oder alternativ ist

Üben Sie „schriftliches“ Programmieren, d.h. üben Sie,

Programme auf einem Blatt Papier aufzuschreiben

40

Software

Programmiersprache C:

GNU Compiler Collection

Zur Übersetzung/Ausführung von C-Programmen

Verfügbar unter Windows, Linux und Mac

Installationshilfe: Tutoren, Studentenforum

In den Rechnerräumen zur freien Verwendung installiert

Literatur/Materialien

Programmiersprache C

C Programmieren von Anfang an: H. Erlenkötter, rororo,

2008 sehr leichte Einführung geht pädagogisch vor führt in vielen Themen nur in Grundlagen ein vermittelt kaum vertieftes Wissen ausreichend für die ersten 6 Wochen geeignet für Programmierneulinge (auch zum Kauf)

41

43

Software

Entwicklungsumgebungen:

Editor-Programme zum bequemeren Programme-Schreiben

Dürfen Sie nach Ihrer Wahl verwenden

Aber: der Lehrstuhl unterstützt kein bestimmtes Programm

Frei verfügbare Programme:

Dev-C++

CodeBlocks

...

42

Literatur/Materialien

Programmiersprache C

Programmieren in C: B. W. Kernighan, D. M. Ritchie, A.-T.

Schreiner, und E. Janich, Hanser, 1990

Das Standard- und Nachschlagewerk: komplette Darstellung von C

Inhaltlicher Aufbau/Beispiele anspruchsvoll, weniger pädagogisch ideal zur Ergänzung der Vorlesung ergänzend notwendig nach ca. 6 Wochen

Informatik-Hauptfächler/Programmiererfahrene: unbedingt kaufen!

44

Literatur/Materialien

Programmiersprache C

Online-Dokumentationen zum selbst recherchieren

C Standard Bibliothek: http://www2.hs-fulda.de/~klingebiel/c-stdlib/

GNU C Library: http://www.gnu.org/software/libc/manual/html_mono/libc.html

45

Literatur/Materialien

Theoretische Inhalte

Einführung in die Informatik: Gumm, Sommer sehr umfassend, enthält auch Informatik 2 – Anteile

Vorlesungsrelevante Kapitel:

1. Informationsdarstellung, Zahlendarstellungen, Hardware,…

2. Programmiergrundlagen, Problem-Spezifikation,…(zu wenig)

(3. Java: relevant für Informatik 2)

4. Algorithmen/Datenstrukturen, Such-und Sortierverfahren (zu viel)

5. Rechnerarchitektur, Maschinensprachen, Assembler (zu viel)

(8. Internet: relevant für Informatik 2) trifft leider den Vorlesungsinhalt nicht genau

47

Literatur/Materialien

Theoretische Inhalte

Problem - Algorithmus - Programm: R. Richter, P. Sander und W. Stucky, Teubner, 1993 dient der Vorlesung als Vorlage wird leider nicht mehr verkauft 

Literatur/Materialien

Grundsätzliches

Selbstständig in Bibliothek/Internet recherchieren!

 alternative Bücher anlesen/durchlesen

 Inhalte einordnen bzgl. Relevanz für Vorlesung

 Vorlesungsinhalt „wiederentdecken“

Über den Tellerrand schauen

Aktuelle Entwicklungen verfolgen

46

48

Literatur/Materialien

Über den Tellerrand geschaut

Erich Fromm: Die Furcht vor der Freiheit (Standardwerk zu Freiheit)

David Gelernter: Machine Beauty – Elegance and the heart of

technology (Schönheit und Technik)

Volker Grassmuck: Freie Software – Zwischen Privat- und

Gemeineigentum (Geistiges Eigentum und Open Source)

Glyn Moody: Die Software-Rebellen (Standardwerk zur Entstehung von Linux)

Eric S. Raymond: The Cathedral and the Bazaar (Programmieren und östliche

Philosophie – Programmierer sind Künstler)

Eric S. Raymond: The art of Unix programming (Standardwerk Open Source)

Joseph Weizenbaum: Die Macht der Computer und die Ohnmacht der

Vernunft (Standardwerk zu Computer und Gesellschaft)

Tom deMarco: Der Termin (IT-Consulting Guru)

49

Was ist Informatik?

Wissenschaft der Verarbeitung, Speicherung und Übertragung von Information

Namensbestandteile: Informatik = Information + Mathematik

Was ist nun Information?

Bei Fragen http://studentenforum.uni-augsburg.de/ http://www.informatik.uni-augsburg.de/lehrstuehle/inf/ [email protected]

[email protected]

[email protected]

Sprechzeiten

Mittwoch, 10:00 – 11:00, Raum 1023 N (neues Gebäude)

Direkt nach der Vorlesung

50

Was ist Informatik?

Wissenschaft der Verarbeitung, Speicherung und Übertragung von Information

Nachricht endliche Folge von Symbolen zur Speicherung/ Übertragung von Information vom konkreten Medium abstrahierte Form von Mitteilung

 Nicht alle Symbolfolgen stellen Nachrichten dar

 Die Syntax gibt an, welche Symbolfolgen Nachrichten sind

Beispiel: Nachricht: „Lorenz“

52 51

Was ist Informatik?

Wissenschaft der Verarbeitung, Speicherung und Übertragung von Information

Information einer Nachricht durch Interpretation zugeordnete Bedeutung ebenfalls vom Medium abstrahiert

 Die Semantik gibt die Bedeutung von Symbolfolgen an

Beispiel: Nachricht: „Lorenz“, Semantik: Nachname

53

Was ist Informatik?

Wissenschaft der Verarbeitung, Speicherung und Übertragung von Information

Informatik ist eine präzise Wissenschaft

 Machen Ihnen Mathematik oder naturwissenschaftliche

Fächer Spaß?

Informatik ist eine konstruktive Wissenschaft

 Interessieren Sie sich für Computerprogramme,

Kommunikationsnetzwerke, das Internet?

 Gestalten Sie gern Neues und sind kreativ?

55

Was ist Informatik?

Wissenschaft der Verarbeitung, Speicherung und Übertragung von Information

Daten

Paare aus Nachricht und zugeordneter Information

54

Was ist Informatik?

Theoretische Informatik

(Einführung in die theoretische Informatik, Informatik III, Diskrete Strukturen,

Mathematik für Informatiker, …)

Praktische Informatik

(Informatik I+II, Programmierkurs, Softwareprojekt, Softwaretechnik,

Datenbanken, …)

Technische Informatik

(Systemnahe Informatik, Kommunikationssysteme,… )

Angewandte Informatik

(Wirtschaftsinformatik, Geoinformatik,…)

 Definition, Beziehungen: eigene Recherche, z.B. Wikipedia,

Gesellschaft für Informatik (GI), … (Übungsaufgabe)

56

Was ist Informatik?

Aufklärung von Klischees

Informatiker entwerfen Anwendungen

(Anwendungen nutzen ist Sache der Anwender)

Informatik ist die Kunst, sich das Programmieren zu erleichtern

(Informatik : Programmieren = Architektur : Bau)

Informatiker arbeiten zusammen mit anderen Menschen

(in Teams, in Projekten, mit Kunden, als Führungskräfte, …)

57

Das lernen Sie an der Uni…

…und brauchen Sie in Wissenschaft und Wirtschaft:

F

Eigenverantwortung, Selbstständigkeit, Engagement

Fachinhalte kommunizieren (aufschreiben und vortragen)

Probleme, Zusammenhänge, Trends erkennen

Aktuellen Stand der Technik kennen

Unmögliches für möglich halten

Strukturieren, Formalisieren, Abstrahieren

Teamfähigkeit

Schwerpunkt liegt auf methodischen und fachlichen Grundlagen

 Voraussetzung für innovative Entwicklungen

 Erleichtert Einstellung auf neuartige technische Gegebenheiten

 Die Uni besteht nicht aus Kursen in aktuellen Anwendungen

59

Was ist Informatik?

Aufklärung von Klischees

Nachhaltige Ideen in der Informatik sind theoretisch fundiert!

(Schnelle ad-hoc-Lösungen haben langfristige

Folgeprobleme)

Was zählt ist das Können (nicht der Abschluss)

(Abschluss für Einstieg, praktisches Können für mittelfristigen Erfolg, theoretisches Können für langfristiges

Behaupten)

Informatik ist mehr als PC+Internet

(98% der Chipproduktion für eingebettete Systeme)

58

Das lernen Sie in Informatik 1

Inhalt:

Wie man Probleme der Informationsspeicherung und

Informationsverarbeitung mit dem Rechner löst:

Problem Algorithmus Programm

60

Das lernen Sie in Informatik 1

Praktisches Problem

Abstraktion

Mathematisches Modell

Kreativer Schritt

Algorithmus

Programmierung

Programm

Informationssuche

Mustererkennung

Eingabedaten

Ausgabedaten

Funktionale Abhängigkeit exakte programmiersprachenunabhängige

Formulierung mechanisch ausführbarer Abläufe für beliebig viele Instanzen

(verständlich für den Benutzer)

Formulierung des Algorithmus in der „Sprache“ der Maschine

(verständlich für den Computer)

61

Abstraktion

Betrachtung eines Problems ohne Kenntnis bestimmter Details auf verschiedenen Ebenen

(aus verschiedenen Perspektiven)

Welche Details sind „wesentlich“, welche „unwichtig“?  abhängig von der Perspektive!

Das lernen Sie in Informatik 1

Programmieren ist also nur ein Teil des Vorlesungsinhalts

Andere wichtige Fertigkeiten: Modellbildung, Abstraktion, formale Grundlagen

Abstraktion

 Arbeitsteilung Elektroniker / Hardware-Designer /

Programmierer / Modellierer / …

 Stabile Lösungen auf abstrakter Ebene bei

Technologiewandel, Wiederverwendbarkeit

 hilft bei Fehlervermeidung

 gestattet einheitliche Sicht auf heterogene Welt

 gestattet Konstruktion aus Sicht des Benutzers

 gestattet Strukturierung komplexer Systeme

62

64 63

Inhalt

Theorie:

Rechnerarchitektur

Zahlen- und Zeichendarstellung

Spezifikation von Problemen

Darstellung von Algorithmen

Eigenschaften von Algorithmen

Korrektheit von Algorithmen

Effizienz von Algorithmen

Datenstrukturen

65

Zusammenfassung

Alle haben die Chance mitzukommen

(wir fangen bei „0“ an, kein Vorwissen nötig)

Ohne Mathematik geht nichts

Spaß am Computer/Programmieren hilfreich

Wer sich engagiert, schafft auch den Schein

Ohne Üben kann man Programmieren nicht erlernen

67

Inhalt

Programmieren:

Variablen und Konstanten

Kontrollstrukturen (Fallunterscheidung, Wiederholung)

Funktionen

Präprozessor und modularisierte Implementierung größerer Programme

Zeichenketten und Felder

Zeiger

Dynamische Speicherverwaltung

Komplexe Datentypen

66

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

Programmieren in C – Erste Schritte

1

Inhalt

Die Kommandozeile

Ein einfaches Programm

Programm erstellen

Programm aufrufen

Die Funktion printf

2

Kommandozeile

Kommandos:

Vordefinierte Kommandos zur Navigation im Dateisystem (abhängig vom

Betriebssystem, Selbststudium)

Vordefinierte Kommandos zur Steuerung des Betriebssystems

(weiterführend, benötigen wir nicht)

Name eines ausführbaren Programms (.exe-Endung)

Kommando ausführen

Kommando eintippen und Eingabetaste drücken

Bei Programmen: vorher ins Programmverzeichnis wechseln

4

Kommandozeile

Im einfachsten Fall erfolgen Aufruf und Ausgabe von Programmen per Kommandozeile

Andere Bezeichnungen:

Befehlszeile, command-line interface - CLI, Konsole, Terminal

Die Kommandozeile ist Eingabebereich für die Steuerung von

Software, typischerweise (aber nicht zwingend) im Textmodus

Kommandos werden als Zeichenfolgen per Tastatur eingegeben

Kommandozeile

Programmaufrufe

Steuerung der Ausführung über sog. Kommandozeilenparameter des

Programms (Syntax: Selbststudium)

Keine interaktive Befragung des Benutzers durch das Programm

Automatisiertes Abarbeiten mehrerer Kommandos:

Stapelverarbeitungs-Dateien (Batch-Dateien, weiterführend, benötigen wir nicht)

3

5

Ein einfaches Programm

Ein Programm ist ein Text bestehend aus Anweisungen

In der einfachsten Form: Sequenz von Anweisungen (ähnlich einer Bedienungsanleitung):

Anweisung 1

Anweisung 2

Anweisung n

6

Ein einfaches Programm

Ein Programm ist ein Text bestehend aus Anweisungen

Ein Programm ist eine Textdatei, die nach bestimmten

Grammatik- Regeln geschrieben wird

Das Format der Textdatei ist nicht relevant

Programme können mit jedem Texteditor geschrieben werden

8

Ein einfaches Programm

Ein Programm ist ein Text bestehend aus Anweisungen

Anweisungen müssen „Computerverständlich“ sein direkt vom Computer ausführbar = Maschinensprache

übersetzbar in Maschinensprache = höhere Programmiersprache (für den Menschen verständlich!)

Definition von Programmiersprachen = für den Computer verständliche Sprachen

Nicht jeder Text ist als Programm interpretierbar

Computer = Maschine, die man mit Programmen steuert

7

Ein einfaches Programm

/* bsp01.c */

#include <stdio.h> main(){

/* Anweisung 1 */ printf("Dies ist unser erstes C-Programm.\n");

/* Anweisung 2 */ printf("\nEs illustriert die Benutzung ");

/* Anweisung 3 */ printf(" der Funktion 'printf'.\n");

}

9

Ein einfaches Programm

/*bsp01.c*/#include<stdio.h>main(){/*Anweisung 1*/ printf("\nDies ist unser erstes C-Programm.\n");/*

Anweisung 2*/printf("\nEs illustriert die Benutzung

");/*Anweisung 3*/printf(" der Funktion 'printf'.\n");}

Dasselbe Programm, wenn auch völlig unleserlich für den

Programmierer

Man beachtet Formatierungsregeln aus Gründen der

Fehlervermeidung, Lesbarkeit, Wartbarkeit und Veränderbarkeit

10

Ein einfaches Programm

(1) Kommentar, auch mehrzeilig: optional erhöht Verständlichkeit wird bei der Programmausführung ignoriert

(1) /* bsp01.c */

(2) #include <stdio.h>

(3) main(){

(4)

(5)

(6)

(7) } printf("\nDies ist unser erstes C-Programm.\n"); printf("\nEs illustriert die Benutzung "); printf(" der Funktion 'printf'.\n");

12

Ein einfaches Programm

Dies ist unser erstes C-Programm.

Es illustriert die Benutzung der Funktion 'printf'.

_

Ausgabe erfolgt in der Kommandozeile

(Grafische Programme: nächstes Semester)

Ein einfaches Programm

(2) Fügt Bibliotheksquellcode (Sammlung vordefinierter

Funktionen) aus der Datei stdio.h ein

Macht die printf-Funktion benutzbar

(1) /* bsp01.c */

(2) #include <stdio.h>

(3) main(){

(4)

(5)

(6)

(7) } printf("\nDies ist unser erstes C-Programm.\n"); printf("\nEs illustriert die Benutzung "); printf(" der Funktion 'printf'.\n");

13

11

Ein einfaches Programm

(3) Hauptfunktion main(){...}

Ausführung beginnt mit Aufruf dieser Funktion

()

{...}

main hat keine Eingabeparameter

Anweisungsblock mit Anweisungen von main

(1) /* bsp01.c */

(2) #include <stdio.h>

(3) main(){

(4)

(5)

(6)

(7) printf("\nDies ist unser erstes C-Programm.\n");

printf("\nEs illustriert die Benutzung ");

} printf(" der Funktion 'printf'.\n");

14

Programm erstellen

Zusammenfassung

Ein Programm ist eine Textdatei, der Programmtext heißt

Quellcode

Quellcode lässt sich mit einfachen Texteditoren erstellen

C-Programm-Dateien müssen die Endung .c haben

C-Quellcode muss erst noch in Maschinensprache

(= direkt ausführbarer Code) übersetzt werden

16

Ein einfaches Programm

(4),(5),(6) Aufruf der Funktion printf(format) hat Zeichenfolge format als Eingabeparameter dient formatierter Ausgabe der Zeichenfolge

"..."

\n

; definiert eine Zeichenkette

Zeichenfolge für neue Zeile (n=new line) schließt Anweisungen ab

(1) /* bsp01.c */

(2) #include <stdio.h>

(3) main(){

(4)

(5)

(6)

(7) printf("\nDies ist unser erstes C-Programm.\n");

printf("\nEs illustriert die Benutzung ");

} printf(" der Funktion 'printf'.\n");

15

Programm erstellen

Entwicklungsumgebungen

Eine Entwicklungsumgebung ist ein Texteditor der durch einige zusätzliche Funktionalitäten das Erstellen von Programmen vereinfacht:

Syntax-Highlighting: Hervorheben von reservierten Wörtern

Syntaxvervollständigung: Automatische Ergänzung von Schlüsselwörtern

Grafische Benutzerschnittstelle für Übersetzung und Ausführung

Automatische Textformatierung (Einrücken, …), …

Das Benutzen von Entwicklungsumgebungen ist erlaubt

17

Programm übersetzen und ausführen

Quellcode

Übersetzung ausführbarer Code

18

Programm übersetzen und ausführen

Vom Quellcode zum Programm per Kommandozeile gcc –o prg01 bsp01.c

gcc

-o

prg01

bsp01.c prg01

prg01

Aufruf Übersetzer (überprüft auch Übersetzbarkeit) steht für output, es muss ein Dateiname folgen (prg01)

Dateiname des ausführbaren Programms

Dateiname des zu übersetzenden Quellcodes

Aufruf und Ausführung des Programms

20

Programm übersetzen und ausführen später mehr

Quellcode

Präprozessor

Compiler

Bibliotheken Übersetzung

Linker ausführbarer Code

19 printf

}

/* bsp02.c */

#include <stdio.h> main(){ printf("\nWir rechnen:"); printf("\n1 + 1 = %i\n1 * 1 = %i",1+1,1*1); printf("\n1 %% 1 = %i",1%1);

21

printf

Ausgabe:

Wir rechnen:

1 + 1 = 2

1 * 1 = 1

1 % 1 = 0 printf

Grundrechenarten

+ addieren

* multiplizieren

% modulo=Divisionsrest

}

/* bsp02.c */

#include <stdio.h> main(){ printf("\nWir rechnen:"); printf("\n1 + 1 = %i\n1 * 1 = %i\n",1+1,1*1); printf("\n1 %% 1 = %i",1%1);

24

22 printf

Platzhalter für einen ganzzahligen Wert %i (i=integer) der einzusetzende Wert folgt durch Komma getrennt dahinter es müssen genauso viele Werte folgen wie es Platzhalter gibt

Werte werden von links nach rechts für Platzhalter eingesetzt

Wert kann durch einen (Rechen-)Ausdruck gegeben sein (1+1)

}

/* bsp02.c */

#include <stdio.h> main(){ printf("\nWir rechnen:"); printf("\n1 + 1 = %i\n1 * 1 = %i\n",1+1,1*1); printf("\n1 %% 1 = %i",1%1);

23 printf

Sonderzeichen

Ausgabe durch Voranstellen von %

%% gibt das %-Zeichen innerhalb eines Textes aus

}

/* bsp02.c */

#include <stdio.h> main(){ printf("\nWir rechnen:"); printf("\n1 + 1 = %i\n1 * 1 = %i\n",1+1,1*1); printf("\n1 %% 1 = %i",1%1);

25

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

Rechnerarchitektur und -organisation

Inhalt

Wir machen uns klar:

Ein Computer ist eine (zugegebenermaßen sehr komplexe) elektrische Maschine, die nur tut, was wir ihr sagen (eingeben)

…Ein PC ist also sowas wie ein komplizierter Kaffeeautomat…

Wir lernen jetzt:

Grund-Aufbau und -Funktionsweise heutiger Rechner ohne technische Details

 abstrakte Sicht

 Nur soviel Details, dass wir glauben, dass es funktioniert

3

1

Inhalt

Geschichte der Informatik

Von-Neumann-Rechner

Hardware

Software zur Bedienung eines Rechners

2

Geschichte der Informatik

Das älteste Konzept der Informatik ist der Algorithmus exakte Formulierung …

(Mathematisches Modell, z.B. Programmiersprache) mechanisch ausführbarer Abläufe… für beliebig viele Instanzen

4

Geschichte der Informatik

Das älteste Konzept der Informatik ist der Algorithmus

Beispiel in Pseudocode-Darstellung: Berechnung des ggT's

Eingabe: a,b in Ν (ganze, positive Zahlen)

Methode: repeat r ← a mod b a ← b b ← r

until r = 0

Ausgabe: a = ggT(a,b)

EUKLIDischer Algorithmus (3. Jahrhundert vor Chr.)

5

Geschichte der Informatik

Wichtige Entwicklungen zu

- Rechenvorschriften

- theoretischen Konzepten von Rechenmaschinen

- konkret konstruierten Rechenmaschinen von Adam Ries(e), Blaise Pascal, Gottfried Wilhelm Leibnitz,

Charles Babbage, Konrad Zuse, John von Neumann, … (in dieser zeitlichen Reihenfolge)

 eigene Recherche (Übungsaufgabe)

7

Geschichte der Informatik

Eingabe:

Methode:

Ausgabe: a,b in Ν (a,b = Variablen = Platzhalter für konkrete Zahlen) repeat (Wiederholung bis Bedingung wahr) r ← a mod b (Wertzuweisung) a ← b b ← r until r = 0

(Wertzuweisung)

(Wertzuweisung)

(Bedingung) a = ggT(a,b) (Ausgabe)

Jedes konkrete für a,b eingesetzte Zahlenpaar ist eine Instanz

6

Geschichte der Informatik

Entwicklung von Rechenmaschinen im 20. Jhd.:

1950:

Elektronenröhren als Schaltelemente,

1000 elementare Operationen/sec.,

Kein Betriebssystem, nicht programmierbar

- (schneller, kleiner, billiger, komplexer, mächtiger,

benutzerfreundlicher)

2000

Halbleiterschaltkreise (hochintegriert, VLSI)

2000000000 elementare Operationen/sec.(2000 MHz)

(Mehrbenutzer-)Betriebssysteme, programmierbar (Lochkarten, COBOL, FORTRAN, PASCAL,

PROLOG, …)

8

Geschichte der Informatik

Fazit:

Die technische Entwicklung zog notwendigerweise theoretische

Entwicklung nach sich

Grundlegende Theorie trotzdem nach wie vor gültig – z.B.

Algorithmusbegriff (Vorteil von Abstraktion von technischer

Realisierung)

Von-Neumann-Rechner

(nach Burks, Goldstine und von Neumann, 1946)

Steuerwerk

Rechenwerk

CPU

Eingabewerk Speicherwerk Ausgabe

CPU = Central Processing Unit = Zentraleinheit

: Datenfluß : Steuerfluß

11

9

Von-Neumann-Rechner

(nach Burks, Goldstine und von Neumann, 1946)

Theoretisches, aber mechanisch umsetzbares, Konzept des

Aufbaus/der Konstruktion eines Rechners

Noch heutige Rechner beruhen wesentlich auf diesem Konzept

 Werden wir als Grundlage besprechen neue Entwicklungen:

Parallelrechner (im praktischen Einsatz)

Quantencomputer (theoretisches Konzept, nur in sehr kleinem Maßstab realisiert)

10

Von-Neumann-Rechner

Speicherwerk: Speicherung von Daten und Programmen

Rechenwerk: Ausführung arithmetischer/logischer Operationen

Steuerwerk: Steuerung des Programmablaufs

Eingabewerk: Eingabe von Programmen / Daten in den Speicher

Ausgabewerk: Ausgabe von Ergebnissen vom Speicher

12

Speicherwerk

Speicherung von Daten und Programmen

 Für jedes Problem wird Bearbeitungsvorschrift (Programm)

„von außen“ eingegeben und im Speicher abgelegt.

 Struktur unabhängig von den zu bearbeitenden Problemen

Programme und Daten im selben Speicher

13

Speicherwerk

Speichereinheiten:

Bit (binary digit)

Speicherplatz für die kleinstmögliche Informationsmenge:

1 oder 0, Ja oder Nein, Ein oder Aus

Byte

Gruppierung von acht Bit (2 hoch 8 = 256 Kombinationen)

Zur Darstellung eines Zeichens k = 1024 = 2 10 ≅ 10 3 (k = Kilo)

M = 1024 2 = 2 20 ≅ 10 6 (M = Mega)

G = 1024 3 = 2 30 ≅ 10 9 (G = Giga)

T = 1024 4 = 2 40

≅ 10 12 (T = Tera)

P = 1024 5 = 2 50 ≅ 10 15 (P = Peta)

E = 1024 6 = 2 60 ≅ 10 18 (E = Exa)

15

Speicherwerk

Unterteilt in gleich große Einheiten = Speicherzellen

Speicherzellen mittels eindeutiger Zahlen, sogenannter Adressen, durchnummeriert.

0

1

2

… …

Direkter Zugriff auf Speicherzellen (Random Access)

14

Speicherwerk

Unterteilt in gleich große Einheiten = Speicherzellen

Jede Speicherzelle besteht aus einer festen Anzahl k von Bits

(Typisch: k {8, 16, 32, 64})

Buchstaben, Zahlen und Befehle werden durch Folgen von 0en und 1en dargestellt (kodiert) (Wie?  später)

Eine Speicherzelle zur Speicherung eines Zeichens, einer Zahl oder eines Befehls

0 0000 0100

1 0100 1001

2 ...

16

Speicherwerk

Unterteilt in gleich große Einheiten = Speicherzellen

Wie werden Programme gespeichert?

Aufeinanderfolgende Befehle in aufeinanderfolgenden

Speicherzellen

Ansprechen des nächsten Befehls:

Erhöhen der Speicherzellen-Adresse um Eins

Sprungbefehle (zu anderer Adresse)

Speicherwerk

In der Praxis:

Interner Speicher (Primärspeicher):

Preis pro Bit Zugriffszeit Kapazität hoch niedrig niedrig

Register

Cache-Speicher

Arbeitsspeicher niedrig hoch hoch

19

17

Speicherwerk

In der Praxis:

Kriterien:

Schnelligkeit, Kapazität, Kosten, Verlustfreiheit

Probleme:

Große Kapazität, geringe Kosten = Langsamer Zugriff

Schneller Zugriff = hohe Kosten, kleine Kapazität

Lösung:

In einem PC gibt es mehrere Arten von Speicher, die abgestimmt zusammenarbeiten (Speicherhierarchie)

Ziel:

Minimierung von Speicherzugriffszeiten

18

Speicherwerk

In der Praxis:

Interner Speicher (Primärspeicher): integrierter Teil des Speicherwerks schnell, da ohne mechanisch bewegte Teile

Register: unmittelbar dem Steuerwerk zugeordnet

Cache: Bindeglied zwischen Steuerwerk und Arbeitsspeicher

RAM (Random Access Memory):

häufig/voraussichtlich benutzte Befehle/Daten

100 Euro/MB, 512 KB, 24 GB/sec.

Arbeitsspeicher: ROM (Read Only Memory): Systemfunktionen

RAM (Random Access Memory): Daten/Programme

8 Cent/MB, 512 MB, 3,2 GB/sec.

20

Speicherwerk

In der Praxis:

Externe Speicher (Sekundär-Speicher, Massenspeicher) nicht Teil des Speicherwerks

über Eingabe-/Ausgabewerk mit Rechner verbunden langsam, weil mit mechanisch bewegten Teilen

Festplatte: magnetisch

0,01 Cent/MB, 500 GB, 0,06 GB/sec.

CD/DVD: optisch

21

Speicherwerk

In der Praxis:

DRAM

Speicherzelle = Kondensator + Transistor

Darstellung eines Bits:

Bitwert 1 = Kondensator aufgeladen, Bitwert 0 = Kondensator ungeladen

Leseanforderung: Transistor gibt die elektrische Ladung frei

Kondensatoren verlieren Ladung durch Leckströme

Auffrischung der Ladung einige tausend Male in der Sekunde

Während der Auffrischung können keine Daten gelesen werden

Einsatz im Arbeitsspeicher

23

Speicherwerk

In der Praxis:

RAM

Lesen und Schreiben

Flüchtiger Speicher: Strom weg = Daten weg

Nach dem Einschalten: leerer RAM wird mit Programmen und Daten aus externen Speichern gefüllt

Vor dem Ausschalten: Speicherung (Kopie) der veränderten Daten auf die externen Speicher

Realisierung: statischer RAM (SRAM) / dynamischer RAM (DRAM)

22

Speicherwerk

In der Praxis:

SRAM

Komplizierte Schaltung mit >6 Transistoren pro Bit einhundert mal schneller als DRAM keine Auffrischung

Nachteile: benötigt mehr Platz und Energie produziert mehr Hitze

Beispiel: 512MB SRAM = 50000 Euro / 30 Kilowatt Strom / 1qm Platz

Verwendung im Cache-Speicher

24

Speicherwerk

S/L-Kopf-Bewegung In der Praxis:

Festplatte

Spindel

Scheibe

Lücken

Plattendrehung

Spur

Lese/Schreibkopf

Zylinder

Sektoren

Spuren

25

Speicherwerk

Funktionsweise (Schreiben/Lesen):

Kommunikation mit dem Steuerwerk über 3 spezielle Register (Ports):

AM (Adress-Memory Port) enthält Adresse desjenigen Speicherelements, in das geschrieben bzw. aus dem gelesen werden soll

WM (Write-Memory Port) in das durch AM adressierte Speicherelement zu schreibender Inhalt

RM (Read-Memory Port) gelesener Inhalt des adressierten Speicherelements

27

Speicherwerk

In der Praxis:

Festplatte

Darstellung eines Bits:

Magnetisierter (Bitwert 1) oder nicht magnetisierter (Bitwert 0) kleinster

Datenbereich auf der Magnetplatte

Eine Festplatte kann man sich als Buch mit vielen Seiten, die mit 0en und

1en vollgeschrieben sind, vorstellen

26

Speicherwerk

Funktionsweise (Schreiben/Lesen):

Steuersignale des Steuerwerks:

A (Adress Strobe): meldet dem Speicher, dass eine Adresse „gelesen“ werden soll

D (Direction): gibt an, ob es sich um Lese- oder Schreibzugriff handelt

T (Data Transfer Acknowledge):

Rückmeldung, dass Zugriff erfolgreich war (da Speicher relativ langsam ist)

28

Speicherwerk

Funktionsweise (Schreiben/Lesen):

Beispiel: Steuerwerk schreibt Wert 30 in Speicheradresse 500

Steuerwerk „schreibt“ 500 nach AM

Steuerwerk „schreibt“ 30 nach WM

Steuerwerk setzt D auf Schreiben

Steuerwerk sendet A

Speicherwerk „liest“ Adresse von AM

Speicherwerk „liest“ Daten von WM

Speicherwerk überschreibt die adressierte Speicherzelle mit 30

Speicherwerk sendet T

(Steuerwerk kann nächste Anweisung ausführen)

Rechenwerk

In der Praxis:

Akkumulator-Register

Operanden und Resultat einer Operation

Status-Register

Zustandsbeschreibung der Funktionseinheiten

Funktionseinheiten (Arithmetic Logic Unit, ALU)

Verknüpfung gespeicherter Operanden durch fest installierte elementare Operationen (Laden, Speichern, logisches UND/ODER,

Addition, Subtraktion, ...)

Realisiert durch Schaltungen und Schaltwerke (technische Informatik)

31

29

Rechenwerk

Aufgabe:

Verarbeitung der Daten (z.B. arithmetische und logische Operationen,

Vergleiche, logische Entscheidungen,…)

Rechenwerk

Funktionsweise:

Art und Reihenfolge der auszuführenden Rechenwerk-Operationen werden durch das Steuerwerk bestimmt.

Andererseits erhält das Steuerwerk Meldesignale über den Status der

ALU.

30

32

Steuerwerk

Aufgabe:

Oberste Steuerung des Rechners

Alle anderen Komponenten erhalten ihre Befehle vom Steuerwerk

Ausführung der im Programm niedergelegten Arbeitsvorgänge

EVA-Prinzip:

1. Eingabe von im Speicherwerk gelesenen Daten

(Lesen der Daten wie beschrieben)

2. Verarbeitung der Daten im Rechenwerk

(Ausführung von Rechenoperationen wie beschrieben)

3. Ausgabe der Daten in das Speicherwerk

(Schreiben der Daten wie beschrieben)

(danach wieder von vorn mit dem nächsten Befehl, usw.)

33

Steuerwerk

In der Praxis:

„Central Processing Unit“ (CPU) / Prozessor

Taktfrequenz = Häufigkeit der Takte/Zeiteinheit

Erster IBM-PC (1980): 5 MHz = 5 Million Takte/Sek., Taktlänge=0,2µs

Heute: 2GHz = 2000 MHz, Taktlänge = 0,5ns m = 1/1000 = 10 -3 (m = Milli)

µ = 1/1000 000 = 10 -6 (µ = Mikro) n = 1/1000 000 000 = 10 -9 (n = Nano) p = ... = 10 -12 (p = Pico) f = ... = 10 -15 (f = Femto)

35

Steuerwerk

In der Praxis:

„Central Processing Unit“ (CPU) / Prozessor

Wichtigster Maßstab für die Leistung eines Computers

Alle Vorgänge in einem Prozessor laufen getaktet ab

Ein Takt beinhaltet einen EVA-Zyklus

Dateneingabe/-ausgabe = Stromfluss auf bestimmten Leitungen

Steuerwerk

In der Praxis:

Natürliche Grenzen der Schnelligkeit eines Prozessors:

1. Wie weit kommt ein Elektron in einem Takt auf einem 1

GHz Prozessor-Chip?

Lichtgeschwindigkeit im Vakuum = 300 000 km/sec = 0,3 * 10 9 m/sec

1 GHz entspricht Taktlänge = 10 -9 sec = 1ns

Lichtstrecke = 30 cm/Taktlänge

Elektronenflussgeschwindigkeit in Kupfer = 2/3 * Lichtgeschwindigkeit

Elektronstrecke = 20 cm/Taktlänge

Geschwindigkeit abhängig von Leitungslängen

36

34

Steuerwerk

In der Praxis:

Natürliche Grenzen der Schnelligkeit eines Prozessors:

2. Zuviel Abwärme

Elektrischen Schaltungen erzeugen (linear proportional) Wärme

Hohe Taktfrequenzen erzeugen eine Menge Abwärme

 Gefahr des Durchbrennens (in 10 – 30 Sekunden)

 Prozessoren müssen gekühlt werden (Kühlkörper + Lüfter)

Geschwindigkeit abhängig Kühlungsmöglichkeiten

Steuerwerk

.

Funktionsweise

Instruktionsregister IR enthält Befehl, der gerade auszuführen ist

Befehlszähler PC (program counter) enthält Adresse des aktuellen Befehls im Arbeitsspeicher

37

39

Steuerwerk

In der Praxis:

Natürliche Grenzen der Schnelligkeit eines Prozessors:

3. Langsamere Speicherzugriffszeiten

Schnelle Speicher = 1GHz (= sehr teure Speicher)

Lösungen

Parallelisierung von Speicherzugriffen

Benutze kleinen schnellen Speicher (Cache) für bestimmte Daten

Benutze Vorhersagelogik zur Bestimmung voraussichtlich benutzter Daten

Geschwindigkeit abhängig von Cachegröße und Qualität der

Vorhersagelogik

38

Steuerwerk

Funktionsweise

1. Holen von Befehlen (FETCH)

Befehl gemäß PC adressieren und laden

2. Entschlüsseln von Befehlen (DECODE)

Erkennen der Befehlsart

Zerlegung in seine Bestandteile (Operations-, Operandenteil)

3. Initiierung der Befehlsausführung (EXECUTE)

Operand(en) adressieren und laden

Befehl ausführen

Ergebnis speichern

Befehlszähler PC verändern

(Eingabe:E)

(Verarbeitung: V)

(Ausgabe: A)

40

Steuerwerk

Funktionsweise

Beispiel: „Erhöhe Inhalt der Speicherzelle 500 um 1“

Inhalt von PC:

Inhalt von Speicherzelle 1000:

Inhalt von Speicherzelle 500:

1000 der zu bearbeitende Befehl

17

1. FETCH:

Hole den Inhalt von Speicherzelle 1000 nach IR

Steuerwerk

Funktionsweise

Beispiel: „Erhöhe Inhalt der Speicherzelle 500 um 1“

Inhalt von PC:

Inhalt von Speicherzelle 1000:

Inhalt von Speicherzelle 500:

3. EXECUTE:

1000 der zu bearbeitende Befehl

17

Hole Inhalt (17) von Speicherzelle 500

Führe Addition aus (17+1)

Schreibe Ergebnis (18) nach Speicherzelle 500

Befehlszähler PC auf den nächsten Wert.

(Eingabe)

(Verarbeitung)

(Ausgabe)

43

41

Steuerwerk

Funktionsweise

Beispiel: „Erhöhe Inhalt der Speicherzelle 500 um 1“

Inhalt von PC:

Inhalt von Speicherzelle 1000:

Inhalt von Speicherzelle 500:

1000 der zu bearbeitende Befehl

17

2. DECODE:

Erkenne, dass es sich um eine Addition des Inhalts von Speicherzelle 500 mit der Konstanten 1 handelt

42

Überblick

Peripheriegeräte

Rechnerkern,

Befehlswerk,

CPU

Speicher zur Ein- und Ausgabe von

Befehlen und Daten verarbeitet Befehle

Steuerung Befehlsabfolge

(gemäß Programm) enthält Daten und Befehle

(Programme)

44

Überblick Genauerer Blick auf die CPU und Verbindungen

BIOS Uhr

Slots

Grafik-Karte

Prozessor

Sound-Karte

Cache/

Memory-

Controller

PCI-

Controller

Hauptspeicher

Prozessor-Hauptspeicher

Subsystem

ISDN-Karte

BUS

Div. Controller:

Laufwerke

Schnittstellen:

seriell, parallel

USB, Firewire

45

Bewertung

Nachteile:

„von-Neumann-Flaschenhals“:

Verbindung Hauptspeicher / CPU durch diesen Flaschenhals ist alles sequentiell

(Nacheinander) zu transportieren:

Operationsbezeichnungen, Daten, Adressen, …

Die Programmierung muss den sequentiellen Verkehr durch den von-Neumann-Flaschenhals planen

(Scheduling: Aufgabe des Betriebssystems, weiterführende

Vorlesungen)

47

Bewertung

Vorteile:

Prinzip des minimalen Hardwareaufwandes – „nichts kann weggelassen werden“

Prinzip des minimalen Speicheraufwandes eine Speicherzelle wird durch Angabe einer Adresse referiert der Inhalt einer Zelle ist ein Maschinenbefehl oder ein Datenwert

(einheitliche Struktur, Größe)

46

Verbesserung

Harvard-Architektur (Variante von von-Neumann):

Für Programm und Daten gibt es getrennte Speicher und getrennte Zugriffwege zum Prozessor

Engpass durch die zentrale Verbindungseinrichtung beim von-Neumann-Rechner wird erweitert

Bei fast allen heutigen Mikroprozessoren ist der auf dem

Prozessor-Chip befindlichen Primär-Cache-Speicher als

Harvard-Cache-Architektur organisiert.

Ansonsten alles wie in von-Neumann-Architektur

48

Buskonzept

Voraussetzung für das Zusammenwirken der Funktionseinheiten:

Übertragung von Daten, Befehlen, Kontroll-, Statusinformationen entweder: jeweils spezielle Übertragungs- bzw. Signalleitungen hohe Übertragungsgeschwindigkeiten

Zu viele Leitungen oder: „Datensammelwege“, sogenannte Busse angesprochene Funktionseinheit holt sich vom Bus, was für sie bestimmt ist

49

Buskonzept

Teile eines Busses:

Datenbus:

Daten

Breite = Anzahl der Bits eines Arbeitsspeicherelements

Adressbus:

Quelle/Ziel der Übertragung der Daten an

Kontrollbus:

Steuersignale

51

Buskonzept

Breite eines Busses (auch Bandbreite)

= Anzahl der parallel übertragbaren Bits (Anzahl der Leitungen)

Bus

Gerät 1 Gerät 2

. . .

Gerät n

50

Hardware

Netzbuchse für

Stromversorgung

Zwei Lüfter

Buchsen für Maus und Tastatur

USB Schnittstellen

Serielle Schnittstelle

Parallele Schnittstelle für Drucker

Netz (Ethernet)

Grafikkarte mit

Anschluss für den Bildschirm

SCSI-Karte

Soundkarte

ISDN-Karte

Firewirekarte

Diskettenlaufwerk

Ein/Aus-Schalter

DVD / CD-ROM

Typenschild

Resetknopf

Kontrollleuchten

Selbststudium

52

Hardware

Selbststudium

Netzteil

Stromanschlüsse

Prozessor (CPU) mit Lüfter

Karten

1. Schacht für Laufwerke:

DVD, CD, Diskette und

Festplatten.

2. Schacht für Laufwerke:

Weitere Festplatten.

Hauptplatine

(Motherboard)

53

Hardware

Memory - Controller

Schnittstellen (teilweise verdeckt)

Sound, Netz, parallel, seriell, USB, Tastatur, Maus

AGP Slot

Selbststudium

5 PCI Slots

CPU Sockel für Pentium 4

4 RIMM Sockel

BIOS

Batterie

PCI -

Controller Stecker für Floppy und Festplatten

Netz Anschluss

55

Hardware

Prozessor (CPU) mit Lüfter

Memory -

Controller

Grafikkarte

SCSI-Karte

Sound-Karte

ISDN-Karte

Firewire-Karte

Bedienung

Selbststudium

Hauptspeicher

PCI-Controller

Batterie

54

Middleware

Treiber

Schnittstellen

56

Bedienung

Schnittstelle:

Konvention für eine Verbindung mit verschiedenen, aber gleichartigen Bauteilen z.B. Drucker verschiedener Hersteller

Regelung des Signal- und Datenaustauschs (Hardware +

Software)

57

Bedienung

Betriebssystem:

Macht die Hardware nutzbar:

Prozessverwaltung

Speicherwerwaltung

Dateiverwaltung

59

Bedienung

Treiber(programm):

Anpassungsprogramme zur Ansteuerung einer SW- oder HW-

Komponente

(z.B. Druckertreiber, Maustreiber, ...)

Verbirgt die speziellen Anforderungen eines herstellertypischen Geräts vor den höheren SW-Schichten

(z.B. einheitlichen Druckbefehl an Drucker anpassen)

Treiber müssen installiert werden (Windows: mittels des setup.exe-Programm; Dateierweiterung .dll) oder sind im

Betriebssystem integriert

58

Bedienung

Betriebssystem:

Prozessverwaltung (Prozess = eigenständig ablaufendes

Programm mit eigenem Speicherbereich)

Adressrechnung

Ein-/Auslagern von Prozessen zwischen Haupt- und

Plattenspeicher (virtuelle Speicherverwaltung),

Prozessscheduling

Kommunikation zwischen Prozessen

Schutz vor dem Zugriff anderer Prozesse

60

Bedienung

Betriebssystem:

Speicherverwaltung

Verwaltung von Code und Daten mehrerer Prozesse, die gleichzeitig im Hauptspeicher sind

Zugriffsschutz

Freispeicherverwaltung

Bedienung

Betriebssystem:

Dateiverwaltung

Zuordnung von Dateien und ihren Namen zu Teilbereichen der

Festplatte

Dateisystem: heute meist hierarchisch gegliedert (Verzeichnis,

Unterverzeichnisse )

Namensgebung (mit Erweiterungen, z.B. .txt, .doc, .html, .jpg,

.zip, .sys, .exe, ...)

61

Bedienung

Middleware:

Softwareschicht, welche die Heterogenität der einer

Anwendung zugrundeliegenden Systemplattform

(Hardware, Netzwerke, Betriebssysteme, Progr.sprachen)

„maskiert“

Täuscht eine homogene Systemplattform vor macht heterogenes System programmierbar

(vs. Betriebssystem: macht Hardware nutzbar)

Beispiele: Managementsystem für verteilte Datenbanken,

RPC, Email, Remote Login, File Transfer, ...

63

Bedienung

Grafisches Bediensystem

Schnittstelle zur Anforderung von Leistungen des

Betriebssystems (via Tastatur, Maus, etc.) im einfachsten Fall: Kommandozeile (vgl. DOS) heute üblich: graphisch / fensterorientiert ursprünglich erfunden von Xerox (70er Jahre) zuerst aufgegriffen für Macintosh-Rechner (Apple) heute Standard unter allen gängigen Betriebssystemen

(Windows, Unix/Linux, Mac)

64

62

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

Programmieren in C – Variablen

Variablen

Motivation:

Bisher:

Zahlen, Zeichen, Zeichenketten waren im Code fest angegeben (als sog. Konstanten):

Andere Werte  anderes Programm

Jetzt:

Wie kann man mit Werten rechnen, die erst noch vom

Benutzer eingegeben werden (also dem Programmierer nicht bekannt sind)?

3

1

Inhalt

Variablen

Wertzuweisung

Konstanten

Ausdrücke (informal eingeführt)

Die Funktion scanf

Variablen

Motivation:

Wir wollen jetzt Werte (von Zahlen, Zeichen, ...) während des Programmlaufs über Tastatur eingeben

Notwendig:

Speicherung von Werten im Arbeitsspeicher

Zugriff auf Werte über (Namen für) Speicheradressen

Funktion für das Einlesen von Benutzereingaben

2

4

Variablen

/* bsp03.c */

#include <stdio.h> main(){

int x,y;

printf("A d d i e r p r o g r a m m\n");

printf("Geben Sie zwei ganze Zahlen ein:\n");

scanf("%i",&x);

scanf("%i",&y);

printf("\nDie Summe von %i und %i ist %i",x,y,x+y);

}

5

Variablen

Eine Variable ist ein (vom Programmierer festgelegter) Name für eine Speicheradresse

Programmierer deklariert eine Variable (legt den Namen fest)

Bei der Übersetzung (in Maschinencode) wird der Variable eine feste Speicheradresse zugeordnet

Über die Variable kann man im Programm auf den Wert zugreifen (lesen/schreiben), der an dieser Speicheradresse gespeichert sind

7

Variablen

A d d i e r p r o g a m m

Geben Sie zwei ganze Zahlen ein:

3

12

Die Summe von 3 und 12 ist 15_

Variablen

Zusammenfassung 1

Eine Variable hat eine Speicheradresse

Eine Variable hat einen Namen, über den die Speicheradresse identifiziert wird

Eine Variable hat einen Wert (den Wert, der an der

Speicheradresse gespeichert ist)

6

8

Variablen

Variablen deklarieren

Unterschiedliche Typen von Werten/Daten (Zeichen, ganze Zahl,

...) benötigen unterschiedlich viel Speicherplatz (in Bytes)

Wieviel Bit sind nötig, um eine ganze Zahl zu speichern?

Platzsparende Speicherverwaltung:

Bei Übersetzung des Programms soll der für die Speicherung der

Daten notwendige Speicherplatz (in Bytes) festgelegt werden

(nicht erst zur Laufzeit nach der Benutzereingabe)

9

Variablen

Variablen deklarieren

Ein Datentyp legt fest, wieviel Speicherplatz (in Bytes) zur

Verfügung gestellt wird, um einen Wert diesen Typs zu speichern

Bei der Übersetzung steht durch Kenntnis des Datentyps fest, wieviel Platz (wieviele Speicherzellen) für die Variable reserviert werden muss

Der Größe des reservierten Speicherplatzes bestimmt die Anzahl der möglichen Werte

(Variablen können nur endlich viele Werte annehmen!!!)

1 Byte = 8 Bit bietet Platz für 256 verschiedene Werte

11

Variablen

Variablen deklarieren

Ein Datentyp legt fest, wieviel Speicherplatz (in Bytes) notwendig ist, um einen Wert von diesem Typ zu speichern

In einer Programmiersprache stehen verschiedene Datentypen, zur Verfügung (ganze Zahl, Fließkommazahl, Zeichen, ...)

Deklaration legt Namen und Datentyp einer Variablen fest

In einer Variable können nur Werte passenden Datentyps gespeichert werden

10

Variablen

Zusammenfassung 2

Eine Variable hat eine Speicheradresse (= Adresse der ersten

Speicherzelle des reservierten Bereichs)

Eine Variable hat einen Namen, über den die Speicheradresse identifiziert wird

Eine Variable hat einen Wert (den Wert der an der

Speicheradresse gespeichert ist)

Eine Variable hat einen Datentyp, der den verfügbaren

Speicherplatz und die endliche Menge der möglichen Werte festlegt

12

Variablen

Variablen deklarieren erste Beispiele für Datentypen:

int ganze Zahl (int=integer) benötigt 4 Byte: 2 32 Zahlen darstellbar

Wertebereich: -2 31 bis 2 31 -1

Was passiert, wenn in einer Berechnung oder durch eine

Benutzereingabe dieser Bereich verlassen wird?

 Bereichsüberlauf (später genauer)

13

Variablen

Variablen deklarieren erste Beispiele für Datentypen:

char Zeichen (Buchstabe, Ziffer, Sonderzeichen) benötigt 1 Byte: 2 8 Zeichen darstellbar

Darstellung: später

15

Variablen

Variablen deklarieren erste Beispiele für Datentypen: double Dezimalzahl (in Fließkommadarstellung) benötigt 8 Byte

Wertebereich:

2.22507 * 10 -308 bis 1.79769 * 10 308

-2.22507 * 10 -308 bis -1.79769 * 10 308

Es sind natürlich nicht alle Zahlen zwischen diesen Grenzen darstellbar  Rundungsfehler (später genauer)

14

Variablen

Variablen deklarieren

Syntax von Deklarationen, einfache erste Version:

<Datentyp> <Name>;

Beispiele: int alter; double zins; char geschlecht;

16

Variablen

Variablen deklarieren

Regeln der Namensgebung:

Name

Folge von Buchstaben und Ziffern, beginnend mit einem

Buchstaben (der Unterstrich wird wie ein Buchstabe verwendet)

Schlüsselworte

(wie z.B. main, include) dürfen nicht verwendet werden

Groß- und Kleinbuchstaben werden unterschieden

17

Variablen

/* bsp04a.c */

#include <stdio.h> main(){

int x,y;

printf("M u l t i p l i k a t i o n s p r o g r.\n");

printf("Geben Sie zwei ganze Zahlen ein:\n");

scanf("%i",&x);

scanf("%i",&y);

printf("\n%i multipliziert mit %i ist %i",x,y,x*y);

}

19

Variablen

Variablen deklarieren

Namenskonventionen:

Erster Buchstabe = Kleinbuchstabe

Sprechende/aussagekräftige Namen verwenden

Keine Abkürzungen verwenden

Nicht mit Unterstrich beginnen (für den Anfang)

Variablen

M u l t p l i k a t i o n s p r o g r.

Geben Sie zwei ganze Zahlen ein:

300

500

300 multipliziert mit 500 ist _

Ergebnis kann Wertebereich überschreiten

 Falsches Ergebnis wird angezeigt

18

20

Variablen

/* bsp04b.c */

#include <stdio.h> main(){

double zahl;

printf("Geben Sie eine Zahl ein: ");

scanf("%lf",&zahl);

printf("\nEndergebnis = %.20lf",zahl);

}

Variablen

Wertzuweisungen

Speichert (schreibt) man einen Wert an der Speicheradresse einer Variable, so sagt man:

Der Variable wird ein Wert zugewiesen

21

23

Variablen

Geben Sie eine Zahl ein: 0.01234567890123456789

Endergebnis = _

Ergebnis kann nicht exakt dargestellt werden

 Gerundetes Ergebnis wird angezeigt

%lf Platzhalter für Fließkommazahl (l=long,f=float)

%.20lf ... mit 20 Nachkommastellen

22

Variablen

Wertzuweisungen

Syntax von Wertzuweisungen:

<Name> = <Ausdruck>;

Ausdrücke sind Variablen, Konstanten und mittels

Operationszeichen verknüpfte Variablen und Konstanten

Ausdruck kann ausgewertet werden

Wert des Ausdrucks wird der Variable zugewiesen

(wird dazu ggf. automatisch in den Variablen-Typ umgewandelt)

24

Variablen

Wertzuweisungen

Beispiele (Wert passt zum Typ):

//mehrere Variablen gleichen Typs deklarieren: int x,y;

//an Speicheradresse von x Wert 5 speichern: x = 5;

//an Speicheradresse von y Wert von x speichern: y = x;

//an Speicheradresse von x den Wert der Summe der

//Werte von x und y speichern: x = x + y;

25

Variablen

Wertzuweisungen

(Automatische) Typumwandlung durch Wertzuweisung

Enthält die Wertemenge eines Datentyps DT1 die Wertemenge eines Datentyps DT2, so sagt man: DT1 ist länger als DT2

Typ des Werts des Ausdrucks länger als der Typ der Variable:

es geht Genauigkeit und Information verloren

Typ des Werts des Ausdrucks kürzer als der Typ der Variable:

keine Veränderung der Genauigkeit

Information kann verloren gehen (veränderte Interpretation)

27

Variablen

Wertzuweisungen

Beispiel (Wert passt nicht zum Typ):

//Wertzuweisung in der Deklaration vornehmen: int x = 5.5;

( //x hat nun den Wert 5 (Information geht verloren) double y = 5; y //y hat den Wert 5.0... (Ergänzen des Werts)

Variablen

/* bsp05.c */

#include <stdio.h> main(){

int laenge, breite, flaecheninhalt;

printf("\t F l a e c h e n i n h a l t\n");

printf("Laenge und Breite eines Rechtecks:\n");

scanf("%i",&laenge);

scanf("%i",&breite);

flaecheninhalt = laenge * breite;

printf("\nFlaecheninhalt = %i",flaecheninhalt);

}

28

26

Variablen

F l a e c h e n i n h a l t

Laenge und Breite:

3

2

Flaecheninhalt = 6_

Konstanten

Ganzzahl-Konstante

Ziffernfolge ohne 0 am Anfang optional ‘ ‘ – Zeichen am Anfang (negative Zahl)

Typ: int

Beispiel: 100

Später:

Oktal-, Hexadezimal-Schreibweise

29

31

Konstanten

Konstanten sind feste (unveränderliche) im Code benutzte Werte

Bei der Übersetzung wird jede benutzte Konstante an einer festen

Speicheradresse gespeichert

Es gibt unterschiedliche Typen von Konstanten (vgl. Variablen-

Typen), für die unterschiedlich viel Speicherplatz verwendet wird

 Auch hier nur endlich viele Werte pro Typ benutzbar

Bei der Übersetzung wird der Typ einer Konstanten aus deren

Darstellung/Schreibweise abgeleitet

30

Konstanten

Fließkommazahl-Konstante

Festkommaschreibweise

Zwei Ziffernfolgen durch ‘ .

‘ – Zeichen getrennt

Erste Ziffernfolge ohne 0 am Anfang optional ‘ ‘ – Zeichen am Anfang (negative Zahl) eine der Ziffernfolgen kann leer sein

Typ: double

Beispiele: 100.01, 3. (entspricht 3.0), -.4 (entspricht -0.4)

32

Konstanten

Fließkommazahl-Konstante

Fließkommaschreibweise

<Festkommazahl>e<ganzeZahl>

(oder <Festkommazahl>E<ganzeZahl>)

Typ: double entspricht: <Festkommazahl>*10 <Dezimalzahl>

Beispiele: -24.0e-1 (entspricht -2.4), 4.E2 (entspricht 400)

33

Konstanten

Zeichenketten-Konstanten

Werden in Anführungszeichen ““ eingeschlossen

Können Escapesequenzen enthalten

jede Escapesequenz zählt als ein Zeichen

Weitere Details (Typ, …) später

35

Konstanten

Zeichen-Konstanten

Buchstaben werden in Hochkommas ‘‘ eingeschlossen

Typ: char

Beispiel: ‘A‘

Sonderzeichen werden durch sog. Escapesequenzen mit vorangestelltem ‘ \ ‘ –

Zeichen angegeben

Zwischenraumzeichen: \n,\r,\t,\v,\b,\f

Andere Sonderzeichen: \‘,\“,\\,\a,\?

34

Ausdrücke

Ausdrücke sind mittels Operationszeichen verknüpfte Variablen und Konstanten

Diese Definition ist noch zu unpräzise:

Was ist eigentlich ein Operationszeichen?

Was heißt verknüpft?

Wir definieren das aber erst später mathematisch!

36

Ausdrücke

Operationszeichen

Jede Programmiersprache stellt eine Reihe von

Operationszeichen zur Verfügung

(z.B. Für arithmetische Operationen: +,-,*,/,%)

Bei der Prgrammausführung wird für jedes Operationszeichen eine Operation ausgeführt

Welche Operation ausgeführt wird, hängt vom Datentyp der im

Ausdruck verwendeten Variablen und Konstanten ab

Operationszeichen steht nicht immer für die gleiche Operation!

37

Ausdrücke

/* bsp06.c */

#include <stdio.h> main(){

int x,y;

printf("D i v i s i o n s p r o g r a m m\n");

printf("Geben Sie zwei ganze Zahlen ein:\n");

scanf("%i",&x);

scanf("%i",&y);

printf("\n%i dividiert durch %i ist %i",x,y,x/y);

}

39

Ausdrücke

Operationen

Eine Operation ist eine Rechenvorschrift, die aus ihren

Argumenten einen Wert berechnet

Die Argumente einer Operation heißen Operanden

Die Anzahl der Operanden einer Operation heißt Stelligkeit einstellig = unär (z.B. Negation einer Zahl) zweistellig = binär (z.B. Subtraktion von zwei Zahlen)

Eine Operation schreibt den Datentyp ihrer Operanden vor

38

Ausdrücke

D i v i s i o n s p r o g a m m

Geben Sie zwei ganze Zahlen ein:

3

2

3 dividiert durch 2 ist 1_

Hier handelt es sich um ganzzahlige Division!

40

Ausdrücke

/* bsp07.c */

#include <stdio.h> main(){

double x,y;

printf("D i v i s i o n s p r o g r a m m\n");

printf("Geben Sie zwei ganze Zahlen ein:\n");

scanf("%lf",&x);

scanf("%lf",&y);

printf("\n%.2lf dividiert durch %.2lf ist

%.2lf",x,y,x/y);

}

41 scanf dient der Eingabe von Text aus der Kommandozeile (oder aus einer Datei)

Argumente (ähnlich wie bei printf):

- Format-Zeichenfolge mit Platzhaltern (für Datentypen)

- Zu jedem Platzhalter eine Variable (passenden Typs von links

nach rechts) mit &-Zeichen davor

Ausdrücke

3

2

D i v i s i o n s p r o g a m m

Geben Sie zwei ganze Zahlen ein:

3.00 dividiert durch 2.00 ist 1.50_

Hier handelt es sich um Division auf Fließkommazahlen!

%f

%.2f

Platzhalter für eine Fließkommazahl (f=float)

... mit zwei Nachkommastellen

42 scanf dient der Eingabe von Text aus der Kommandozeile (oder aus einer Datei)

Verwendung

- Nach Aufruf der scanf-Funktion erwartet Programm

Benutzereingabe über Kommandozeile

- Eingabe wird nach abschließendem Drücken der Eingabetaste

eingelesen

43 44

scanf dient der Eingabe von Text aus der Kommandozeile (oder aus einer Datei)

Interpretation der Argumente:

Zeichenfolge bestimmt das Format der Eingabe

Adressoperator & (unär) liefert die Adresse einer Variablen

An dieser Adresse wird der eingegebene Wert gespeichert

Die Variable hat dann diesen Wert

( (später mehr: Rechnen mit Adressen, Adressen als Datentyp, …)

Was passiert, wenn die Eingabe nicht zum Format passt?

45 scanf

Beispiel für gültige/ungültige Eingaben:

Eingabe: 21

Puffer: \n 1 2 scanf(“%i“,&x) scanf(“%i“,&x)

[x hat Wert 21]

Puffer: \n [\n bleibt stehen]

Eingabe: 6

Puffer: \n 6 \n

[überliest \n am Anfang]

[x hat Wert 6]

Puffer: \n

47 scanf

Was passiert, wenn die Eingabe nicht zum Format passt?

Tastatur

(Standard-)

Eingabestrom

(von Zeichen)

Eingabefunktionen: scanf() getchar()

Programm

Puffer

(zeilenweise) scanf

Beispiel für gültige/ungültige Eingaben (Fortsetzung):

Puffer: \n

Eingabe: a

Puffer: \n a \n scanf(“%i“,&x) [Format passt nicht]

[x hat weiter Wert 6]

Puffer: \n a [Eingabe bleibt stehen]

Eingabe: 4

Puffer: \n 4 \n a [Kein Zugriff auf 4] scanf(“%i“,&x) [Format passt nicht]

[x hat weiter Wert 6]

48

46

scanf

Beispiel für gültige Anfangsstücke von Eingaben:

Eingabe: 1.2a

Puffer: \n a 2 . 1 scanf(“%f“,&r) [Anfangsstück passt]

[r hat weiter Wert 1.2]

Puffer: \n a [Rest bleibt stehen]

49 scanf

Zusammenfassung:

Zeichen werden nach dem FIFO-Prinzip aus dem Puffer geholt

(FIFO: First In, First Out)

Zwischenraumzeichen zu Beginn werden überlesen

Formatangaben sorgen für eine Umwandlung eingegebener

Zeichen in Werte von gewünschtem Typ

Normale Zeichen in der Format-Zeichenkette müssen an richtiger

Stelle in der Eingabe vorkommen

51 scanf

Beispiele für (komplexere) Format-Zeichenfolgen:

Zeichen der Format-Zeichenfolge müssen an richtiger Stelle in der Eingabe vorkommen scanf("%i.%i.%i", &day, &month, &year);

23.12.1981

_ scanf("%i-%i-%i", &day, &month, &year);

23-12-1981

_

50 scanf

Zusammenfassung:

Es wird geprüft, ob ein Anfangsstück der Eingabe zur Format-

Zeichenkette passt: restliche Zeichen bleiben im Puffer stehen

Eingabe schlägt fehl, wenn das Format nicht passt (Umwandlung nicht möglich ist): (restliche) Zeichen bleiben im Puffer stehen

Man muss überprüfen (können), ob Eingabe geklappt hat [später]

Man muss nach jeder Eingabe Puffer leeren (können) [später]

52

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

Codierung und Zahlensysteme

1

Inhalt

Motivation:

Im binären Zahlensystem bestehen Zahlen nur aus 0en und 1en

Das binäre Zahlensystem kann man verwenden, um jede

Information (Zahlen, Texte, Bilder, Musik, Videos, ...) durch eine

Folge von 0en und 1en computergerecht darzustellen

Inhalt

Motivation:

Im Arbeitsspeicher/Cache wird Information durch Spannungen dargestellt, wobei nur zwei Spannungen unterschieden werden: niedrige Spannung: 0 V bis 0,8 V (=0) höhere Spannung: 2,0 V bis 3,0 V (=1)

(Versorgungsspannung 3 Volt)

Dadurch lassen sich zwei Ziffern darstellen (0 und 1), also 1 Bit

2

Inhalt

Motivation:

Aber wieso unterscheidet man nicht 10 verschiedene

Spannungen?

Dann könnte man Zahlen im dezimalen System direkt im Rechner speichern

Problem:

Spannungen müssten sehr genau eingehalten werden, um sie unterscheiden zu können

Diese Genauigkeit ist mit Halbleiterbauelementen nur durch

Operationsverstärker erreichbar (zu teuer, brauchen zu viel Platz)

4 3

Inhalt

Motivation:

Nur auf der Basis eines binären Zahlensystems kann man bezahlbare Computer bauen

Allerdings: Binärzahlen sind sehr lang und unübersichtlich:

Man benutzt aushilfsweise auch noch andere Zahlensysteme

(Hexadezimalsystem, Oktalsystem)

Kenntnis von Zahlensystemen für Programmierer notwendig, für normale Benutzer nützlich (technische Anleitungen,

Fehlermeldungen, …)

5

Inhalt

Codierungstheorie (Grundlagen)

Zahlensysteme

Inhalt

Motivation:

Nur auf der Basis eines binären Zahlensystems kann man bezahlbare Computer bauen

Außerdem sollte man wissen: wie Zahlen, Zeichen, Ton, Bilder, usw. in Folgen von 0en und

1en codiert werden (können) was man dabei beachten muss (Möglichkeit der Decodierung,

Arithmetik auf codierten Zahlen usw.)

6

Codierungstheorie

Relevante Gebiete für die Umwandlung (Codierung) von Daten:

Speicherung im Rechner (siehe Motivation)

Nachrichtenübertragung (Telegraphie, Telephon, DFÜ...)

Bildsignalübertragung (Video-Übertragung, HDTV)

Geheimhaltung (Militär, Datenschutz, Kryptographie)

Übersetzung (Fremdsprachen, Programmiersprachen)

7 8

Codierungstheorie

Inhalt dieser Folien:

Formalisierung der Begriffe Code, Codierung, ...

Weiterführende Inhalte (andere Vorlesungen):

Untersuchung mathematischer Zusammenhänge:

Entschlüsselung,

Entdeckung und Korrektur von Fehlern,

Redundanz, ... (Datenkompression)

9

Codierungstheorie

Alphabet, Buchstabe:

Wir nehmen an, dass die Buchstaben in einer festen Reihenfolge geordnet sind, ausgedrückt durch eine Relation <

Beispiele:

Menge der Binaärzahlen IB = {0,1} mit der Ordnung 0 < 1

Menge der Dezimalziffern ID = {0,...,9} mit der Ordnung

0 < 1 < … < 9

Lateinische Großbuchstaben mit der Ordnung A < ... < Z

11

Codierungstheorie

Alphabet, Buchstabe:

Wir betrachten eine endliche Menge A und nennen diese

Alphabet

Die Elemente von A nennen wir Buchstaben

|A| bezeichnet die Anzahl der Buchstaben (Elemente) von A

10

Codierungstheorie

Wort:

Ein Wort über A ist eine endliche Folge w = a

1 a

2

...

Buchstaben aus A a k

von

|w| bezeichnet die Anzahl der Buchstaben eines Wortes w, genannt Länge des Wortes

Wir führen ein leeres Wort ε ein mit Länge | ε |:= 0

Achtung: ε ist kein Buchstabe!

Wir bezeichnen A k := {w | w Wort über A, |w| = k}

IB 0 = { ε }, IB 1 = {0,1}, IB 2 = {00,01,10,11}, …

12

Codierungstheorie

Wort:

Hintereinandergeschriebene Worte u und v ergeben ein neues

Wort uv

Gilt w = uv für Worte u und v, so heißen u,v Teilworte von w und u Anfangsstück von w

Codierungstheorie

Sprache:

Menge aller Worte über A:

A * := {w | w Wort über A} =

A k

A + := A * \{ ε }

Eine Teilmenge L ⊆ A * heißt Sprache

13

Codierungstheorie

Lexikographische Ordnung:

Ähnlich der alphabetischen Ordnung lässt sich die lexikografische

Ordnung aus der Ordnung der Buchstaben ableiten

Mit der alphabetischen Ordnung ließe sich die Menge aller Wörter aber nicht der Reihe nach aufzählen, da Worte beliebige Länge haben können

Deshalb ordnet man die Wörter zuerst der Länge nach, und dann innerhalb einer Länge alphabetisch:

Gilt |w|<|v|, so definieren wir w<v

Gilt |w|=|v| und w=uaw‘, v=ubv‘, a<b, so definieren wir w<v

Beispiel: 0<1<00<01<10<11<000<001<010<011<100<…

15

14

Codierungstheorie

Codierung, Code, Codewort:

Wir betrachten zwei Alphabete A,B

Eine Abbildung c: A → B * heißt Codierung

Der Bildbereich c(A):={c(a)|aA} heißt Code

Jedes Element b c(A) heißt Codewort

Informal: Eine Codierung ordnet jedem Zeichen eines Alphabets ein Wort eines anderen Alphabets zu

16

Codierungstheorie

Beispiel: Morsecode c

M

:{A,...,Z,0,...,9} ∪ {Ä,Ö,Ü,CH} → { • ,_} *

Codewort

A • _

Ä • _ • _

B _ • • •

C _ • _ •

CH _ _ _ _

D _ • •

E •

F • • _ •

G _ _ •

H • • • •

Codewort

I • •

J • _ _ _

K _ • _

L • _ • •

M _ _

N _ •

O _ _ _

Ö _ _ _ •

P • _ _ •

Q _ _ • _

Codewort

R • _ •

S • • •

T _

U • • _

Ü • • _ _

V • • • _

W • _ _

X _ • • _

Y _ • _ _

Z _ _ • •

Codewort

1 • _ _ _ _

2 • • _ _ _

3 • • • _ _

4 • • • • _

5 • • • • •

6 _ • • • •

7 _ _ • • •

8 _ _ _ • •

9 _ _ _ _ •

0 _ _ _ _ _

17

Codierungstheorie

Wichtige Codierungsklassen:

Wir betrachten zwei Alphabete A,B c: A → B c: A → B n heißt Chiffrierung, c(A) heißt Chiffre

(n fest) heißt Blockcodierung c: A → IB * c: A → IB n heißt Binärcodierung

(n fest) heißt n-Bit-Codierung

[Wir werden nachher nur n-Bit-Codierungen betrachten]

19

Codierungstheorie

Beispiel: Zählcodierung c

T

:{0,...,9} → {O,L} * (Impulswahlverfahren)

1

2

3

4

5

LO

LLO

LLLO

LLLLO

LLLLLO

6

7

8

9

0

LLLLLLO

LLLLLLLO

LLLLLLLLO

LLLLLLLLLO

LLLLLLLLLLO

Läßt sich beim Morsecode eine Nachricht immer dekodieren?

Läßt sich bei der Zählcodierung eine Nachricht immer dekodieren?

18

Codierungstheorie

Codierung von Nachrichten (Wörtern):

Wir betrachten eine Codierung c: A → B *

Man codiert Wörter, indem man die Codes der einzelnen

Buchstaben hintereinanderschreibt: c * ( ε ) := ε c * (wa) := c * (w)c(a) für w ∈ A * , a ∈ A

Beispiele: c

T

* (214) = LLOLOLLLLO c

M

* (ESEL) = • • • • • • _ • • c

M

* (SEINE) = • • • • • • _ • •

20

Codierungstheorie

Decodierung von Nachrichten (Wörtern):

Ein Code heißt decodierbar, falls nicht zwei unterschiedliche

Wörter gleich codiert werden

Ein hinreichendes (aber nicht notwendiges) Kriterium für die

Decodierbarkeit ist die sog. Fano-Bedingung:

Kein Codewort ist Anfang eines anderen Codewortes

Decodierungsverfahren: man läuft von links nach rechts über den codierten Text und stoppt beim ersten erkannten Codewort

21

Zahlensysteme

Wir betrachten eine nicht-negative ganze Zahl B > 2 und nennen sie Basis

Jede nicht-negative ganze Zahl x hat dann eine eindeutige

Summendarstellung bzgl. B der folgenden Form x = k-1

Σ b i

B i = b

0

B 0 + b

1

B 1 + ... + b k-1

B k-1 mit nicht-negativen ganzen Zahlen b i

< B

B=10: 27 = 7*10 0 + 2*10 1 (0 ≤ b i

9)

B=2: 27 = 1*2 0 + 1*2 1 + 0*2 2 + 1*2 3 + 1*2 4 (0 ≤ b i

1)

23

Codierungstheorie

Fragen/Aufgaben:

Konstruiere eine decodierbare Codierung, die nicht die Fano-

Bedingung erfüllt

Erfüllen Blockcodierungen die Fano-Bedingung?

Wie lässt sich die Morsecodierung so modifizieren, dass sie die

Fano-Bedingung erfüllt?

22

Zahlensysteme

Existenz einer solchen eindeutigen Summendarstellung x = k-1

Σ i=0 b i

B i = b

0

B 0 + b

1

B 1 + ... + b k-1

B k-1

(1) Man bestimmt k mit B k-1

≤ x < B k für ein maximales b < B

(2) Man bestimmt b < B maximal mit bB k-1

≤ x < B k

(3) Setze b k-1

:= b und mache dasselbe für den Rest x-b k-1

B k-1

24

Zahlensysteme

Wie kann man Sie einfach(er) berechnen?: Horner-Verfahren x = k-1

Σ b i

B i = b

0

B 0 + b

1

B 1 + ... + b k-1

B k-1

(1) Man betrachtet den Rest bei ganzzahliger Division x/B

(2) Da alle bis auf den ersten Summanden durch B teilbar sind, ist dieser Rest gleich b

0

(3) Jetzt dasselbe für die Zahl x/B (usw.):

Rest bei ganzzahliger Division (x/B)/B ist b

1

Allgemein:

Rest nach n-maliger ganzzahliger Division durch B ist b n-1

25

Zahlensysteme

Gilt für eine nicht-negative ganze Zahl x die Summendarstellung x = k-1

Σ b i

B i = b

0

B 0 + b

1

B 1 + ... + b k-1

B k-1 so heißt die Ziffernfolge (b b …b b ) B-adische Darstellung von x

127 hat die 3-adische Darstellung (11201)

3

Zahlensysteme

Berechnungsbeispiel:

127 / 3

42 / 3

14 / 3

4 / 3

1 / 3

=

=

=

=

=

42

14

4

1

0

Rest 1

Rest 0

Rest 2

Rest 1

Rest 1

127 = 1*3 0 + 0*3 1 + 2*3 2 + 1*3 3 + 1*3 4

26

Zahlensysteme

Umrechnung zwischen Zahlensystemen

Wir können jetzt zu einer nicht-negativen ganzen Zahl die Badische Darstellung für eine beliebige Basis B berechnet

Wir können auch x aus seiner B-adischen Darstellung berechnen

(benutze obige Summenformel)

Damit können wir (über das Dezimalsystem) auch B-adische

Darstellungen zu verschiedenen Basen ineinander umrechnen

(direkte Verfahren besprechen wir hier nicht)

28 27

Zahlensysteme

Für den Informatiker wichtige Basen sind 2, 8 und 16

Das 2-adische Zahlensystem heißt auch Dualsystem

Im Dualsystem gilt:

B = 2

Erlaubte Ziffern: 0,1

Zahlensysteme

Das 16-adische Zahlensystem heißt auch Hexadezimalsystem

Im Hexadezimalsystem gilt:

B = 16

Erlaubte Ziffern: 0,1,...,9,A,…,F

(A=10,…,F=15)

Einfache Umrechnung ins Dualsystem und zurück:

Wegen 16 = 2 4 stehen jeweils 4 Dual-Ziffern für eine

Hexadezimalziffer

Beispiel: ( 1 B 9 )

16

= ( 0001 1011 1001 )

2

31

29

Zahlensysteme

Das 8-adische Zahlensystem heißt auch Oktalsystem

Im Oktalsystem gilt:

B = 8

Erlaubte Ziffern: 0,1,...,7

Einfache Umrechnung ins Dualsystem:

Wegen 8 = 2 3 stehen jeweils 3 Dual-Ziffern für eine Oktalziffer

Beispiel: ( 1 7 4 )

8

= ( 001 111 100 )

2

30

Zahlensysteme

Beliebige reelle Zahlen (insbesondere Brüche) r haben eine Badische Darstellung, nämlich von der Form: r = k-1

Σ

∞ b i

B i =...+ b

-1

B -1 + b

0

B 0 + ... + b k-1

B k-1

B-adische Festpunktdarstellung: r=(b k-1 b k-2

…b

1 b

0

.b

-1 b

-2

…)

B

Diese Darstellung kann wie die Dezimaldarstellung endlich oder unendlich sein

32

Zahlensysteme

B-adische Darstellung berechnen für reelle Zahlen: r = k-1

Σ

∞ b i

B i =...+ b

-1

B -1 + b

0

B 0 + ... + b k-1

B k-1

Sei r = x + y mit x ganzzahlig und 0 ≤ y < 1

(x = Vorkommastellen, y=Nachkommastellen)

(1) Vorkommastellen werden aus x berechnet (wie vorhin)

Zahlensysteme

Berechnungsbeispiel für 127.5:

0.5 * 3 = 1 .

5  Ziffer 1 , Rest 0.5

0.5

* 3 = 1.5  …

...

127.5 = (11201. 1 11...)

3

Berechnungsbeispiel für 127.33...:

0.33... * 3 = 1  Ziffer 1 , Rest 0

127.5 = (11201. 1 )

3

33

35

Zahlensysteme

B-adische Darstellung berechnen für reelle Zahlen: r = k-1

Σ i=∞ b i

B i =...+ b

-1

B -1 + b

0

B 0 + ... + b k-1

B k-1

Sei r = x + y mit x ganzzahlig und 0 ≤ y < 1

(x = Vorkommastellen, y=Nachkommastellen)

(2) Nachkommastellen:

- b

-1 entspricht den Vorkommastellen von y*B

- b

-2 wird nun aus (Nachkommastellen von) y*B berechnet

wie b

-1 aus r, usw.

- Abbruch, falls keine Nachkommastellen übrig bleiben

34

Zahlensysteme

Man kann in allen B-adischen Festpunktdarstellungen rechnen wie im Dezimalsystem

Stellenweises Addieren/Subtrahieren mit Übertrag

(Achtung: Übertrag bei Summen >B-1!)

Multiplizieren/Dividieren

(Sonderfall: schnelle Berechnung von *B oder /B)

36

Zahlensysteme

Man kann in allen B-adischen Festpunktdarstellungen rechnen wie im Dezimalsystem

Beispiel im Dualsystem  Übertrag ab Wert 2:

1 1 1 1.0 0 1

+ 1 1 0.1

Übertrag:1 1 1

= 1 0 1 0 1.1 0 1

37

Zahlensysteme

Eine reelle Zahlen hat unendliche viele Gleitpunktdarstellungen r = <Mantisse> * B <Exponent> mit reeller Zahl <Mantisse> und ganzer Zahl <Exponent>

Beispiel für Basis 10:

12.53

=

=

=

=

=

=

=

12.53 * 10 0

1.253 * 10 1

...

0.01253 * 10 3

...

125.3 * 10 -1

...

39

Zahlensysteme

Reelle Zahlen haben auch Gleitpunktdarstellungen r = (b k-1 b k-2

…b

1 b

0

.b

-1 b

-2

…)

B

= b k-1 b k-2

…b

1 b

0

.b

-1 b

-2

… * B 0

= b k-1 b k-2

…b

1

.b

0 b

-1 b

-2

… * B 1

= ...

= 0.0b

k-1 b k-2

…b

2

.b

1 b

0 b

-1 b

-2

… * B k+1

= ...

= b k-1 b k-2

…b

1 b

0 b

-1

.b

-2

… * B -1

= ...

= <Mantisse> * B <Exponent>

Zahlensysteme

Man normiert die Gleitpunktdarstellung reeller Zahlen r durch

Eingrenzungen des Bereichs für die Mantisse r = <Mantisse> * B <Exponent>

Übliche Normierungen:

1/B ≤ |<Mantisse>| < 1 also: r = 0.b

-1 b

-2

…b

-m

* B <Exponent> mit b

-1

> 0

Beispiele: 15.3=0.153 * 10 2 , 0.002=0.2 * 10 -2 ,...

40

38

Zahlensysteme

Man normiert die Gleitpunktdarstellung reeller Zahlen r durch

Eingrenzungen des Bereichs für die Mantisse r = <Mantisse> * B <Exponent>

Übliche Normierungen:

1 ≤ |<Mantisse>| < B also: r = b

0

.b

-1 b

-2

…b

-m

* B <Exponent> mit b

0

> 0

Beispiele: 15.3=1.53 * 10 1 , 0.002=2.0 * 10 -3 ,...

41

Zahlensysteme

Rechnen mit normierten Gleitpunktdarstellungen

Sei r

1

= m

1

⋅ B e1 , r

2

= m

2

⋅ B e2 mit r

1

,r

2

>0 (zur Vereinfachung!) und 1/B ≤ m

1

, m

2

< 1

Addition (o.B.d.A. sei r ≥ r ) r

1

+ r

2

= m

1

⋅ B e1 + (m

2

⋅ B e2-e1 ) B e1 [Exponentenangleich]

= (m

1

+ m

2

⋅ B e2-e1 ) B e1 [Addition der Mantissen]

= m ⋅ B e [Normierung: m =m

1

+m

2

⋅ B e2-e1 od. =(m

1

+m

2

⋅ B e2-e1 )/B]

43

Zahlensysteme

Rechnen mit normierten Gleitpunktdarstellungen

Sei r

1

= m

1

⋅ B e1 , r

2

= m

2

⋅ B e2 mit r

1

,r

2

>0 (zur Vereinfachung!) und 1/B ≤ m

1

, m

2

< 1

Vergleiche: r

1

<r

2 genau dann wenn (gdw) (e

1

<e

2

) oder (e

1

=e

2 und m

1

<m

2

) r

1

=r

2 gdw (e

1

=e

2 und m

1

=m

2

)

42

Zahlensysteme

Rechnen mit normierten Gleitpunktdarstellungen

Sei r

1

= m

1

⋅ B e1 , r

2

= m

2

⋅ B e2 mit r

1

,r

2

>0 (zur Vereinfachung!) und 1/B ≤ m

1

, m

2

< 1

Subtraktion (o.B.d.A. sei r ≥ r ) r

1

- r

2

= m

1

⋅ B e1 - (m

2

⋅ B e2-e1 ) B e1 [Exponentenangleich]

= (m

1

- m

2

⋅ B e2-e1 ) B e1 [Addition der Mantissen]

= m ⋅ B e [Normierung: m =m

1

-m

2

⋅ B e2-e1 od. =(m

1

-m

2

⋅ B e2-e1 )/B]

44

Zahlensysteme

Rechnen mit normierten Gleitpunktdarstellungen

Sei r

1

= m

1

⋅ B e1 , r

2

= m

2

⋅ B e2 mit r

1

,r

2

>0 (zur Vereinfachung!) und 1/B ≤ m

1

, m

2

< 1

Multiplikation (Division analog) r

1

⋅ r

2

= m

1

⋅ m

2

⋅ B e1+e2

= m ⋅ B e [Normierung: m = m

1

⋅ m

2

od. = m

1

⋅ m

2

B]

45

Ausblick

Technische Beschränkung für Rechner:

Es ist nur die Verarbeitung von n-Bit-Worten möglich (für ein festes n)

 Mit dieser Bitzahl muss man nun ganze Zahlen, reelle Zahlen,

Zeichen, usw. darstellen

 In der Praxis: n unterschiedlich groß für unterschiedliche

Datentypen (Zeichen: 8 Bit, ganze Zahl: 32 Bit, usw…)

Folgerung:

Man kann nur endlich viele Zahlen/Zeichen darstellen

47

Zahlensysteme

Rechnen mit normierten Gleitpunktdarstellungen

Beispiele (zur Basis 2)

(0.1*2 2 )+(0.11*2 -1 ) =

=

(0.11*2 -1 )+(0.1*2 -1 ) =

=

(0.11*2 -1 )-(0.1*2 -1 ) =

=

(0.1*2 2 )*(0.11*2 -1 ) =

=

(0.1 *2 2

0.1 * 2

)+(0.11 *2

0.10011* 2

1.01 * 2

0.01 * 2

-2

0.11 * 2

-1

0.101 * 2

-1

0

0.011 * 2

0

1

2

-3 )*2

46

2

Ausblick

Fragen:

Welche Zahlen sollen codiert werden (zusammenhängender

Bereich, ganze/gebrochene/reelle Zahlen?)

Wie codiert man negative Zahlen?

Mit welcher Genauigkeit (Rundungsfehler) codiert man reelle

Zahlen?

48

Ausblick

Fragen:

Wie lassen auf den Codierungen arithmetische Operationen realisieren?

c Codierung

(x, y) op

(c(x), c(y)) op

x op y c Codierung

c(x op y) = c(x) op c(y) op ∈ {+, -,

*, / } op ∈ {+, -,

*, / }

Wie muss op aussehen, damit das Diagramm kommutativ ist?

49

Inhalt

Motivation

Technische Beschränkung für Rechner:

Es ist nur die Verarbeitung von n-Bit-Worten möglich (für ein festes n)

Mit dieser Bitzahl muss man nun ganze Zahlen, reelle Zahlen,

Zeichen, usw. darstellen (in der Praxis n abhängig vom

Datentyp)

Folgerung:

Man kann nur endlich viele Zahlen/Zeichen darstellen

2

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

Zahlen- und Zeichendarstellungen

Inhalt

Motivation

Welche Zahlen sollen codiert werden (zusammenhängender

Bereich, ganze/gebrochene/reelle Zahlen?)

Wie codiert man negative Zahlen?

Mit welcher Genauigkeit (Rundungsfehler) codiert man gebrochene Zahlen?

1

3

Inhalt

Motivation

Wie lassen auf den Codierungen arithmetische Operationen realisieren?

c Codierung

(x, y) op

(c(x), c(y)) op

x op y c Codierung

c(x op y) = c(x) op c(y) op ∈ {+, -,

*, / } op ∈ {+, -,

*, / }

Wie muss op aussehen, damit das Diagramm kommutativ ist?

4

Zahlendarstellungen

Notationen

Jedes Wort über dem Alphabet {0,1} bezeichnen wir als

Bitmuster

Ab jetzt benutzen wir ausschließlich n-Bit-Codierungen. Die

Bezeichnung einer Codierung ist immer von der Form c

<Name>,n

<Name>

n ist eine Abkürzung für den Namen der Codierung ist die Anzahl der verwendeten Bit c

<Name>,n

(x) bezeichnet also das zu der Zahl x gehörende

Bitmuster bzgl. der Codierung c

<Name>,n

6

Inhalt

Zahldarstellungen (Vorzeichen-Betrag, Exzeß-q, 1-Komplement,

2-Komplement, Festpunkt, Gleitpunkt)

Zeichendarstellungen (ASCII, Unicode)

Zahlendarstellungen

Notationen

Wir benutzen also Bitmuster als Codewörter für Zahlen.

Ein gegebenes Bitmuster kann aber für verschiedene Zahlen stehen, je nachdem, welche Codierung man verwendet hat.

Durch die Notation (<Bitmuster>)

<Name>,n

geben wir an, dass wir <Bitmuster> als Codewort bzgl. der Codierung c

<Name>,n

auffassen

(<Bitmuster>)

<Name>,n

bezeichnet die Zahl, für die

c

<Name>,n

((<Bitmuster>)

<Name>,n

)=<Bitmuster> gilt

7

5

Zahlendarstellung ganzer Zahlen

Vorbereitungen

Für x ∈ {0, ..., 2 n - 1} bezeichnen wir mit c

2,n

(x) die

Dualdarstellung von x in n Stellen, evtl. aufgefüllt mit führenden

Nullen

Eignet sich noch nicht für die Darstellung negativer Zahlen

Bei Addition / Subtraktion / Multiplikation kann der darstellbare

Zahlenbereich über-/unterschritten werden - was dann?

Beispiele: c

2,8

(7)=00000111

(00000111)

2,8

=7

8

Vorzeichen-Betrag-Darstellung

Definition

A

VB,n

= {-(2 n-1 -1),...,-0,+0,1,...,2 n-1 - 1} c

VB,n

: A

VB,n

→ IB n c

VB,n c

VB,n

(x) := 0c

2,n-1

(x) := 1c

2,n-1

(|x|)

(|x|)

, falls 0 ≤ x < 2 n-1

, falls -2 n-1 < x ≤ 0

Also:

Positive Zahlen:

Negative Zahlen:

0

1

Betrag in Dualdarstellung

Betrag in Dualdarstellung

10

Zahlendarstellung ganzer Zahlen

Grundidee

Darstellung eines Zahlbereiches A = {x u mit:

,x u

+1,...,x o

-1,x o

}, x u

0 x o x u

< 0 < x o

A maximal, d.h. |A| ≈ 2 n

A symmetrisch zum Nullpunkt, d.h. |x u

| ≈ |x o

|

Arithmetische Operationen (auf codierten Zahlen) leicht zu realisieren (z.B. durch bitweise Operationen)

9

Vorzeichen-Betrag-Darstellung

Beispiele c

VB,8

(7)= 0c

2,7

(7)=00000111

(00000111)

VB,8

=7 c

VB,4

(-7)= 1c

(1111)

VB,4

=-7

2,3

(7)=1111

11

Vorzeichen-Betrag-Darstellung

Berechnung

Für c

VB,n

(x) = b n-1

... b

1 b

0 gilt x=(b n-1

... b

1 b

0

)

VB,n n-2

=(+/-) Σ b i = 0 i

2 i für b n-1

= (0/1)

Exzeß-q-Darstellung

Definition

A

Ex-q,n

={-q,...,0,1,...,2 n –1–q} für q ganze nicht-negative Zahl c

EX-q,n

: A

Ex-q,n

→ IB n c

Ex-q,n

(x) := c

2,n

(x+q)

12

14

Vorzeichen-Betrag-Darstellung

Arithmetik

Arithmetik der Vorzeichen-Betrag-Darstellung: Sehr aufwendig!

(selbst überlegen: z.B. postive Zahl + negative Zahl = ? 

Fallunterscheidung nötig)

 Wird in der Praxis nicht verwendet

Exzeß-q-Darstellung

Beispiele: c

Ex-32,8

(7)= c

2,8

(39)=00100111

(00100111)

Ex-32,8

=7 c

Ex-8,4

(-7)= c

2,4

(1)=0001

(0001)

Ex-8,4

=-7

13

15

Exzeß-q-Darstellung

Berechnung

Für c

Ex-q,n

(x) =b n-1

... b

1 b

0 gilt x = (b n-1

... b

1 b

0

)

Ex-q,n n-1

= Σ b i = 0 i

⋅ 2 i – q

16

Exzeß-q-Darstellung

Arithmetik

Sei + die Addition, - die Subtraktion auf Dualzahlen

Subtraktion Θ (auf Exzeß-q-Darstellungen) c

Ex-q,n

(x) Θ c

Ex-q,n

(y)

(x, y)

= c

Ex-q,n

(x-y) c

=c

2,n

(x-y+q)

(c(x),c(y))

-

=c

2,n

(x+q)-c

2,n

(y+q)+c

2,n

(q)

Θ x - y c c(x - y) = c(x) Θ c(y)

=c

Ex-q,n

(x)-c

Ex-q,n

(y)+c

2,n

(q)

Beispiel: c

Ex-32,8

(7) Θ c

Ex-32,8

(-7)=00100111-00011001+00100000=00101110

18

Exzeß-q-Darstellung

Arithmetik

Sei + die Addition, - die Subtraktion auf Dualzahlen

Addition ⊕ (auf Exzeß-q-Darstellungen) c

Ex-q,n

(x) ⊕ c

Ex-q,n

(y)

(x, y)

=c

Ex-q,n

(x+y) c

=c

2,n

(x+y+q)

(c(x),c(y))

=c

2,n

(x+q)+c

2,n

(y+q)-c

2,n

(q)

+

⊕ x + y c c(x + y) = c(x) ⊕ c(y)

=c

Ex-q,n

(x)+c

Ex-q,n

(y)–c

2,n

(q)

Beispiel: c

Ex-32,8

(7) ⊕ c

Ex-32,8

(-7)=00100111+00011001-00100000=00100000

17

Exzeß-q-Darstellung

Arithmetik

Bei Bereichsüberlauf (also bei x+y > 2 n –1–q oder <-q) brechen C-Programme mit Fehlermeldung ab

Multiplikation/Division: zu kompliziert!

Wird zur Darstellung des Exponenten bei Gleitpunktdarstellungen verwendet (bemerke: da braucht man nur Addition /

Subtraktion)

19

1- und 2-Komplement-Darstellung

Grundidee

Wir betrachten eine feste ganze nicht-negative Zahl k

Für eine ganze nichtnegative Zahl x k/2 sei x := k – x das Komplement von x bzgl. k

0 x k/2 k-x k

1- und 2-Komplement-Darstellung

Grundidee

Wähle k so, dass Komplementbildung und Subtraktion von k leicht realisierbar sind: k = 2 n (2-Komplement) k = 2 n -1 (1-Komplement)

20

0 x k/2 k-x k

22

1- und 2-Komplement-Darstellung

Grundidee

Stelle positive Zahlen durch Binärcodierung dar: c(x) := c

2,n

(x)

Stelle negative Zahlen durch Binärcod. des Komplements dar: c(-x) := c

2,n

(x) = c

2,n

(k-x)

Subtraktion durch Addition des Komplements: c(y)-c(x) = c(y)+c(-x) = c

2,n

(y)+c

2,n

(k-x)

21

2-Komplement-Darstellung

Definition

A

2K,n

= {-2 n-1 ,...,0,1,...,2 n-1 – 1} c

2K,n

: A

2K,n

→ IB n

c

2K,n

(x) := c

2,n

(x)

c

2K,n

(x) := c

2,n falls 0 ≤ x < 2 n-1

(2 n + x) falls -2 n-1

≤ x < 0

0 x 2 n-1 2 n -x 2 n

23

2-Komplement-Darstellung

Beispiele: c

2K,4

(7)= c

2,4

(0111)

2K,4

=7

(7)=0111 c

2K,4

(-8)= c

(1000)

2K,4

2,4

(2 4 -8)=1000

=-8

2-Komplement-Darstellung

Berechnung

Für c

2K,n

(x) = b n-1

... b

1 b

0 gilt x = (b n-1

... b

1 b

0

)

2K,n

= -b n-1 n-2

2 n-1 + Σ b i = 0 i

⋅ 2 i

(Rechnung?)

26

24

2-Komplement-Darstellung

Beispiel für n=4 (komplett) c

2K,4

(0) = 0000 c

2K,4

(1) = 0001 c

2K,4

(-1) = 1111 c

2K,4

(2) = 0010

...

c

2K,4

(7) = 0111 c

2K,4

(-2) = 1110

... c

2K,4

(-7) = 1001

c

2K,4

(-8) = 1000

25

2-Komplement-Darstellung

Arithmetik

Komplementbildung

Sei x ∈ {1,...,2 n-1 - 1}, c

2K,n

(x)=c

2,n

(x)=b n-1

...b

1 b

0

Dann gilt: c

2K,n

(-x) = c

2,n

(x)

=c

2,n

(2 n - 1) -c

2,n

(x) + c

2,n

(1)

=(11...11)

2,n

-(b n-1

... b

1 b

0

)

2,n

+ (00...01)

2,n

=((1 - b n-1

) ... (1 - b

1

)(1 - b

0

))

2,n

+ (00...01)

2,n

 Komplementbildung = „Kippen“ aller Bits und Addition von 1

27

2-Komplement-Darstellung

Arithmetik (anschaulich)

Addition: einer positiven Zahl y:

y Schritte gegen Uhrzeigersinn.

einer negativen Zahl y:

y Schritte im Uhrzeigersinn.

Subtraktion: durch Addition des Komplements

Multiplikation / Division: Zurückführung auf Addition

2-Komplement-Darstellung

Arithmetik (formal) n-1

> x,y ≥ 0, x+y < 2 : c

2K,n

(x) ⊕ c

2K,n

(y)

= c

2K,n

(x+y)

= c

2,n

(x+y)

= c

2,n

(x) + c

2,n

(y)

= (c

2,n

(x) + c

2,n

(y)) modulo 2 n

= (c

2K,n

(x) + c

2K,n

(y)) modulo 2 n

28

30

2-Komplement-Darstellung

Arithmetik (formal) c

2K,n

(x) ⊕ c

2K,n

(y) := (c

2K,n

(x)+c

2K,n

(y)) modulo 2 n

+ ist die Addition auf Dualzahlen modulo 2 n bedeutet anschaulich: „Ignorieren“ des Überlaufs

(führende 1 ignorieren, falls Ergebnis n+1 Stellen hat)

29

2-Komplement-Darstellung

Arithmetik (formal)

Rechnung für 2 > x ≥ 0,0 > y ≥− 2 ,x+y<0: c

2K,n

(x) ⊕ c

2K,n

(y)

= c

2K,n

(x+y)

= c

2,n

(x+y+2 n )

= c

2,n

(x+y+2 n ) modulo 2 n

= (c

2,n

(x) + c

2,n

(y+2 n )) modulo 2 n

= (c

2K,n

(x) + c

2K,n

(y)) modulo 2 n

31

2-Komplement-Darstellung

Arithmetik (formal) n-1

> x ≥ 0,0 > y ≥− 2 ,x+y ≥ 0: c

2K,n

(x) ⊕ c

2K,n

(y)

= c

2K,n

(x+y)

= c

2,n

(x+y) + 2 n - 2 n

= (c

2,n

(x+y) + 2 n ) modulo 2 n

= (c

2,n

(x) + c

2,n

(y+2 n )) modulo 2 n

= (c

2K,n

(x) + c

2K,n

(y)) modulo 2 n

2-Komplement-Darstellung

Arithmetik (formal)

Ergebnis bei Bereichsüberlauf 2 > x,y ≥ 0, x+y ≥ 2 :

((c

2K,n

(x)+c

2K,n

(y))modulo 2 n )

2K,n

=

((c

2,n

(x)+c

2,n

(y))modulo 2 n )

2K,n

=

(c

2,n

(x+y))

2K,n

= x+y-2 n

Kein Abbruch, sondern Rückgabe des falschen Ergebnisses

(Anschaulich im Zahlenring: Zyklischer Bereichsüberlauf)

34

32

2-Komplement-Darstellung

Arithmetik (formal)

Rechnung für 0 > x,y ≥− 2 ,x+y ≥ -2 : c

2K,n

(x) ⊕ c

2K,n

(y)

= c

2K,n

(x+y)

= c

2,n

(x+y+2 n ) + 2 n - 2 n

= (c

2,n

(x+y+2 n ) + 2 n ) modulo 2 n

= (c

2,n

(x+2 n ) + c

2,n

(y+2 n )) modulo 2 n

= (c

2K,n

(x) + c

2K,n

(y)) modulo 2 n

2-Komplement-Darstellung

Arithmetik (formal)

Ergebnis bei Bereichsüberlauf -2 x,y<0, x+y < -2 :

((c

2K,n

(x)+c

2K,n

(y))modulo 2 n )

2K,n

=

((c

2,n

(x+2 n )+c

2,n

(y+2 n ))modulo 2 n )

2K,n

=

(c

2,n

(x+y+2 n ))

2K,n

= x+y+2 n

Kein Abbruch, sondern Rückgabe des falschen Ergebnisses

(Anschaulich im Zahlenring: Zyklischer Bereichsüberlauf)

35

33

1-Komplement-Darstellung

Definition

A

2K,n

= {-(2 n-1 -1),...,-0,+0,1,...,2 n-1 – 1} c

1K,n

: A

1K,n

→ IB n

c

1K,n

(x) := c

c

1K,n

(x) := c

2,n

2,n

(x) falls 0 ≤ x < 2 n-1

(2 n -1 + x) falls -2 n-1

< x ≤ 0

0 x 2 n-1 -1 2 n -1-x 2 n -1

36

1-Komplement-Darstellung

Beispiel für n=4 (komplett) c

1K,4

(+0) = 0000 c

1K,4

(-0) = 1111 c

1K,4

(1) = 0001 c

1K,4

(-1) = 1110 c

1K,4

...

c

1K,4

(2) = 0010

(7) = 0111 c

1K,4

(-2) = 1101

... c

1K,4

(-7) = 1000

38

1-Komplement-Darstellung

Beispiele: c

1K,4

(7)= c

(0111)

1K,4

1,4

=7

(7)=0111 c

1K,4

(-7)= c

(1000)

1K,4

1,4

=-7

(2 4 -1-7)=1000

1-Komplement-Darstellung

Berechnung

Für c

1K,n

(x) = b n-1

... b

1 b

0 gilt x = (b n-1

... b

1 b

0

)

1K,n

= -b n-1 n-2

(2 n-1 -1)+ Σ b i = 0 i

⋅ 2 i

(Rechnung?)

39

37

1-Komplement-Darstellung

Arithmetik

Komplementbildung

Sei x ∈ {1,...,2 n-1 }, c

1K,n

(x)=c

2,n

(x)=b n-1

...b

1 b

0

Dann gilt: c

1K,n

(-x) = c

2,n

(x)

= c

2,n

(2 n - 1) -c

2,n

(x)

= (11...11)

2,n

-(b n-1

... b

1 b

0

)

2,n

=((1 - b n-1

) ... (1 - b

1

)(1 - b

0

))

2,n

 Komplementbildung = „Kippen“ aller Bits

40

1-Komplement-Darstellung

Arithmetik (formal)

Analog zu 2-Komplement: Betrachte (2 n -1) statt 2 n c

1K,n

(x) ⊕ c

1K,n

(y) = (c

1K,n

(x)+c

1K,n

(y)) modulo 2 n -1

+ ist die Addition auf Dualzahlen modulo 2 n -1 bedeutet anschaulich: „Addition“ des Überlaufs

(führende 1 ignorieren und an letzter Stelle

addieren , falls Ergebnis n+1 Stellen hat)

42

1-Komplement-Darstellung

Arithmetik (anschaulich)

Addition: einer positiven Zahl y:

y Schritte gegen Uhrzeigersinn.

einer negativen Zahl y:

y Schritte im Uhrzeigersinn.

Subtraktion: durch Addition des Komplements

Multiplikation / Division: Zurückführung auf Addition

41

Zahlendarstellung reeller Zahlen

Ziel:

Darstellung rationaler und reeller Zahlen als n-Bit-Worte

Problem:

Nur endlich viele Zahlen exakt darstellbar mit n Bits (Festpunkt oder Gleitpunkt)

 unendlich viele Zahlen nur approximativ (gerundet) darstellbar

Frage:

Welche Zahlen wollen wir exakt darstellen?

43

Festpunktdarstellung mit n Bits

Definition:

Seien m (Anzahl Nachkommastellen) und k (Anzahl

Vorkommastellen) nichtnegative ganze Zahlen fest gegeben

Hat eine nicht-negative ganze Zahl x die Summendarstellung x = (b k-1

...b

0

.b

-1

...b

-m

)

2 heißt c

2,m,k

(x) = b k-1

...b

0 b

-1

...b

-m

= c

2,m+k

(x*2 m )

2-adische Festpunktdarstellung von x mit k Vorkomma- und m

Nachkommastellen und x heißt exakt darstellbar

44

Festpunktdarstellung mit n Bits

Definition: k = n-m m

Wir definieren für beliebiges x: c

2,m,k

(x):= c

2,m+k

(rd(x*2 m ))

So können wir also bei der Berechnung vorgehen:

(1) Multiplizieren der Zahl mit 2 m

(2) Auf- bzw. Abrunden in eine ganze Zahl

(3) Dual-Darstellung mit n Bit

46

Festpunktdarstellung mit n Bits

Definition: k = n-m m

Sind die Nachkommastellen einer Zahl x nicht exakt darstellbar, so rundet man zur nächstgelegenen exakt darstellbaren Zahl:

Mit rd bezeichnen wir den Rundungsoperator, der eine Zahl x zur nächstgelegenen ganzen Zahl rundet. Er erfüllt also

|rd(x)-x|=min{|y-x| | y ist eine ganze Zahl}

Festpunktdarstellung mit n Bits

Beispiel: Stelle Dezimalzahl 1.2 in folgender 8-Bit

Festpunktdarstellung bzgl. der Basis 2 dar:

4 4

Multiplizieren der Zahl mit 2 4 :

1.2 * 2 4 = 19.2

Auf- bzw. Abrunden in ganze Zahl: rd(19.2)=19

Dual-Darstellung mit 8 Bit: c

2,4,4

(1.2)= c

2,8

(rd(1.2* 2 4 ))=c

2,8

(19)=00010011

(00010011)

2,4,4

=(00010011)

2,8

/ 2 4 =1.1875

47

45

Festpunktdarstellung mit n Bits

Berechnung

Für c

2,m,k

(x) = b n-1

... b

1 b

0 gilt x = (b n-1

... b

1 b

0

)

2,m,k n-1

= Σ b i=0 i

⋅ 2 i-m

= (b n-1

... b

1 b

0

)

2,m+k

/2 m

48

Festpunktdarstellung mit n Bits

|/|x|

|x-(c

2,m,k

(x))

2,m,k

|/|x|

< 1/|x|2 m+1

(kann beliebig groß werden für kleine x)

Festpunktdarstellung mit n Bits

Absoluter Rundungsfehler: |x-(c (x)) |

|x-(c

2,m,k

(x))

2,m,k

|

= |x-(c

2,m+k

(rd(x*2 m )))

2,m+k

/2 m |

= |x-(rd(x*2 m ))/2 m |

= |x*2 m -(rd(x*2 m ))|/2 m

< 0.5/2 m

= 1/2 m+1

(Abstände zwischen exakt darstellbaren Zahlen gleichbleibend)

49

Festpunktdarstellung mit n Bits

Arithmetik: k=n-m m

Zurückführen auf Rechenoperationen für ganze Zahlen durch

Multiplizieren der Zahl mit 2 m

50 51

Festpunktdarstellung mit n Bits

Eigenschaften: k = n-m m

Gleichbleibender Abstand 1/2 m zwischen exakt darstellbaren

Zahlen

Geeignet für Zahlen ähnlicher Größenordnung

(Anzahl der Nachkommastellen m an Größenordnung anpassen, s.d. Rundungsfehler tolerierbar)

52

Gleitpunktdarstellung mit n Bits

Darstellung normierter Gleitpunktzahlen zur Basis 2 in n-Bits:

Jede reelle Zahl r besitzt eine eindeutige Darstellung der Form

(siehe Kapitel zu Zahlensystemen): r = m ⋅ 2 e mit 1 ≤ |m| < 2

Idee: Codiere (m, e) in geeigneter Weise als n-Bit-Zahl:

k Bits für die Darstellung von m (Festpunktdarstellung)

n - k Bits für e (Exzeß-q-Darstellung)

(0 < k < n)

54

Festpunktdarstellung mit n Bits

Eigenschaften: k = n-m m

Problem:

Unterschiedliche Größenordnungen in Anwendungen:

Avogadrozahl:

Planck – Konstante:

L = 6.0225 ⋅ 10 23 h = 6.6260755 ⋅ 10 -34

Besser: Darstellung als Gleitpunktzahl mit n Bits

53

Gleitpunktdarstellung mit n Bits

Definition

V Charakteristik n-2

Betrag der Mantisse

k-2

V = Vorzeichen der Mantisse

=0 für positive Zahlen

=1 für negative Zahlen

0

55

Gleitpunktdarstellung mit n Bits

Definition

V Charakteristik n-2

Betrag der Mantisse

k-2 0

Darstellung der Mantisse (k-1 Bits): Festpunktdarstellung mit

(1) einer Vorkommastelle (muss nicht dargestellt werden, da immer =1)

(2) k-1 Nachkommastellen

Für c

2,k-1,1

(|m|) = 1b

-1 b

-2

... b

-k-2

definieren wir: c

2,man,k-1

(|m|) := b

-1 b

-2

... b

-k-2

56

Gleitpunktdarstellung mit n Bits

Definition

V Charakteristik n-2

Betrag der Mantisse

k-2 0 c

GP,k,n

(m ⋅ 2 e ) := 0c

2,exp,n-k

(e)c

2,man,k-1

(|m|), falls 0 ≤ m c

GP,k,n

(m ⋅ 2 e ) := 1c

2,exp,n-k

(e)c

2,man,k-1

(|m|), falls m < 0

Diese Bitmuster (und weitere) stehen dabei nicht zur Verfügung:

Spezielle Darstellung der 0: Bitmuster 00…00…0

Spezielle Darstellung von + ∞ : Bitmuster 01…10…0

Spezielle Darstellung von - ∞ : Bitmuster 11…10…0

58

Gleitpunktdarstellung mit n Bits

Definition

V Charakteristik n-2

Betrag der Mantisse

k-2

Darstellung des Exponenten = Charakteristik (n-k Bits):

Exzeß-(2 n-k-1 -1)-Darstellung c

2,exp,n-k

(e) := c

EX-q,n-k

(e) mit q=(2 n-k-1 -1)

0

(Exponenten zwischen –(2 n-k-1 -1) und 2 n-k-1 darstellbar)

57

Gleitpunktdarstellung mit n Bits

Beispiel:

V Charakteristik Betrag der Mantisse

7 6 4 3 0

3-Bit Charakteristik: q=3, Exponent zwischen –3 (Bitmuster 000) und 4 (Bitmuster 111)

4-Bit Mantisse: Werte zwischen 1 (Bitmuster 0000) und 2-2 -5

(Bitmuster 1111)

59

Gleitpunktdarstellung mit n Bits

Beispiel: Stelle die Zahl 4.6 dar

0 1 0 1 0 0 1 0

7 6 4 3 0

(1) Normierte Gleitpunktdarstellung (m und e bestimmen):

4.6 = 2.3*2 1 = 1.15*2 2

Ergebnis: |m| = 1.15 und e=2

Gleitpunktdarstellung mit n Bits

Beispiel: Stelle die Zahl 4.6 dar

0

7 6

1 0 1 0

4 3

0 1 0

0

(3) Charakteristik bestimmen: c

2,exp,3

(2)= c

EX-3,3

(2)= c

2,3

(2+3)=101

60

62

Gleitpunktdarstellung mit n Bits

Beispiel: Stelle die Zahl 4.6 dar

0

7 6

1 0 1 0

4 3

0 1 0

0

(2) Vorzeichen bestimmen:

0 für positive Zahl

Gleitpunktdarstellung mit n Bits

Beispiel: Stelle die Zahl 4.6 dar

0

7 6

1 0 1 0

4 3

0 1 0

0

(4) Code der Mantisse bestimmen: c

2,4,1

(1.15)=c

2,5

(rd(1.15*2 4 ))=c

2,5

(18)=10010

Ergebnis: c

2,man,4

(1.15)=0010

61

63

Gleitpunktdarstellung mit n Bits

Beispiel: Stelle die Zahl 4.6 dar

0

7 6

1 0 1 0

4 3

0 1 0

0

Also: c

GP,4,8

(4.6)=01010010

Umgekehrt:

(01010010)

GP,k,8

= (1.0010)

2

*2 (101) =(100.1)

2

=4.25

Gleitpunktdarstellung mit n Bits

Beispiele:

V Charakteristik Betrag der Mantisse

7 6 4 3

Kleinste positive darstellbare Zahl:

0

Kleinster Exponent:

(000)

2,exp,3

= (000)

EX-3,3

= (000)

2,3

-3 = 0-3 = -3

Kleinste Mantisse (Bitmuster 0…0 schon vergeben):

(0001)

2,man,4

= (10001)

2,4,1

= (1.0001)

2

Ergebnis:

(00000001)

GP,4,8

= (1.0001)

2

*2 -3 = (0.0010001)

2

66

64

Gleitpunktdarstellung mit n Bits

Berechnung:

V Charakteristik n-2

Betrag der Mantisse

k-2 0

Für c

GP,k,n

(x) = b n-1

... b

1 b

0 gilt x = (b n-1

... b

1 b

0

)

GP,k,n

= (+/-) (1.b

k-2

... b

1 b

0

)

2

* 2 (b ...b )

EX-q,n-k für b n-1

=(0/1) und q=2 n-k-1 -1

Gleitpunktdarstellung mit n Bits

Beispiel:

V Charakteristik Betrag der Mantisse

7 6 4 3

Größte positive darstellbare Zahl:

0

Größter Exponent:

(111)

2,exp,3

= (111)

EX-3,3

= (111)

2,3

-3 = 7-3 = 4

Größte Mantisse (Bitmuster 1…1 schon vergeben):

(1110)

2,man,4

= (11110)

2,4,1

= (1.1110)

2

Ergebnis:

(01111110)

GP,4,8

= (1.1110)

2

*2 4 = (11110)

2

= 30

67

65

Gleitpunktdarstellung mit n Bits

Beispiele: IEEE-Standard 754

Einfache Genauigkeit:

V

31 30

Charakteristik Betrag der Mantisse

23 22 0

8-Bit Charakteristik:

Exponent zwischen –127 (Bitmuster 0...0) und 128 (Bitmuster

1...1)

(23 + 1)-Bit Mantisse:

Werte zwischen 1 (Bitmuster 0...0) und 2-2 -24 (Bitmuster

1...1)

68

Gleitpunktdarstellung mit n Bits

Beispiele: IEEE-Standard 754

Erweiterte Genauigkeit:

V

79 78

Charakteristik Betrag der Mantisse

64 63 0

15-Bit Charakteristik:

Exponent zwischen –(2 -14 -1) (Bitmuster 0...0) und 2 14

(Bitmuster 1...1)

(64 + 1)-Bit Mantisse:

Werte zwischen 1 (Bitmuster 0...0) und 2-2 -65 (Bitmuster

1...1)

70

Gleitpunktdarstellung mit n Bits

Beispiele: IEEE-Standard 754

Doppelte Genauigkeit:

V

63 62

Charakteristik Betrag der Mantisse

52 51 0

11-Bit Charakteristik:

Exponent zwischen –1023 (Bitmuster 0...0) und 1024

(Bitmuster 1...1)

(52 + 1)-Bit Mantisse:

Werte zwischen 1 (Bitmuster 0...0) und 2-2 -53 (Bitmuster

1...1)

69

Festpunktdarstellung mit n Bits

Absoluter Rundungsfehler: |m ⋅ 2 -(c (m ⋅ 2 )) |

|m ⋅ 2 e -(c

GP,k,n

(m ⋅ 2 e ))

GP,k,n

|

= |m-(c

2,k-1,1

(m))

2,k-1,1

| ⋅ 2 e

< 2 e /2 k

(Kann sehr groß werden für große Zahlen:

–(2 n-k-1 -1) ≤ e ≤ 2 n-k-1 )

71

Festpunktdarstellung mit n Bits

Relativer Rundungsfehler: |m ⋅ 2 -(c (m ⋅ 2 )) |/|m ⋅ 2 |

|m ⋅ 2 e -(c

GP,k,n

(m ⋅ 2 e ))

GP,k,n

|/|m ⋅ 2 e |

< 2 e /|m ⋅ 2 e |2 k

< 2 e /2 e 2 k

< 1/2 k

(Gleichbleibend für alle Zahlen)

72

Gleitpunktdarstellung mit n Bits

Arithmetik:

V Charakteristik n-2

Betrag der Mantisse

k-2 0

Große Rundungsfehler möglich: durch Exponentenangleich bei Addition sehr unterschiedlich großer Zahlen ((2 -9 +2 23 )-2 23 =0,2 -9 +(2 23 -2 23 )=2 -9 ) durch Stellenauslöschung bei Subtraktion gleich großer

Zahlen (10 23 ((10 -9 +1)- 1)=0, 10 23 (10 -9 +(1-1))=10 14 )

74

Gleitpunktdarstellung mit n Bits

Arithmetik:

V Charakteristik n-2

Betrag der Mantisse

k-2 0

Wie Arithmetik normierter Gleitpunktzahlen:

Addition/Subtraktion:

Exponentenangleich - Mantissen addieren/subtrahieren - neu normieren

Multiplikation/Division:

Exponenten addieren/subtrahieren - Mantissen mult./div. - neu normieren mit Ausnahmefällen:

Bereichsüberlauf oder -unterschreitung bei Darstellung des Exponenten

(„overflow“/“underflow“); z.B. bei Multiplikation sehr großer/kleiner Zahlen

73

Gleitpunktdarstellung mit n Bits

Arithmetik:

Ergebnisse von Gleitpunktberechnungen können u.U. erheblich von dem exakten Wert abweichen!

Auswege:

Exakte Arithmetik (z.B. Intervallarithmetik: nicht durch

Hardware realisiert, aber Software erhältlich)

Rechnungen geeignet organisieren (Gruppierung von Zahlen nach Größenbereichen)

Übliche Rechengesetze gelten i.A. nicht (Assoziativ-/Distributiv-

/Kommutativgesetz, siehe obiges Beispiel)

75

Gleitpunktdarstellung mit n Bits

Arithmetik:

Sonderrolle der 0:

Keine nGP-Darstellung arithmetische Sonderbehandlung (siehe IEEE-Standard) exaktes Ergebnis 0 wird in der Regel nicht angenommen

 bei Abfragen: nicht „r == 0“, sondern „|r| < ε “ nicht „x == y“, sondern „|x - y| < ε “

Zeichendarstellungen

ASCII - Tabelle:

American Standard Code for Information Interchange

Gebräuchlichste Code-Tabelle für Computer

Alle wichtigen Zeichen der englischen Sprache von 0 bis 127 nummeriert (dargestellt durch Bits 2 bis 8)

Darunter: Auch „nicht druckbare“ Zeichen mit ausschließlich formatierender Wirkung (z.B. Tabulatorzeichen, siehe auch C-

Vorlesung)

78

76

Zeichendarstellungen

Grundidee:

Schritt 1:

Verwende Code-Tabelle zur Übersetzung von Zeichen in

Zahlen (ASCII, Unicode)

Schritt 2:

Codiere alle Zahlen in 0en und 1en (binäres Zahlensystem)

77

Zeichendarstellungen

ASCII - Tabelle:

Das erste Bit verwendete man früher als Kontrollbit für die

Datenübertragung:

Auf 0 oder 1 gesetzt, je nachdem ob die Anzahl der 1-en an den übrigen 7

Bitpositionen gerade (even) oder ungerade (odd) ist

Ergebnis: Gesamtanzahl der 1-en immer gerade (even parity).

Folgerung: Erkenne, wenn bei Übertragung ein Bit verfälscht wurde

Später: ASCII zur Speicherung, verbesserte Datenübertragung

Kein Kontrollbit mehr, ASCII um 128 Zeichen erweitert (es existieren mehrere unterschiedliche Erweiterungen deutsche Umlaute, Sonderzeichen anderer Sprachen, …)

79

Zeichendarstellungen

ASCII – Tabelle, Beispiele:

A

B

9

… a b

Zeichen

0

… dezimal

48

57

65

66

97

98

… binär

0110000

0111001  

1000001

1000010

1100001

1100010

(Groß- und Kleinbuchstaben in alphabetischer Reihenfolge)

80

Zeichendarstellungen

Unicode – Tabelle:

Zeichen codiert gemäß UCS (Universal Character Set):

Zeichen 0 – 127: wie ASCII

Zeichen 128 – 255: wie Latin-1-Erweiterung von ASCII verwendet 32 Bits mit führenden 0en

UCS-Code eingebettet in syntaktisches Format mit Kontrollbits:

UTF: Unicode-Transformation-Format

Erkennen von Zeichengrenzen, Korrektheitstest

82

Zeichendarstellungen

Unicode – Tabelle:

256 Zeichen reichen nicht für alle Sprachen aus

Mit Unicode kann man alle jemals von Menschen verwendeten

Schriftzeichen speichern

MS-Office 2000, OpenOffice und jedes andere moderne

Programm erkennt automatisch, ob ein Text im alten ASCII-Code oder im neuen Unicode gespeichert ist

81

Zeichendarstellungen

Unicode – Tabelle:

Verschiedene Versionen: UTF-32, UTF-16, UTF-8 können alle den kompletten Zeichensatz darstellen sind verlustfrei in jeweils andere Darstellung transformierbar

UTF-32: fixe Länge für alle Zeichen (32 Bit)

UTF-16,UTF-8: unterschiedliche Längen für verschiedene

Zeichen (führende 0en zum Teil weglassen)

UTF-8 : am weitesten verbreitete Darstellung, Quasi-Standard

83

Zeichendarstellungen

Unicode – Tabelle, Beispiel UTF-8 :

7-Bit ASCII-Zeichen: werden mit einem Byte kodiert, in der Form 0<ASCII-Code> andere: verwenden zwischen 2 und 4 Bytes

Code beginnt mit 1

n-Byte-Zeichen:

Erstes Byte beginnt mit n 1-en mit einer anschließenden 0

Jedes Folgebyte beginnt mit 10

Übrige Bits: Kodierung eines Unicode-Zeichens mit UCS

(weglassen überschüssiger führender 0en)

84

Zusammenfassung

Daten werden über dem Alphabet {0,1} codiert mit endlich vielen Bits

Wir haben verschiedene Codierungen für unterschiedliche

Datentypen kennengelernt

In den verschiedenen Codierungen können identische

Codeworte vorkommen

Wie ein Codewort interpretiert wird, hängt von der Codierung

(also dem Datentyp) ab!

Welche und wieviele Werte codiert werden (können), hängt von der Anzahl der verwendeten Bits ab

86

Zeichendarstellungen

Unicode – Tabelle, Beispiel UTF-8 :

Wird von Java unterstützt, aber im allgemeinen nicht von höheren

Programmiersprachen (auch nicht von C)

1-Byte-Codes: 0xxx xxxx

2-Byte-Codes: 110x xxxx 10xx xxxx

3-Byte-Codes: 1110 xxxx 10xx xxxx 10xx xxxx

4-Byte-Codes: 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx

85

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

Programmieren in C – Fallunterscheidungen

1

Inhalt

Motivation:

Bisher: Ausgeführte Anweisungen waren unabhängig von Daten

(z.B. Benutzereingabe)

Jetzt: Abhängig von Datenwerten soll ein Programm unterschiedlichen Verlauf nehmen können

Beispiel:

Unterscheidung zwischen gültigen und ungültigen Eingaben

Unterschiedliche Zinsen für unterschiedliche Anlagebeträge

2

Inhalt

Abhängig von Datenwerten soll ein Programm unterschiedlichen Verlauf nehmen können erfüllt

Anweisung 1a

Bedingung nicht erfüllt

Anweisung 1b

Anweisung 2a

Anweisung 2b

4

Inhalt

Motivation:

Bisher: Ausgeführte Anweisungen waren unabhängig von Daten

(z.B. Benutzereingabe)

Jetzt: Abhängig von Datenwerten soll ein Programm unterschiedlichen Verlauf nehmen können

Anweisungen hängen von sog. Bedingungen ab (das sind

Ausdrücke, die wahr oder falsch sein können)

Als Vorbereitung werden Ausdrücke formal definiert

3

Inhalt

Vorbereitung: Ausdrücke (formal)

Bedingungen

Die Operation ?:

Bedingte Anweisung: if-else

Fallunterscheidungen

Zeichen

5

)

Ausdrücke

Ausdrücke sind mittels Operationszeichen verknüpfte Variablen und Konstanten zur Darstellungen von Rechenvorschriften

Konstruktion von Ausdrücken:

Variablen und Konstanten sind Ausdrücke

Beispiele: laenge,breite,’\n’,3,-4e2,...

Ist op ein n-stelliges Operationszeichen und sind E

1

,…,E n

Ausdrücke passenden Typs, so ist op(E

1

,…,E n

) ein Ausdruck

Beispiele: *(laenge,breite),-(3,-4e2),...

Ausdrücke

Ausdrücke sind mittels Operationszeichen verknüpfte Variablen und Konstanten zur Darstellungen von Rechenvorschriften

Konstruktion von Ausdrücken:

Ausdrücke können aus Variablen und Konstanten mit Hilfe von

Operationszeichen beliebig verschachtelt aufgebaut werden

+(3,*(5,6)), *(+(3,5),6)

Ausdrücke

Schreibweisen für Operationen ( Infix-Notation ):

Unär: statt op(E) schreibt man i.d.R. op E

Beispiel: -5

Binär: statt op(E

1

,E

2

) schreibt man i.d.R. E

1

op E n

Beispiel: 3+5

Ausdrücke

Auswertung

Ein Ausdruck hat einen Wert, der sich durch die Werte der

Variablen und Konstanten und der Auswertung der Operationen ergibt op(E

1

,…,E n

) wird ausgewertet, indem

- zuerst E

1

,…,E n ausgewertet werden

- und dann op ausgewertet wird

Ausdrücke werden also von innen nach aussen ausgewertet

Auswertungsreihenfolge ist durch den Ausdruck gegeben

Ausdrücke

Auswertung

Problem: Der Infixnotation sieht man die Auswertungsreihenfolge nicht mehr an

Beispiel: 3+5*6

Lösung 1: Klammerung vorrangig auszuwertender Operationen

Beispiele:

3+(5*6) entspricht +(3,*(5,6))

(3+5)*6 entspricht *(+(3,5),6)

Lösung 2: Kenntnis der Bindungsstärke von Operationszeichen

Ausdrücke

Auswertung

Bindungen arithmetischer Operationen:

*,/,% binden stärker als +,-

*,/,% binden gleich stark

+,- binden gleich stark

x * y / z % 2 entspricht ((x * y) / z) % 2

x + y / z - 2 entspricht (x + (y / z)) – 2

Ausdrücke

Auswertung

Auch wenn in der Infixnotation auf Klammerung verzichtet wird, gibt es eine eindeutige Auswertungsreihenfolge:

Jede Programmiersprache versieht Operationszeichen mit unterschiedlich starker Bindung der Operanden an die Operation

Stärker bindende Operationen werden vorrangig ausgewertet

3+5*6 == 3+(5*6)

Gleich stark bindende Operationen werden von links nach rechts ausgewertet

3/5*6 == (3/5)*6

Ausdrücke

Auswertung

Außerdem kann es zu impliziten Typumwandlungen kommen:

Grundsätzlich werden vor der Auswertung alle Operanden einer

Operation in den längsten vorhandenen Typ umgewandelt

Beispiel:

Auswertung des Ausdrucks 3.0 / 2

(1) 2 wird in den Typ double umgewandelt, also in 2.0

(2) Operation = Division auf Fließkommazahlen

1 (3) Ergebnis: 1.50

Ausdrücke

Auswertung

Die Auswertung eines Ausdrucks lässt sich gut durch einen sog.

Syntaxbaum ausdrücken

Vorbereitende Definitionen 1:

Ein gerichteter Graph ist ein Paar (V,F), wobei

- V endliche Menge von Knoten

- F ⊆ V × V Menge von gerichteten Kanten zwischen Knoten

Grafische Darstellung: Zeichne Pfeile zwischen Knoten

V={u,w}, F={(u,u),(u,w)} u w

Ausdrücke

Auswertung

Die Auswertung eines Ausdrucks lässt sich gut durch einen sog.

Syntaxbaum ausdrücken

Vorbereitende Definitionen 3:

Ein gerichteter Graph heißt azyklisch falls es keine Folge von

Knoten v

(v n

,v

1

1

,...,v n

V gibt mit (v

1

,v

2

),...,(v

) ∈ F (eine solche Folge heißt Zyklus) n-1

,v n

),

Zyklus u u w

Ausdrücke

Auswertung

Die Auswertung eines Ausdrucks lässt sich gut durch einen sog.

Syntaxbaum ausdrücken

Vorbereitende Definitionen 2:

Vorgänger eines Knotens v: {w ∈ V | (w,v) ∈ F}

Nachfolger eines Knotens v: {w ∈ V | (v,w) ∈ F}

Vorgänger von u:{u}

Nachfolger von u:{u,w} u w

Ausdrücke

Auswertung

Die Auswertung eines Ausdrucks lässt sich gut durch einen sog.

Syntaxbaum ausdrücken

Vorbereitende Definitionen 4:

Ein Baum ist azyklischer gerichteter Graph (V,F), wobei

- es genau einen Knoten ohne Vorgänger gibt (die Wurzel)

- jeder Knoten höchstens einen Vorgänger hat

Verboten:

Ausdrücke

Auswertung

Die Auswertung eines Ausdrucks lässt sich gut durch einen sog.

Syntaxbaum ausdrücken

Vorbereitende Definitionen 5:

Sei (V,F) ein Baum:

w Vater von v: (w,v) ∈ F

w Kind von v: (v,w) ∈ F

v Blatt: v hat keine Kinder

Wurzel

Blatt

Blatt

Blatt

Vater Kinder

Ausdrücke

Auswertung

Der Syntaxbaum eines Ausdrucks E ist ein Baum (V,F), wobei

- V die Menge der Teilausdrücke von E ist

- E die Wurzel ist

- Teilausdrücke, die Variablen oder Konstanten sind, Blätter sind

- Teilausdrücke der Form op(E

1

,…,E n

)Kinder E

1

,…,E n

haben

(Die Teilausdrücke eines Ausdrucks op(E

1

,…,E n

) sind E

1

,…,E n und deren Teilausdrücke)

Ausdrücke

Auswertung

Beispiel: Syntaxbaum des Ausdrucks 2*x+5:

+(*(2,x),5)

*(2,x) 5

2 x

Bedingungen

Eine Bedingung ist ein Ausdruck, der nur die Werte wahr und

falsch annehmen kann

Konstruktion von Bedingungen:

Mittels sog. Vergleichsoperatoren verknüpfte Ausdrücke sind

Bedingungen

Mittels sog. logischer Operatoren verknüpfte Bedingungen sind

Bedingungen

Bedingungen

Vergleichsoperationen zur Konstruktion von Bedingungen:

<

>

<=

>=

==

!=

“kleiner als”-Operation

“größer als”-Operation

“kleiner oder gleich”-Operation

“größer oder gleich”-Operation

“genau gleich”-Operation

“ungleich”-Operation

Diese Operationen sind alle binär und u.a. für die Datentypen

int, double, char definiert

[Hinweis: Verwechseln Sie NICHT = und ==]

Bedingungen

Wahrheitstafeln

Das Verhalten logischer Operatoren lässt sich gut durch sog.

Wahrheitstafeln illustrieren

Eine Wahrheitstafel stellt die Auswertung einer logischen

Operation in Abhängigkeit vom Wahrheitsgehalt der Operanden dar:

B1 B2 B1&&B2

B !B

0 1 0 1 0

B1 B2 B1||B2

0 1 1

1 0

1 0 0 1 0 1

0 0 0 0 0 0

1 1 1 1 1 1

Bedingungen

Logische Operationen zur Verknüpfung komplexer Bedingungen

&& logisches “und”, binär

B1&&B2 genau dann wahr, wenn B1 und B2 wahr sind

|| logisches “oder”, binär

B1||B2 genau dann falsch, wenn B1 und B2 falsch sind

!

logisches “nicht”, unär

!B ist genau dann falsch, wenn B wahr ist

Bedingungen

Wahrheitstafeln

Die Operanden können selbst wieder mit logischen

Operationen konstruierte komplexe Bedingungen sein

Auch deren Auswertung kann in die Wahrheitstafel integriert werden

Mit Wahrheitstafeln lassen sich komplexe Bedingungen auswerten

25

Bedingungen

Besonderheiten der Programmiersprache C:

1. Die Werte wahr und falsch werden durch die ganzen

Zahlen 1 und 0 dargestellt man kann auf Bedingungen alle Operationen für ganze Zahlen anwenden ( (x>5)+(y<1) )

2. Als Operand logischer Operationen wird ein Wert ungleich 0 als wahr, und der Wert 0 als falsch interpretiert jeder Ausdruck kann als Bedingung aufgefasst werden (auch

Variablen und Konstanten) ( 5&&(y<1) )

?:-Operation

3-stellige Operation zur situationsbedingten Ausführung einer

Anweisung: B ? E1 : E2

B erfüllt

E1 nicht erfüllt

E2

28

?:-Operation

3-stellige Operation zur situationsbedingten Ausführung einer

Anweisung

Syntax: B ? E1 : E2

B Bedingung

E1, E2 Ausdrücke

Auswertung: falls B wahr ist, wird E1 ausgewertet (der Wert des Ausdrucks

B ? E1 : E2 ist der Wert von E1) falls B falsch ist, wird E2 ausgewertet (der Wert des Ausdrucks

B ? E1 : E2 ist der Wert von E2)

27

?:-Operation

Beispiel (Ausgabe der größeren von zwei Zahlen)

/* bsp08.c */

#include <stdio.h> main() { int x,y; printf("\nZ a h l e n v e r g l e i c h\n"); printf("\nBitte x eingeben: "); scanf("%i",&x); printf("Bitte y eingeben: "); scanf("%i",&y); printf("\nGroessere Zahl: %i", (x>y) ? x : y);

}

29

Auswertungsreihenfolgen (bisher)

Unäre Operationen binden stärker als arithmetische Operationen

Arithmetische Operationen binden stärker als Vergleichsoperationen

Vergleichsoperationen binden stärker als logische binäre Operationen

Logische binäre Operationen binden stärker als ?:-Operation if-else

Ausführung von (mehreren) Anweisungen, falls eine Bedingung wahr ist: if (Bedingung) {

<Anweisungen>

}

Falls die Bedingung zutrifft, werden die Anweisungen im {}

Block (dem sog. if-Block) ausgeführt

Ist die Bedingung falsch, wird der if - Block wird übersprungen if-else

Bisher:

?:-Operation für situationsabhängige Ausführung einer

Anweisung

Was, wenn man eine ganze Gruppe von Anweisungen situationsabhängig ausführen möchte?

if-else

Ausführung von (mehreren) Anweisungen, falls eine Bedingung wahr ist: if (Bedingung) { <Anweisungen> } erfüllt

Anweisung 1a

Anweisung 2a

Bedingung

if-else

Ausführung von alternativen Anweisungen abhängig vom

Wahrheitsgehalt einer Bedingung if (Bedingung) {

<Anweisungen>

} else {

<andere Anweisungen>

}

Falls die Bedingung zutrifft, werden die Anweisungen im

if – Block ausgeführt, sonst die im else - Block if-else

Beispiel (finden Sie diesen Code gut?)

/* bsp09a.c */

#include <stdio.h> main() { int jahreseinkommen; printf("\nJahreseinkommen eingeben: "); scanf("%i",&jahreseinkommen);

if (jahreseinkommen < 20000) { printf("\n Sie koennen Eigenheimzulage beantragen");

} if (jahreseinkommen >= 20000) { printf("\n Sie koennen keine Eigenheimzulage beantragen");

}

} if-else

Ausführung von alternativen Anweisungen abhängig vom

Wahrheitsgehalt einer Bedingung: if (Bedingung) {

<Anweisungen> } else { <andere Anweisungen> } erfüllt

Anweisung 1a

Bedingung nicht erfüllt

Anweisung 1b

Anweisung 2a

Anweisung 2b

… if-else

Beispiel (besser, da keine überflüssigen Bedingungen / aber schon perfekt?)

/* bsp09b.c */

#include <stdio.h> main() { int jahreseinkommen; printf("\nJahreseinkommen eingeben: "); scanf("%i",&jahreseinkommen);

if (jahreseinkommen < 20000) { printf("\n Sie koennen Eigenheimzulage beantragen");

} else { printf("\n Sie koennen keine Eigenheimzulage beantragen");

}

}

if-else

Beispiel (jetzt auch Behandlung nicht sinnvoller Eingaben)

/* bsp09c.c */

#include <stdio.h> main() { int jahreseinkommen; printf("\nJahreseinkommen eingeben: "); scanf("%i",&jahreseinkommen); if (jahreseinkommen < 0) { printf("\n Bitte positive Zahl eingeben ");

} else { if (jahreseinkommen < 20000) { …} else { …}

}

} if-else

Exkurs scanf:

scanf hat einen Rückgabewert vom Typ int

Rückgabewert gibt an, wievielen Variablen durch die Eingabe erfolgreich ein Wert zugewiesen wurde

Man kann diesen Wert in einer Bedingung überprüfen

Eingabe nur dann gültig, wenn allen Variablen ein Wert

zugewiesen werden konnte if-else

Beispiel (jetzt auch Behandlung ungültiger Eingaben)

/* bsp09d.c */

#include <stdio.h> main() { int jahreseinkommen; printf("\nJahreseinkommen eingeben: "); if (scanf("%i",&jahreseinkommen)==1){ if (jahreseinkommen < 0) { printf("\n Bitte positive Zahl eingeben");

} else { if (jahreseinkommen < 20000) { …} else { …}

}

} else {printf("\n Bitte eine ganze Zahl eingeben");}

}

Fallunterscheidungen

Bisher:

Alternative Ausführung zweier Anweisungsblöcke

Was, wenn man mehr als zwei Alternativen zur Verfügung hat?

Fallunterscheidungen

Verschachtelung von if-else-Blöcken zur Auswahl aus mehreren sich ausschließenden Alternativen: if (Bedingung1) { Anweisungen } else if (Bedingung2) { Anweisungen }

...

else { Anweisungen }

Bedingung1 wird ausgewertet

Falls Bedingung1 wahr ist, wird erster Anweisungsblock ausgeführt

Falls Bedingung1 falsch ist, wird Bedingung2 ausgewertet usw...

Falls alle Bedingungen falsch, wird letzter Anweisungsblock ausgeführt

Fallunterscheidungen

/* bsp10.c */

#include <stdio.h>

#include <ctype.h> main() { char eingabe; int zahl; printf("\nWaehle (I)nteger, (C)har: "); eingabe = getchar(); printf("\nDezimalzahl eingeben: "); scanf("%i",&zahl); switch (toupper(eingabe)) { case 'I': printf("\n%i",zahl); break; case 'C': printf("\n%c",zahl); break; default: printf("\nKeine gültige Auswahl");

}

}

Fallunterscheidungen

Auswahl bezüglich vereinfachter Bedingungen aus mehreren sich ausschließennden Alternativen: switch (Ausdruck) { case Konstante1: Anweisungen

/*entspricht if(Ausdruck == Konstante1){Anweisungen}*/

...

case KonstanteN: Anweisungen default: Anweisungen /*entspricht else{Anweisungen}*/

}

Ausdruck und Konstanten müssen vom Typ int sein

Konstanten müssen alle verschieden sein

default-Zeile ist optional

Mit der Anweisung break; springt man aus dem switch-Block

Ohne break;-Anweisung werden die weiteren Konstanten überprüft

Zeichen

Bekannt:

Der Datentyp für Zeichen ist char

Sein Speicherbedarf beträgt 1 Byte

Darstellung im Speicher:

Zeichen in C-Programmen werden als ganze Zahlen zwischen 0 und 127 (255) dargestellt

Die Zuordnung von Zeichen zu Zahlen gibt die sog. ASCII-

Tabelle an (siehe Kapitel zu Zeichendarstellungen)

45

Zeichen 0 - 127

Zeichen

Zeichen-Funktionen int getchar()

Bei Aufruf wartet das Programm auf eine Benutzer-Eingabe.

Nach Drücken der Eingabetaste wird das erste Zeichen des

Standard-Eingabestroms gelesen und zurückgegeben.

stdio.h-Funktion

Keine Eingabeparameter

Gibt das erste Zeichen des Standard-Eingabestroms zurück

Rückgabetyp: int

48

46

Zeichen

Folgerungen:

Mit Zeichen kann man wie mit ganzen Zahlen rechnen (alle

Operationen für ganze Zahlen verwendbar)

Man kann eine ganze Zahl als Zeichen oder als ganze Zahl auffassen

Für die Interpretation als Zeichen dient der Platzhalter %c in printf- und scanf- Formatanweisungen

47

Zeichen

Zeichen-Funktionen ctype.h

Deklaration verschiedener Zeichenfunktionen (u.a. toupper())

49

Zeichen

Zeichen-Funktionen toupper(char c)

Wandelt Kleinbuchstaben in Großbuchstaben um

Eingabeparameter: ein Zeichen vom Typ char

Rückgabewert: Eingabewert umgewandelt in Großbuchstaben

(läßt Großbuchstaben unverändert, nicht für Umlaute und ß)

Umwandlung in Kleinbuchstaben: tolower()

50

Inhalt

Motivation:

Bisher: Anweisungen werden höchstens einmal ausgeführt

Jetzt: Anweisungen wiederholt ausführen

Beispiele

Wiederholte Eingabe von Daten durch den Benutzer

Mehrere (durch den Benutzer eingegebenen) Zahlen summieren

Euklidischer Algorithmus

Restliche Zeichen des Eingabestroms (zeichenweise) einlesen

2

Vorlesung Informatik I

Universität Augsburg

Wintersemester 2010/2011

Prof. Dr. Robert Lorenz

Lehrprofessur für Informatik

Programmieren in C – Wiederholungen

Inhalt

Motivation:

Bisher: Anweisungen werden höchstens einmal ausgeführt

Jetzt: Anweisungen wiederholt ausführen

Anweisungen werden wiederholt, solange eine Bedingung gilt

1

3

Inhalt

Anweisungen wiederholt ausführen erfüllt

Anweisung 1

Anweisung n

Bedingung nicht erfüllt

Zählschleifen

Anzahl der Wiederholungen steht fest int i=...,n=...; i < n erfüllt

Anweisung 1

… i=i+1 nicht erfüllt

4

6

Inhalt

Zählschleifen

Bedingungs-Schleifen

Aussetzen/Fortsetzen von Schleifen

Anweisungsblöcke verschachteln

Eingabestrom leeren

Zählschleifen

Anzahl der Wiederholungen steht fest int i,n=...; for(i=0;i<n;i=i+1) {

<Anweisungen>

}

Anweisungen werden (hier) n-mal wiederholt

i heißt Zählvariable zählt die Anzahl der Wiederholungen

(i<n) heißt Schleifenbedingung von ihrem Wert hängt Ausführung der Anweisungen ab

7

5

Zählschleifen

Allgemeine Form: for(A;B;C) {

<Anweisungen>

}

A legt Anfangswert einer Zählvariable fest

(erste ausgeführte Anweisung, Anfangswert ist beliebig)

B ist eine Bedingung, die die Zählvariable erfüllen muss, damit

Anweisungen im for-Block ausgeführt werden

C verändert Wert der Zählvariablen

(wird immer nach den Anweisungen im for-Block ausgeführt)

8

Zählschleifen

Beispiel: Berechnung der Fakultät n! = 1 * 2 * … * n

/* bsp12.c */

#include <stdio.h> main() { int i,n,fak=1; printf("Natuerliche Zahl n eingeben: "); scanf("%i",&n); for(i=1; i<=n; i++) { fak=fak*i;

} printf("%i! = %i",n,fak);

}

10

Zählschleifen

Allgemeine Form: for(A;B;C) {

<Anweisungen>

}

Achtung vor Unendlichschleifen: bei schlechter Festlegung ist die Bedingung nach jeder

Wiederholung wieder erfüllt:

Anzahl der Wiederholungen unbegrenzt

Schleife terminiert nicht

Beispiel: for(i=0;i!=9;i=i+2) { <Anweisungen> }

9

Zählschleifen

Beispiel: Berechnung der Fakultät n! = 1 * 2 * … * n

(1)

(2)

(3) for(i=1; i<=n; i++) { fak=fak*i;

}

(1)

(2)

(3)

(1)

(2)

(3)

(1)

Werte verfolgen per Tabelle:

Zeile

2

3

2

2

3

1

1 i

-

*

*

2

2

1

1

2

1

1 fak

1

2

2

2

2

2

2

2 n

2

-

-

-

1

0

1

-

(i<=n)

-

11

Zählschleifen

Beispiel: Summen-/Mittelwertbildung – Benutzer gibt Anzahl der

Summanden vorher an

/* bsp11.c */

#include <stdio.h> main() { int i,anzahl; double zahl,summe=0.0; printf("Wieviel Werte wollen Sie eingeben: "); scanf("%i",&anzahl); for(i=0; i<anzahl; i++) { printf("Bitte %i. Zahl eingeben : ",i+1); scanf("%lf",&zahl); summe=summe+zahl;

} printf("Summe der Zahlen = %f",summe); printf("\nMittelwert der Zahlen = %f",summe/anzahl);

}

12

Bedingungs-Schleifen

Bisher:

Anzahl der Wiederholungen steht von vornherein fest

Jetzt:

Anzahl der Wiederholungen steht nicht von vornherein fest

Beispiel:

Summenberechnung ohne vorherige Eingabe der Anzahl der

Zahlen zu summierenden Zahlen: viel benutzerfreundlicher!

Abbruch des Programms durch besondere Eingabe erlauben

14

Zählschleifen

Beispiel: Summen-/Mittelwertbildung – Benutzer gibt Anzahl der

Summanden vorher an

Wieviele Werte wollen Sie eingeben: 2

Bitte 1. Zahl eingeben: 8

Bitte 2. Zahl eingeben: 13

Summe der Zahlen: 21

Mittelwert der Zahlen: 10.5000000

13

Bedingungs-Schleifen

Anzahl der Wiederholungen steht nicht fest, Bedingung vor erster

Ausführung überprüft:

Bedingung erfüllt

Anweisung 1

… nicht erfüllt

Anweisung n

15

Bedingungs-Schleifen

Anzahl der Wiederholungen steht nicht fest, Bedingung vor erster

Ausführung überprüft: while (Bedingung) {

<Anweisungen>

}

Anweisungen werden solange wiederholt wie die Bedingung erfüllt ist:

Anweisungen sollten dazu führen, dass die Bedingung nach endlich vielen Wiederholungen nicht mehr zutrifft (sonst hat man eine Unendlichschleife programmiert)

16

Bedingungs-Schleifen

Beispiel: Flexibler Abbruch der Eingabe von Zahlen

/* bsp13a.c */

#include <stdio.h> main() { int anzahl=0; double zahl =1 ,summe=0.0; printf("Beenden der Eingabe mit '0' "); while (zahl != 0) { printf("Bitte %i. Zahl eingeben : ",anzahl+1); scanf("%lf",&zahl); summe=summe+zahl; anzahl++;

}

18

Bedingungs-Schleifen

Anzahl der Wiederholungen steht nicht fest, Bedingung vor erster

Ausführung überprüft: while (Bedingung) {

<Anweisungen>

}

Wichtig:

Bedingung wird auch vor der ersten Ausführung der

Anweisungen überprüft:

Variablen der Bedingung vor der Schleife initialisieren!

Vor dem ersten Durchlauf sollte die Bedingung wahr sein

17

Bedingungs-Schleifen

for-Schleife durch while-Schleife ausdrücken: for(A;B;C) {

<Anweisungen>

} entspricht

}

A; while (B) {

<Anweisungen>

C;

19

Bedingungs-Schleifen

Anzahl der Wiederholungen steht nicht fest, Bedingung nach erster Ausführung überprüft:

Bedingung erfüllt

Anweisung 1

… nicht erfüllt

Anweisung n

20

Bedingungs-Schleifen

Beispiel: Flexibler Abbruch der Eingabe von Zahlen

/* bsp13b.c */

#include <stdio.h> main() { int anzahl=0; double zahl ,summe=0.0; printf("Beenden der Eingabe mit '0' "); do { printf("Bitte %i. Zahl eingeben : ",anzahl+1); anzahl++;

} while (zahl != 0);

… scanf("%lf",&zahl); summe=summe+zahl;

22

Bedingungs-Schleifen

Anzahl der Wiederholungen steht nicht fest, Bedingung nach erster Ausführung überprüft: do {

<Anweisungen>

} while (Bedingung);

Anweisungen werden solange wiederholt wie die Bedingung erfüllt ist

Bedingung wird erst nach der ersten Ausführung der

Anweisungen überprüft:

Anweisungen werden auf jeden Fall einmal ausgeführt!

21

Bedingungs-Schleifen

Abbruch von Unendlichschleifen mit break: while(1) {

...

if (Bedingung) { break;}

...

}

Durch Ausführung von break wird die Schleife verlassen

23

Bedingungs-Schleifen

Beispiel: Flexibler Abbruch der Eingabe von Zahlen

/* bsp13c.c */

#include <stdio.h> main() { int anzahl=0; double zahl ,summe=0.0; printf("Beenden der Eingabe mit '0' "); while(1) { printf("Bitte %i. Zahl eingeben : ",anzahl+1); scanf("%lf",&zahl); if (zahl==0){break;} summe=summe+zahl; anzahl++;

}

24

Bedingungs-Schleifen

Beispiel: Fortsetzung von vorn bei ungültiger Eingabe

/* bsp13d.c */

#include <stdio.h> main() { int anzahl=0; double zahl ,summe=0.0; printf("Beenden der Eingabe mit '0' "); while(1) { printf("Bitte %i. Zahl eingeben : ",anzahl+1); if (scanf("%lf",&zahl)==0){ printf("Bitte Zahl eingeben"); continue;

} if (zahl==0){break;} summe=summe+zahl; anzahl++;

}

… 26

Bedingungs-Schleifen

Fortsetzung von Unendlichschleifen mit continue: while(Bedingung1) {

...

if (Bedingung2) { continue;}

...

}

Durch Ausführung von continue werden nachfolgende

Anweisungen übersprungen und mit einem neuen

Schleifendurchlauf begonnen

Beispiel: Neue Eingabe nach ungültiger Eingabe

25

Verschachtelung von Blöcken

Wir kennen schon verschiedene sog. Anweisungsblöcke:

if- else-,for-,while-,do-Block

Diese Blöcke können in beliebiger Tiefe ineinander verschachtelt werden in der Form:

[Anfang Block 1] {

[Anfang Block 2] {

}[Ende Block 2]

}[Ende Block 1]

27

Verschachtelung von Blöcken

Wir kennen schon verschiedene sog. Anweisungsblöcke:

if- else-,for-,while-,do-Block

Nicht möglich ist es, Blöcke ineinander zu verschränken:

[Anfang Block 1] {

[Anfang Block 2] {

}[Ende Block 1]

}[Ende Block 2]

28

Eingabestrom leeren

Es existiert standardmäßig keine vordefinierte Funktion zum

Leeren restlicher Zeichen aus dem Eingabestrom!!!

(insbesondere: fflush/rewind haben nicht diese Funktionalität)

Wir müssen uns das selbst überlegen

Grundidee:

Jede Eingabe wird mit \n abgeschlossen und enthält sonst kein

\n-Zeichen:

Hole nach jede Eingabe restliche Zeichen mit getchar() aus dem Eingabestrom bis einschließlich dem \n-Zeichen

30

Verschachtelung von Blöcken

Wir kennen schon verschiedene sog. Anweisungsblöcke:

if- else-,for-,while-,do-Block

Variablen-Deklarationen und break-/continue-Anweisungen betreffen nur den Block, in dem diese stehen, und weiter innen liegende Blöcke, aber nicht umfassende Blöcke

29

Eingabestrom leeren

Hole nach jede Eingabe restliche Zeichen mit getchar() aus dem Eingabestrom bis einschließlich dem \n-Zeichen char c = getchar(); while (c!=‘\n‘) { c = getchar();

} oder kürzer (Anweisungen zusammenfassen): while (getchar()!=‘\n‘) { }

31

Eingabestrom leeren

Beispiel:

/* bsp13e.c */

#include <stdio.h> main() { int anzahl=0; double zahl ,summe=0.0; printf("Beenden der Eingabe mit '0' "); while(1) { printf("Bitte %i. Zahl eingeben : ",anzahl+1); if (scanf("%lf",&zahl)==0){ while (getchar()!='\n') { } printf("Bitte Zahl eingeben"); continue;

} if (zahl==0){break;} summe=summe+zahl; anzahl++; while (getchar()!='\n') { }

}...

32

advertisement

Was this manual useful for you? Yes No
Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Related manuals

advertisement