advertisement
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]
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)|a ∈ A} 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
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Related manuals
advertisement