Skript-Info1-WS1011, Teil1 4x1
Inhalt
Vorstellung Robert Lorenz
Vorlesung Informatik I
Angebot der Uni + Ihr Beitrag
Universität Augsburg
Vorlesungs- und Übungsbetrieb, Prüfungsmodalitäten, Klausuren
Wintersemester 2010/2011
Software, Literatur/Materialien
Prof. Dr. Robert Lorenz
Was ist Informatik
Lehrprofessur für Informatik
Inhalt der Vorlesung Informatik 1
1. Organisatorisches und Motivation
1
2
Vorstellung Robert Lorenz
Vorstellung Robert Lorenz
Kurzer Berufsweg
Lehrprofessur für Informatik
Einführung in die praktische Informatik:
geb. 1969
Informatik I (WS): Rechnerarchitektur, Algorithmus-Begriff,
Programmieren in C
Informatik II (SS): Objektorientierter Softwareentwurf mit UML,
Programmieren in Java
Programmierkurse (C: WS, Java: SS)
Studium der Mathematik in Eichstätt (1990 – 1996)
Promotion in Mathematik 2001 (Eichstätt)
Habilitation in Informatik 2006 (Eichstätt)
Finanziert aus Studiengebühren (Sie bestimmen mit!)
Laufzeit: 2+2+2 Jahre
seit 1.7.2008: Lehrprofessur für Informatik
(finanziert aus Studiengebühren)
Einheitliche Betreuung der ersten zwei Semester
Verbesserung der Programmierausbildung
3
4
Vorstellung Robert Lorenz
Das Angebot des Lehrstuhls
Forschungsinteressen:
Vorlesungen
Design, Simulation, Verifikation, Synthese nebenläufiger
Systeme:
dienen der Vermittlung von abstrakten Konzepten, Wissen,
Problemlösungsstrategien
dienen der Anregung und Orientierung
Geschäftsprozesse
(Web-)Services
Kommunikationsnetzwerke
Verteilte Steuerungen (eingebettete Systeme)
haben keinen Anspruch auf Vollständigkeit
Mit theoretisch fundierten Methoden praktisch relevante
Probleme lösen
sollten durch selbstständiges Erarbeiten von Inhalten ergänzt
werden
Einheit von Lehre und Forschung
5
6
Das Angebot des Lehrstuhls
Das Angebot des Lehrstuhls
Übungen
Service
dienen der konkreten Anwendung der abstrakten Konzepte
Folien und Vorlesungsmitschrift online
fördern dadurch deren Verständnis
Beispielprogramme zur Vorlesung online
verschiedene Übungsangebote:
Musterlösungen zu allen Aufgaben online
http://www.informatik.uni-augsburg.de/lehrstuehle/inf/
Übungsblätter als „Hausaufgaben“ (Korrektur, Musterlösungen)
Übungsgruppen (Vorrechnen von Lösungen)
Betreutes Programmieren
Betreute Themen im Studentenforum
http://studentenforum.uni-augsburg.de/
7
8
Das müssen Sie leisten
Das müssen Sie leisten
Studium selbstständig organisieren
Eigenstudium (8-10 Stunden/Woche)
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
Ü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
9
10
Verwaltungssysteme
Verwaltungssysteme
LectureReg: Verwaltungssystem der Lehrstühle
https://peaches.informatik.uni-augsburg.de/lecturereg/
STUDIS: Verwaltungssystem des Prüfungsamts
https://www.studis.uni-augsburg.de/studisaugsburg/fai/
Anmeldung zu Übungsgruppen (18.10. - 22.10.)
Anmeldung zu Klausuren (1.12. - 10.12. + 7.1. - 17.1.)
Abfrage von Ergebnissen
Anmeldung zu Prüfungsmodulen (7.1. - 17.1.)
Teilnahme an den Klausuren ohne STUDIS-Anmeldung ist
NICHT möglich
Anmeldefristen: Lehrstuhl-Webpage, Rundmails, Vorlesung
Anmeldefristen: Lehrstuhl-Webpage, Rundmails, Vorlesung
Der Lehrstuhl ist nicht für Studis zuständig
 Bei Problemen: Prüfungsamt!
11
12
Vorlesungsbetrieb
Übungsbetrieb
Zwei Vorlesungen pro Woche im Hörsaal 1 (HS1)
Montag 10:00 – 11:30
Mittwoch 12:15 – 13:45
Übungsblätter
Folien zur Vorlesung
http://www.informatik.uni-augsburg.de/lehrstuehle/inf/
Bearbeitung (nur) in Teams von 2 bis 3 Studenten einer
Übungsgruppe
1 Übungsblatt/Woche, Ausgabe Montags (Start 25.10.) unter
http://www.informatik.uni-augsburg.de/lehrstuehle/inf/
auch ausgedruckt (4 Folien/Seite)
Bearbeitungszeit 1 Woche
Jede Übungsaufgabe bringt 1 Übungspunkt
Übungspunkte benötigt man für die Klausurzulassung
13
14
Übungsbetrieb…
Übungsbetrieb
Übungsblätter
Übungsgruppen
Abgabe…
Geleitet durch Tutor (Student aus höherem Semester)
…bis Montag, 12 Uhr:
…per Mail an den Tutor der eigenen Übungsgruppe
…und schriftlich in Vorlesungs-Briefkasten im Informatikgebäude
Besprechen und Vorrechnen der Übungsblätter (nach deren
Abgabe und Korrektur)
Rückgabe der korrigierten Übungsblätter
Angabe von…
Start: 25.10. (Kennenlernen, Teambildung, Fragen)
…Name+Matrikelnummer aller Teammitglieder
…und Nummer der Übungsgruppe
Vorrechnen einer Aufgabe bringt einen Übungspunkt
Übungspunkte benötigt man für die Klausurzulassung
15
16
Übungsbetrieb
Übungsbetrieb
Übungsgruppen
Übungsgruppen
13 Gruppen zu maximal 20-25 Teilnehmern
Anmeldung:
Automatische Verteilung auf die Gruppen durch Lehrstuhl
 Vorregistrierung und Angabe von Prioitäten notwendig
1. Unter https://peaches.informatik.uni-augsburg.de/lecturereg/
in Vorregistrierungs-, Lehramts- oder Wiederholergruppe
(Anmeldefrist bis 22.10.2010, Mitternacht)
Wiederholergruppe (zur Verwaltung, für Rundmails):
2. Vorregistrierungsgruppe: Zusätzlich Angabe von Prioritäten unter
http://141.78.96.4/PrioMan/
(Anmeldefrist bis 22.10.2010, Mitternacht)
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
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)
17
18
Übungsbetrieb
Übungsbetrieb
Betreutes Üben/Programmieren
Globalübung
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.
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.
Zusatzaufgabe bringt einen Übungspunkt
Übungspunkte benötigt man für die Klausurzulassung
19
20
Übungsbetrieb
Übungsbetrieb
Verbreitung von Lösungen
Rechnerräume
Übungsleistungen sind Teil der Prüfungsleistung
1001 N (neues Gebäude)
1002 N (neues Gebäude)
 Verbreitung von Lösungen nur eingeschränkt erlaubt:
1005 N (neues Gebäude)
innerhalb des Übungsblatt-Teams
nach Besprechung in letzter Übungsgruppe
134 T (Physikgebäude)
 Nach der Besprechung in letzter Übungsgruppe:
Wir unterstützen Veröffentlichung kommentierter Lösungen
Wir stellen kommentierte Musterlösungen online
21
22
Prüfungsmodalitäten
Prüfungsmodalitäten
Für ALLE gilt:
Für ALLE gilt:
Am Semesterende: 1. Klausur
Vor Veranstaltungsbeginn nächstes Semester: 2. Klausur
Man soll zielgerichtet studieren, d.h. jede
Prüfungsmöglichkeit (jedes Klausurangebot) wahrnehmen
Anmeldung notwendig unter Studis und LectureReg
Achtung: Studis-Anmeldung führt zur Bewertung auch bei
Nicht-Teilnahme (als nicht bestanden)
Nicht zielgerichtet zu studieren hat Nachteile
Je nach Studiengang unterscheiden sich
Anmelde-Modalitäten
Anzahl der Prüfungsversuche
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
23
24
Prüfungsmodalitäten
Prüfungsmodalitäten
Für Bsc. Informatik/Informatik&Multimedia ab PO 2008 gilt:
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, …
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)
Damit hat man faktisch:
3 Prüfungsversuche in Informatik I
2 Prüfungsversuche in Informatik II
5 Prüfungsversuche im Programmierkurs
25
26
Prüfungsmodalitäten
Prüfungsmodalitäten
Für Bsc. Wirtschaftsinformatik gilt:
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
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
Programmierkurs
Für alle anderen gilt:
Teilnehmer:
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!
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
29
30
Programmierkurs
Programmierkurs
Termine und Modalitäten:
1. Prüfung:
5 Tagesprüfungen jeweils zum Tagesthema
Integriert in Veranstaltungsblock
jeweils 60-90-minütige Programmieraufgabe
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
2. Prüfung:
Vor Veranstaltungsbeginn nächstes Semester
Eine 5-6-stündige Prüfung mit 5 Aufgaben
Ohne Veranstaltungsblock
32
Klausur
Klausur
Zulassung (gilt für alle trotz unterschiedlicher POs!)
Zulassung
Mindestens 20 Übungspunkte aus…
Mindestens 1 mal Vorrechnen in der Übungsgruppe
…Bearbeitung von Übungsblättern (ca. 11-12 Stück)
1 Punkt für jede richtig bearbeitete Aufgabe
4 Aufgaben pro Übungsblatt
Anmeldung zur Klausur in LectureReg und Studis
…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
34
Klausur
Klausur
Bewertung
Alte Zulassungen
Für je 5 Punkte über der Zulassungsgrenze (20 Punkte) gibt
es einen Bonuspunkt
 es sind maximal ca. 10-11 Bonuspunkte erreichbar
Zulassungen/Bonuspunkte seit WS08/09 bleiben erhalten
Zulassungen vor WS08/09 zählen nicht
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
36
Klausur
Klausur
Termine
Vorbereitung
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
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
2. Klausur: 1-2 Wochen vor Folgesemester, 120 Minuten
37
38
Klausur
Klausur
Vorbereitung
Vorbereitung
Lernen Sie nicht auswendig, sondern verstehen Sie den Stoff:
Wiederholen Sie alte Übungsaufgaben ohne Benutzung der
Lösung
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
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.
Arbeiten Sie den roten Faden heraus
Wenn ihre Lösung nicht mit der Musterlösung übereinstimmt, überprüfen
Sie, ob die Musterlösung falsch oder alternativ ist
Erstellen Sie sich eigene Zusammenfassungen in unterschiedlicher
Detailliertheit (Abstraktionsebene)
Verschaffen Sie sich andere Perspektiven auf die Inhalte durch Bücher
39
Üben Sie „schriftliches“ Programmieren, d.h. üben Sie,
Programme auf einem Blatt Papier aufzuschreiben
40
Software
Software
Programmiersprache C:
Entwicklungsumgebungen:
Editor-Programme zum bequemeren Programme-Schreiben
GNU Compiler Collection
Verfügbar unter Windows, Linux und Mac
Dürfen Sie nach Ihrer Wahl verwenden
Aber: der Lehrstuhl unterstützt kein bestimmtes Programm
Installationshilfe: Tutoren, Studentenforum
Frei verfügbare Programme:
Zur Übersetzung/Ausführung von C-Programmen
Dev-C++
CodeBlocks
...
In den Rechnerräumen zur freien Verwendung installiert
41
42
Literatur/Materialien
Literatur/Materialien
Programmiersprache C
Programmiersprache C
C Programmieren von Anfang an: H. Erlenkötter, rororo,
2008
Programmieren in C: B. W. Kernighan, D. M. Ritchie, A.-T.
Schreiner, und E. Janich, Hanser, 1990
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)
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!
43
44
Literatur/Materialien
Literatur/Materialien
Programmiersprache C
Theoretische Inhalte
Problem - Algorithmus - Programm: R. Richter, P. Sander
und W. Stucky, Teubner, 1993
Online-Dokumentationen zum selbst recherchieren
C Standard Bibliothek:
http://www2.hs-fulda.de/~klingebiel/c-stdlib/
dient der Vorlesung als Vorlage
wird leider nicht mehr verkauft GNU C Library:
http://www.gnu.org/software/libc/manual/html_mono/libc.html
45
Literatur/Materialien
46
Literatur/Materialien
Grundsätzliches
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
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
48
Literatur/Materialien
Bei Fragen
Über den Tellerrand geschaut
http://studentenforum.uni-augsburg.de/
http://www.informatik.uni-augsburg.de/lehrstuehle/inf/
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)
[email protected]
[email protected]
[email protected]
Sprechzeiten
Mittwoch, 10:00 – 11:00, Raum 1023 N (neues Gebäude)
Direkt nach der Vorlesung
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?
50
Was ist Informatik?
Wissenschaft der Verarbeitung, Speicherung und Übertragung
von Information
Namensbestandteile: Informatik = Information + Mathematik
Was ist nun Information?
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“
51
52
Was ist Informatik?
Was ist Informatik?
Wissenschaft der Verarbeitung, Speicherung und Übertragung
von Information
Wissenschaft der Verarbeitung, Speicherung und Übertragung
von Information
Information
Daten
einer Nachricht durch Interpretation zugeordnete Bedeutung
Paare aus Nachricht und zugeordneter Information
ebenfalls vom Medium abstrahiert
 Die Semantik gibt die Bedeutung von Symbolfolgen an
Beispiel: Nachricht: „Lorenz“, Semantik: Nachname
53
Was ist Informatik?
54
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ß?
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
Informatik ist eine konstruktive Wissenschaft
 Interessieren Sie sich für Computerprogramme,
Kommunikationsnetzwerke, das Internet?
 Gestalten Sie gern Neues und sind kreativ?
(Systemnahe Informatik, Kommunikationssysteme,… )
Angewandte Informatik
(Wirtschaftsinformatik, Geoinformatik,…)
 Definition, Beziehungen: eigene Recherche, z.B. Wikipedia,
Gesellschaft für Informatik (GI), … (Übungsaufgabe)
55
56
Was ist Informatik?
Was ist Informatik?
Aufklärung von Klischees
Aufklärung von Klischees
Informatiker entwerfen Anwendungen
(Anwendungen nutzen ist Sache der Anwender)
Nachhaltige Ideen in der Informatik sind theoretisch fundiert!
(Schnelle ad-hoc-Lösungen haben langfristige
Folgeprobleme)
Informatik ist die Kunst, sich das Programmieren zu
erleichtern
(Informatik : Programmieren = Architektur : Bau)
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)
Informatiker arbeiten zusammen mit anderen Menschen
(in Teams, in Projekten, mit Kunden, als Führungskräfte, …)
Informatik ist mehr als PC+Internet
(98% der Chipproduktion für eingebettete Systeme)
57
58
Das lernen Sie an der Uni…
Das lernen Sie in Informatik 1
…und brauchen Sie in Wissenschaft und Wirtschaft:
Inhalt:
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
Wie man Probleme der Informationsspeicherung und
Informationsverarbeitung mit dem Rechner löst:
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
Problem
Algorithmus
Programm
60
Das lernen Sie in Informatik 1
Praktisches Problem
Das lernen Sie in Informatik 1
Programmieren ist also nur ein Teil des Vorlesungsinhalts
Informationssuche
Mustererkennung
…
Andere wichtige Fertigkeiten: Modellbildung, Abstraktion,
formale Grundlagen
Abstraktion
Mathematisches Modell
Kreativer Schritt
Algorithmus
Programmierung
Programm
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
62
Abstraktion
Abstraktion
Betrachtung eines Problems ohne Kenntnis bestimmter Details
auf verschiedenen Ebenen
(aus verschiedenen Perspektiven)
 Arbeitsteilung Elektroniker / Hardware-Designer /
Programmierer / Modellierer / …
Welche Details sind „wesentlich“, welche „unwichtig“? 
abhängig von der Perspektive!
 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
63
64
Inhalt
Inhalt
Theorie:
Programmieren:
Rechnerarchitektur
Variablen und Konstanten
Zahlen- und Zeichendarstellung
Kontrollstrukturen (Fallunterscheidung, Wiederholung)
Spezifikation von Problemen
Funktionen
Darstellung von Algorithmen
Präprozessor und modularisierte Implementierung größerer Programme
Eigenschaften von Algorithmen
Zeichenketten und Felder
Korrektheit von Algorithmen
Zeiger
Effizienz von Algorithmen
Dynamische Speicherverwaltung
Datenstrukturen
Komplexe Datentypen
65
66
Zusammenfassung
Alle haben die Chance mitzukommen
(wir fangen bei „0“ an, kein Vorwissen nötig)
Vorlesung Informatik I
Ohne Mathematik geht nichts
Universität Augsburg
Wintersemester 2010/2011
Spaß am Computer/Programmieren hilfreich
Prof. Dr. Robert Lorenz
Wer sich engagiert, schafft auch den Schein
Lehrprofessur für Informatik
Ohne Üben kann man Programmieren nicht erlernen
67
Programmieren in C – Erste Schritte
1
Inhalt
Kommandozeile
Im einfachsten Fall erfolgen Aufruf und Ausgabe von Programmen
per Kommandozeile
Die Kommandozeile
Andere Bezeichnungen:
Befehlszeile, command-line interface - CLI, Konsole, Terminal
Ein einfaches Programm
Programm erstellen
Die Kommandozeile ist Eingabebereich für die Steuerung von
Software, typischerweise (aber nicht zwingend) im Textmodus
Programm aufrufen
Kommandos werden als Zeichenfolgen per Tastatur eingegeben
Die Funktion printf
2
Kommandozeile
3
Kommandozeile
Kommandos:
Programmaufrufe
Vordefinierte Kommandos zur Navigation im Dateisystem (abhängig vom
Betriebssystem, Selbststudium)
Steuerung der Ausführung über sog. Kommandozeilenparameter des
Programms (Syntax: Selbststudium)
Vordefinierte Kommandos zur Steuerung des Betriebssystems
(weiterführend, benötigen wir nicht)
Keine interaktive Befragung des Benutzers durch das Programm
Automatisiertes Abarbeiten mehrerer Kommandos:
Name eines ausführbaren Programms (.exe-Endung)
Stapelverarbeitungs-Dateien (Batch-Dateien, weiterführend, benötigen wir
nicht)
Kommando ausführen
Kommando eintippen und Eingabetaste drücken
Bei Programmen: vorher ins Programmverzeichnis wechseln
4
5
Ein einfaches Programm
Ein einfaches Programm
Ein Programm ist ein Text bestehend aus Anweisungen
Ein Programm ist ein Text bestehend aus Anweisungen
In der einfachsten Form: Sequenz von Anweisungen (ähnlich
einer Bedienungsanleitung):
Anweisungen müssen „Computerverständlich“ sein
direkt vom Computer ausführbar = Maschinensprache
übersetzbar in Maschinensprache = höhere Programmiersprache (für
Anweisung 1
den Menschen verständlich!)
Definition von Programmiersprachen = für den Computer
verständliche Sprachen
Anweisung 2
…
Nicht jeder Text ist als Programm interpretierbar
Anweisung n
Computer = Maschine, die man mit Programmen steuert
6
Ein einfaches Programm
7
Ein einfaches Programm
Ein Programm ist ein Text bestehend aus Anweisungen
/* 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");
}
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
9
Ein einfaches Programm
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
Dies ist unser erstes C-Programm.
Es illustriert die Benutzung der Funktion 'printf'.
_
Ausgabe erfolgt in der Kommandozeile
(Grafische Programme: nächstes Semester)
Man beachtet Formatierungsregeln aus Gründen der
Fehlervermeidung, Lesbarkeit, Wartbarkeit und Veränderbarkeit
10
11
Ein einfaches Programm
Ein einfaches Programm
(1) Kommentar, auch mehrzeilig:
optional
erhöht Verständlichkeit
wird bei der Programmausführung ignoriert
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(2) Fügt Bibliotheksquellcode (Sammlung vordefinierter
Funktionen) aus der Datei stdio.h ein
Macht die printf-Funktion benutzbar
/* bsp01.c */
#include <stdio.h>
main(){
printf("\nDies ist unser erstes C-Programm.\n");
printf("\nEs illustriert die Benutzung ");
printf(" der Funktion 'printf'.\n");
}
(1)
(2)
(3)
(4)
(5)
(6)
(7)
12
/* bsp01.c */
#include <stdio.h>
main(){
printf("\nDies ist unser erstes C-Programm.\n");
printf("\nEs illustriert die Benutzung ");
printf(" der Funktion 'printf'.\n");
}
13
Ein einfaches Programm
Ein einfaches Programm
(3) Hauptfunktion main(){...}
Ausführung beginnt mit Aufruf dieser Funktion
()
main hat keine Eingabeparameter
{...}
Anweisungsblock mit Anweisungen von main
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(4),(5),(6) Aufruf der Funktion printf(format)
hat Zeichenfolge format als Eingabeparameter
dient formatierter Ausgabe der Zeichenfolge
"..."
definiert eine Zeichenkette
\n
Zeichenfolge für neue Zeile (n=new line)
;
schließt Anweisungen ab
/* bsp01.c */
#include <stdio.h>
main(){
printf("\nDies ist unser erstes C-Programm.\n");
printf("\nEs illustriert die Benutzung ");
printf(" der Funktion 'printf'.\n");
}
(1)
(2)
(3)
(4)
(5)
(6)
(7)
/* bsp01.c */
#include <stdio.h>
main(){
printf("\nDies ist unser erstes C-Programm.\n");
printf("\nEs illustriert die Benutzung ");
printf(" der Funktion 'printf'.\n");
}
14
Programm erstellen
15
Programm erstellen
Zusammenfassung
Entwicklungsumgebungen
Ein Programm ist eine Textdatei, der Programmtext heißt
Quellcode
Eine Entwicklungsumgebung ist ein Texteditor der durch einige
zusätzliche Funktionalitäten das Erstellen von Programmen
vereinfacht:
Quellcode lässt sich mit einfachen Texteditoren erstellen
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, …), …
C-Programm-Dateien müssen die Endung .c haben
C-Quellcode muss erst noch in Maschinensprache
(= direkt ausführbarer Code) übersetzt werden
Das Benutzen von Entwicklungsumgebungen ist erlaubt
16
17
Programm übersetzen und ausführen
Programm übersetzen und ausführen
später mehr
Quellcode
Quellcode
Präprozessor
Compiler
Übersetzung
Bibliotheken
Übersetzung
Linker
ausführbarer Code
ausführbarer Code
18
Programm übersetzen und ausführen
Vom Quellcode zum Programm per Kommandozeile
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);
}
gcc –o prg01 bsp01.c
gcc
-o
prg01
bsp01.c
19
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
prg01
prg01
Aufruf und Ausführung des Programms
20
21
printf
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)
Ausgabe:
Wir
1 +
1 *
1 %
rechnen:
1 = 2
1 = 1
1 = 0
/* 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);
}
22
printf
23
printf
Grundrechenarten
+
addieren
*
multiplizieren
%
modulo=Divisionsrest
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);
}
/* 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
25
Inhalt
Geschichte der Informatik
Vorlesung Informatik I
Von-Neumann-Rechner
Hardware
Universität Augsburg
Software zur Bedienung eines Rechners
Wintersemester 2010/2011
Prof. Dr. Robert Lorenz
Lehrprofessur für Informatik
Rechnerarchitektur und -organisation
1
Inhalt
2
Geschichte der Informatik
Wir machen uns klar:
Das älteste Konzept der Informatik ist der Algorithmus
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…
exakte Formulierung …
(Mathematisches Modell, z.B. Programmiersprache)
mechanisch ausführbarer Abläufe…
Wir lernen jetzt:
für beliebig viele Instanzen
Grund-Aufbau und -Funktionsweise heutiger Rechner ohne
technische Details
 abstrakte Sicht
 Nur soviel Details, dass wir glauben, dass es funktioniert
3
4
Geschichte der Informatik
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
a = ggT(a,b)
Ausgabe:
Eingabe:
a,b in Ν
(a,b = Variablen = Platzhalter für
konkrete Zahlen)
Methode:
repeat
r ← a mod b
a ← b
b ← r
until r = 0
a = ggT(a,b)
(Wiederholung bis Bedingung wahr)
(Wertzuweisung)
(Wertzuweisung)
(Wertzuweisung)
(Bedingung)
(Ausgabe)
Ausgabe:
Jedes konkrete für a,b eingesetzte Zahlenpaar ist eine Instanz
EUKLIDischer Algorithmus (3. Jahrhundert vor Chr.)
5
Geschichte der Informatik
6
Geschichte der Informatik
Wichtige Entwicklungen zu
Entwicklung von Rechenmaschinen im 20. Jhd.:
- 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
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
Von-Neumann-Rechner
(nach Burks, Goldstine und von Neumann, 1946)
Fazit:
Theoretisches, aber mechanisch umsetzbares, Konzept des
Aufbaus/der Konstruktion eines Rechners
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)
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)
9
Von-Neumann-Rechner
10
Von-Neumann-Rechner
(nach Burks, Goldstine und von Neumann, 1946)
Speicherwerk: Speicherung von Daten und Programmen
Rechenwerk: Ausführung arithmetischer/logischer Operationen
Steuerwerk
Rechenwerk
Eingabewerk
Speicherwerk
Steuerwerk: Steuerung des Programmablaufs
Eingabewerk: Eingabe von Programmen / Daten in den Speicher
CPU
Ausgabewerk: Ausgabe von Ergebnissen vom Speicher
Ausgabe
CPU = Central Processing Unit = Zentraleinheit
: Datenfluß
: Steuerfluß
11
12
Speicherwerk
Speicherwerk
Speicherung von Daten und Programmen
Unterteilt in gleich große Einheiten = Speicherzellen
 Für jedes Problem wird Bearbeitungsvorschrift (Programm)
„von außen“ eingegeben und im Speicher abgelegt.
Speicherzellen mittels eindeutiger Zahlen, sogenannter Adressen,
durchnummeriert.
 Struktur unabhängig von den zu bearbeitenden Problemen
0
1
2
Programme und Daten im selben Speicher
…
…
Direkter Zugriff auf Speicherzellen (Random Access)
13
Speicherwerk
Speicherwerk
Speichereinheiten:
Unterteilt in gleich große Einheiten = Speicherzellen
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
M
G
T
P
E
=
=
=
=
=
=
14
1024 = 210 ≅ 103 (k = Kilo)
10242 = 220 ≅ 106 (M = Mega)
10243 = 230 ≅ 109 (G = Giga)
10244 = 240 ≅ 1012 (T = Tera)
10245 = 250 ≅ 1015 (P = Peta)
10246 = 260 ≅ 1018 (E = Exa)
15
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
Speicherwerk
Unterteilt in gleich große Einheiten = Speicherzellen
In der Praxis:
Kriterien:
Schnelligkeit, Kapazität, Kosten, Verlustfreiheit
Wie werden Programme gespeichert?
Aufeinanderfolgende Befehle in aufeinanderfolgenden
Speicherzellen
Probleme:
Große Kapazität, geringe Kosten = Langsamer Zugriff
Schneller Zugriff = hohe Kosten, kleine Kapazität
Ansprechen des nächsten Befehls:
Erhöhen der Speicherzellen-Adresse um Eins
Sprungbefehle (zu anderer Adresse)
Lösung:
In einem PC gibt es mehrere Arten von Speicher, die
abgestimmt zusammenarbeiten (Speicherhierarchie)
Ziel:
Minimierung von Speicherzugriffszeiten
17
Speicherwerk
Speicherwerk
In der Praxis:
In der Praxis:
Interner Speicher (Primärspeicher):
Register
Interner Speicher (Primärspeicher):
Preis pro Bit
Zugriffszeit
Kapazität
hoch
niedrig
niedrig
integrierter Teil des Speicherwerks
schnell, da ohne mechanisch bewegte Teile
Register:
Cache:
Cache-Speicher
Arbeitsspeicher
18
niedrig
hoch
unmittelbar dem Steuerwerk zugeordnet
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.
hoch
19
20
Speicherwerk
Speicherwerk
In der Praxis:
In der Praxis:
Externe Speicher (Sekundär-Speicher, Massenspeicher)
RAM
nicht Teil des Speicherwerks
über Eingabe-/Ausgabewerk mit Rechner verbunden
langsam, weil mit mechanisch bewegten Teilen
Lesen und Schreiben
Festplatte: magnetisch
0,01 Cent/MB, 500 GB, 0,06 GB/sec.
Nach dem Einschalten: leerer RAM wird mit Programmen und Daten
aus externen Speichern gefüllt
CD/DVD:
Flüchtiger Speicher: Strom weg = Daten weg
optisch
Vor dem Ausschalten: Speicherung (Kopie) der veränderten Daten auf
die externen Speicher
Realisierung: statischer RAM (SRAM) / dynamischer RAM (DRAM)
21
Speicherwerk
22
Speicherwerk
In der Praxis:
In der Praxis:
DRAM
SRAM
Speicherzelle = Kondensator + Transistor
Komplizierte Schaltung mit >6 Transistoren pro Bit
einhundert mal schneller als DRAM
keine Auffrischung
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
Nachteile:
benötigt mehr Platz und Energie
produziert mehr Hitze
Beispiel: 512MB SRAM = 50000 Euro / 30 Kilowatt Strom / 1qm Platz
Verwendung im Cache-Speicher
Einsatz im Arbeitsspeicher
23
24
Speicherwerk
Speicherwerk
S/L-Kopf-Bewegung
In der Praxis:
Spindel
Plattendrehung
Festplatte
In der Praxis:
Festplatte
Spur
Lese/Schreibkopf
Zylinder
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
Scheibe
Sektoren
Lücken
Spuren
25
Speicherwerk
26
Speicherwerk
Funktionsweise (Schreiben/Lesen):
Funktionsweise (Schreiben/Lesen):
Kommunikation mit dem Steuerwerk über 3 spezielle Register (Ports):
Steuersignale des Steuerwerks:
AM (Adress-Memory Port)
A (Adress Strobe):
enthält Adresse desjenigen Speicherelements, in das geschrieben
bzw. aus dem gelesen werden soll
meldet dem Speicher, dass eine Adresse „gelesen“ werden soll
D (Direction):
WM (Write-Memory Port)
gibt an, ob es sich um Lese- oder Schreibzugriff handelt
in das durch AM adressierte Speicherelement zu schreibender Inhalt
T (Data Transfer Acknowledge):
RM (Read-Memory Port)
Rückmeldung, dass Zugriff erfolgreich war (da Speicher relativ langsam ist)
gelesener Inhalt des adressierten Speicherelements
27
28
Speicherwerk
Rechenwerk
Funktionsweise (Schreiben/Lesen):
Aufgabe:
Verarbeitung der Daten (z.B. arithmetische und logische Operationen,
Vergleiche, logische Entscheidungen,…)
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)
29
Rechenwerk
30
Rechenwerk
In der Praxis:
Funktionsweise:
Akkumulator-Register
Operanden und Resultat einer Operation
Art und Reihenfolge der auszuführenden Rechenwerk-Operationen
werden durch das Steuerwerk bestimmt.
Andererseits erhält das Steuerwerk Meldesignale über den Status der
ALU.
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
32
Steuerwerk
Steuerwerk
Aufgabe:
In der Praxis:
Oberste Steuerung des Rechners
Alle anderen Komponenten erhalten ihre Befehle vom Steuerwerk
Ausführung der im Programm niedergelegten Arbeitsvorgänge
„Central Processing Unit“ (CPU) / Prozessor
Wichtigster Maßstab für die Leistung eines Computers
EVA-Prinzip:
Alle Vorgänge in einem Prozessor laufen getaktet ab
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.)
Ein Takt beinhaltet einen EVA-Zyklus
Dateneingabe/-ausgabe = Stromfluss auf bestimmten Leitungen
33
Steuerwerk
34
Steuerwerk
In der Praxis:
In der Praxis:
„Central Processing Unit“ (CPU) / Prozessor
Natürliche Grenzen der Schnelligkeit eines Prozessors:
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
1. Wie weit kommt ein Elektron in einem Takt auf einem 1
GHz Prozessor-Chip?
Lichtgeschwindigkeit im Vakuum = 300 000 km/sec = 0,3 * 109 m/sec
1 GHz entspricht Taktlänge = 10-9 sec = 1ns
Lichtstrecke = 30 cm/Taktlänge
m = 1/1000 = 10 (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)
-3
Elektronenflussgeschwindigkeit in Kupfer = 2/3 * Lichtgeschwindigkeit
Elektronstrecke = 20 cm/Taktlänge
Geschwindigkeit abhängig von Leitungslängen
35
36
Steuerwerk
Steuerwerk
In der Praxis:
In der Praxis:
Natürliche Grenzen der Schnelligkeit eines Prozessors:
Natürliche Grenzen der Schnelligkeit eines Prozessors:
2. Zuviel Abwärme
3. Langsamere Speicherzugriffszeiten
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)
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 Kühlungsmöglichkeiten
Geschwindigkeit abhängig von Cachegröße und Qualität der
Vorhersagelogik
37
Steuerwerk
38
Steuerwerk
Funktionsweise
Funktionsweise
Instruktionsregister IR
enthält Befehl, der gerade auszuführen ist
1. Holen von Befehlen (FETCH)
Befehlszähler PC (program counter)
enthält Adresse des aktuellen Befehls im Arbeitsspeicher
2. Entschlüsseln von Befehlen (DECODE)
Befehl gemäß PC adressieren und laden
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
39
(Eingabe:E)
(Verarbeitung: V)
(Ausgabe: A)
40
Steuerwerk
Steuerwerk
Funktionsweise
Funktionsweise
Beispiel: „Erhöhe Inhalt der Speicherzelle 500 um 1“
Beispiel: „Erhöhe Inhalt der Speicherzelle 500 um 1“
Inhalt von PC:
Inhalt von Speicherzelle 1000:
Inhalt von Speicherzelle 500:
Inhalt von PC:
Inhalt von Speicherzelle 1000:
Inhalt von Speicherzelle 500:
1000
der zu bearbeitende Befehl
17
1000
der zu bearbeitende Befehl
17
1. FETCH:
2. DECODE:
Hole den Inhalt von Speicherzelle 1000 nach IR
Erkenne, dass es sich um eine Addition des Inhalts von Speicherzelle 500
mit der Konstanten 1 handelt
41
Steuerwerk
42
Überblick
Funktionsweise
Peripheriegeräte
Beispiel: „Erhöhe Inhalt der Speicherzelle 500 um 1“
Inhalt von PC:
Inhalt von Speicherzelle 1000:
Inhalt von Speicherzelle 500:
zur Ein- und Ausgabe von
Befehlen und Daten
1000
der zu bearbeitende Befehl
17
Rechnerkern,
Befehlswerk,
3. EXECUTE:
Hole Inhalt (17) von Speicherzelle 500
(Eingabe)
Führe Addition aus (17+1)
(Verarbeitung)
Schreibe Ergebnis (18) nach Speicherzelle 500
(Ausgabe)
CPU
Speicher
verarbeitet Befehle
Steuerung Befehlsabfolge
(gemäß Programm)
enthält Daten und Befehle
(Programme)
Befehlszähler PC auf den nächsten Wert.
43
44
Genauerer Blick auf die CPU und Verbindungen
Überblick
BIOS
Uhr
Vorteile:
Slots
Grafik-Karte
Prozessor
Cache/
MemoryController
Prinzip des minimalen Hardwareaufwandes – „nichts kann
weggelassen werden“
Sound-Karte
PCIController
Prinzip des minimalen Speicheraufwandes
ISDN-Karte
eine Speicherzelle wird durch Angabe einer Adresse referiert
der Inhalt einer Zelle ist ein Maschinenbefehl oder ein Datenwert
(einheitliche Struktur, Größe)
Div. Controller:
Laufwerke
Hauptspeicher
Prozessor-Hauptspeicher
Subsystem
Bewertung
BUS
Schnittstellen:
seriell, parallel
USB, Firewire
45
Bewertung
46
Verbesserung
Nachteile:
Harvard-Architektur (Variante von von-Neumann):
„von-Neumann-Flaschenhals“:
Verbindung Hauptspeicher / CPU
Für Programm und Daten gibt es getrennte Speicher und
getrennte Zugriffwege zum Prozessor
durch diesen Flaschenhals ist alles sequentiell
(Nacheinander) zu transportieren:
Operationsbezeichnungen, Daten, Adressen, …
Engpass durch die zentrale Verbindungseinrichtung beim
von-Neumann-Rechner wird erweitert
Die Programmierung muss den sequentiellen Verkehr durch
den von-Neumann-Flaschenhals planen
(Scheduling: Aufgabe des Betriebssystems, weiterführende
Vorlesungen)
47
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
Buskonzept
Voraussetzung für das Zusammenwirken der Funktionseinheiten:
Breite eines Busses (auch Bandbreite)
Übertragung von Daten, Befehlen, Kontroll-, Statusinformationen
= Anzahl der parallel übertragbaren Bits (Anzahl der Leitungen)
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
Bus
Gerät 1
Gerät 2
...
Gerät n
49
Buskonzept
50
Hardware
Netzbuchse für
Stromversorgung
Teile eines Busses:
Zwei Lüfter
Datenbus:
Daten
Breite = Anzahl der Bits eines Arbeitsspeicherelements
Diskettenlaufwerk
Ein/Aus-Schalter
DVD / CD-ROM
Buchsen für Maus
und Tastatur
USB Schnittstellen
Serielle Schnittstelle
Parallele Schnittstelle
für Drucker
Adressbus:
Quelle/Ziel der Übertragung der Daten an
Netz (Ethernet)
Kontrollbus:
Steuersignale
Grafikkarte mit
Anschluss
für den Bildschirm
SCSI-Karte
Typenschild
Resetknopf
Kontrollleuchten
Selbststudium
Soundkarte
ISDN-Karte
51
Firewirekarte
52
Hardware
Hardware
Selbststudium
1. Schacht für Laufwerke:
DVD, CD, Diskette und
Festplatten.
Netzteil
Prozessor (CPU)
mit Lüfter
Memory Controller
Stromanschlüsse
Prozessor (CPU)
mit Lüfter
2. Schacht für Laufwerke:
Weitere Festplatten.
Grafikkarte
Selbststudium
Hauptspeicher
PCI-Controller
SCSI-Karte
Sound-Karte
ISDN-Karte
Hauptplatine
(Motherboard)
Karten
Batterie
Firewire-Karte
53
Hardware
Memory - Controller
54
Bedienung
Schnittstellen (teilweise verdeckt)
Sound, Netz, parallel, seriell, USB, Tastatur, Maus
AGP Slot
Selbststudium
5 PCI Slots
CPU-Sockel
für Pentium 4
Middleware
Treiber
4 RIMM Sockel
BIOS
Schnittstellen
Batterie
PCI Controller
Stecker für Floppy
und Festplatten
Netz-Anschluss
55
56
Bedienung
Bedienung
Schnittstelle:
Treiber(programm):
Konvention für eine Verbindung mit verschiedenen, aber
gleichartigen Bauteilen
z.B. Drucker verschiedener Hersteller
Anpassungsprogramme zur Ansteuerung einer SW- oder HWKomponente
(z.B. Druckertreiber, Maustreiber, ...)
Regelung des Signal- und Datenaustauschs (Hardware +
Software)
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
57
Bedienung
58
Bedienung
Betriebssystem:
Betriebssystem:
Macht die Hardware nutzbar:
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
Prozessverwaltung
Speicherwerwaltung
Dateiverwaltung
59
60
Bedienung
Bedienung
Betriebssystem:
Betriebssystem:
Speicherverwaltung
Dateiverwaltung
Verwaltung von Code und Daten mehrerer Prozesse, die gleichzeitig
im Hauptspeicher sind
Zugriffsschutz
Freispeicherverwaltung
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
62
Bedienung
Middleware:
Grafisches Bediensystem
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
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
Inhalt
Variablen
Vorlesung Informatik I
Wertzuweisung
Universität Augsburg
Konstanten
Wintersemester 2010/2011
Ausdrücke (informal eingeführt)
Prof. Dr. Robert Lorenz
Die Funktion scanf
Lehrprofessur für Informatik
Programmieren in C – Variablen
1
Variablen
2
Variablen
Motivation:
Motivation:
Wir wollen jetzt Werte (von Zahlen, Zeichen, ...) während
des Programmlaufs über Tastatur eingeben
Bisher:
Zahlen, Zeichen, Zeichenketten waren im Code fest
angegeben (als sog. Konstanten):
Andere Werte  anderes Programm
Notwendig:
Speicherung von Werten im Arbeitsspeicher
Zugriff auf Werte über (Namen für) Speicheradressen
Funktion für das Einlesen von Benutzereingaben
Jetzt:
Wie kann man mit Werten rechnen, die erst noch vom
Benutzer eingegeben werden (also dem Programmierer
nicht bekannt sind)?
3
4
Variablen
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);
}
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_
5
Variablen
6
Variablen
Eine Variable ist ein (vom Programmierer festgelegter) Name für
eine Speicheradresse
Zusammenfassung 1
Eine Variable hat eine Speicheradresse
Programmierer deklariert eine Variable (legt den Namen fest)
Bei der Übersetzung (in Maschinencode) wird der Variable eine
feste Speicheradresse zugeordnet
Eine Variable hat einen Namen, über den die Speicheradresse
identifiziert wird
Eine Variable hat einen Wert (den Wert, der an der
Speicheradresse gespeichert ist)
Über die Variable kann man im Programm auf den Wert
zugreifen (lesen/schreiben), der an dieser Speicheradresse
gespeichert sind
7
8
Variablen
Variablen
Variablen deklarieren
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?
Ein Datentyp legt fest, wieviel Speicherplatz (in Bytes) notwendig
ist, um einen Wert von diesem Typ 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)
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
9
10
Variablen
Variablen
Variablen deklarieren
Zusammenfassung 2
Ein Datentyp legt fest, wieviel Speicherplatz (in Bytes) zur
Verfügung gestellt wird, um einen Wert diesen Typs zu speichern
Eine Variable hat eine Speicheradresse (= Adresse der ersten
Speicherzelle des reservierten Bereichs)
Bei der Übersetzung steht durch Kenntnis des Datentyps fest,
wieviel Platz (wieviele Speicherzellen) für die Variable reserviert
werden muss
Eine Variable hat einen Namen, über den die Speicheradresse
identifiziert wird
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
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
Variablen deklarieren
Variablen deklarieren
erste Beispiele für Datentypen:
erste Beispiele für Datentypen:
int
ganze Zahl (int=integer)
benötigt 4 Byte: 232 Zahlen darstellbar
Wertebereich: -231 bis 231-1
double
Was passiert, wenn in einer Berechnung oder durch eine
Benutzereingabe dieser Bereich verlassen wird?
 Bereichsüberlauf (später genauer)
Dezimalzahl (in Fließkommadarstellung)
benötigt 8 Byte
Wertebereich:
2.22507 * 10-308 bis 1.79769 * 10308
-2.22507 * 10-308 bis -1.79769 * 10308
Es sind natürlich nicht alle Zahlen zwischen diesen Grenzen
darstellbar  Rundungsfehler (später genauer)
13
14
Variablen
Variablen
Variablen deklarieren
Variablen deklarieren
erste Beispiele für Datentypen:
Syntax von Deklarationen, einfache erste Version:
char
Zeichen (Buchstabe, Ziffer, Sonderzeichen)
benötigt 1 Byte: 28 Zeichen darstellbar
Darstellung: später
<Datentyp> <Name>;
Beispiele:
int alter;
double zins;
char geschlecht;
15
16
Variablen
Variablen
Variablen deklarieren
Variablen deklarieren
Regeln der Namensgebung:
Namenskonventionen:
Name
Folge von Buchstaben und Ziffern, beginnend mit einem
Buchstaben (der Unterstrich wird wie ein Buchstabe verwendet)
Erster Buchstabe = Kleinbuchstabe
Schlüsselworte
(wie z.B. main, include) dürfen nicht verwendet werden
Sprechende/aussagekräftige Namen verwenden
Keine Abkürzungen verwenden
Nicht mit Unterstrich beginnen (für den Anfang)
Groß- und Kleinbuchstaben werden unterschieden
17
Variablen
18
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
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
20
Variablen
Variablen
Geben Sie eine Zahl ein: 0.01234567890123456789
Endergebnis = _
/* bsp04b.c */
#include <stdio.h>
main(){
double zahl;
printf("Geben Sie eine Zahl ein: ");
scanf("%lf",&zahl);
printf("\nEndergebnis = %.20lf",zahl);
}
Ergebnis kann nicht exakt dargestellt werden
 Gerundetes Ergebnis wird angezeigt
%lf
%.20lf
Platzhalter für Fließkommazahl (l=long,f=float)
... mit 20 Nachkommastellen
21
22
Variablen
Variablen
Wertzuweisungen
Wertzuweisungen
Speichert (schreibt) man einen Wert an der Speicheradresse
einer Variable, so sagt man:
Der Variable wird ein Wert zugewiesen
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)
23
24
Variablen
Variablen
Wertzuweisungen
Wertzuweisungen
Beispiele (Wert passt zum Typ):
Beispiel (Wert passt nicht 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;
//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)
//an Speicheradresse von x den Wert der Summe der
//Werte von x und y speichern:
x = x + y;
25
Variablen
26
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
/* 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
Variablen
Konstanten
Konstanten sind feste (unveränderliche) im Code benutzte Werte
F l a e c h e n i n h a l t
Laenge und Breite:
3
2
Flaecheninhalt = 6_
Bei der Übersetzung wird jede benutzte Konstante an einer festen
Speicheradresse gespeichert
Es gibt unterschiedliche Typen von Konstanten (vgl. VariablenTypen), 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
29
Konstanten
30
Konstanten
Ganzzahl-Konstante
Fließkommazahl-Konstante
Ziffernfolge ohne 0 am Anfang
optional ‘-‘ – Zeichen am Anfang (negative Zahl)
Typ: int
Beispiel: 100
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)
Später:
Oktal-, Hexadezimal-Schreibweise
31
32
Konstanten
Konstanten
Fließkommazahl-Konstante
Zeichen-Konstanten
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)
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,\?
33
Konstanten
34
Ausdrücke
Zeichenketten-Konstanten
Ausdrücke sind mittels Operationszeichen verknüpfte Variablen
und Konstanten
Werden in Anführungszeichen ““ eingeschlossen
Können Escapesequenzen enthalten
jede Escapesequenz zählt als ein Zeichen
Diese Definition ist noch zu unpräzise:
Was ist eigentlich ein Operationszeichen?
Was heißt verknüpft?
Weitere Details (Typ, …) später
Wir definieren das aber erst später mathematisch!
35
36
Ausdrücke
Ausdrücke
Operationszeichen
Operationen
Jede Programmiersprache stellt eine Reihe von
Operationszeichen zur Verfügung
(z.B. Für arithmetische Operationen: +,-,*,/,%)
Eine Operation ist eine Rechenvorschrift, die aus ihren
Argumenten einen Wert berechnet
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!
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
37
Ausdrücke
38
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);
}
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!
39
40
Ausdrücke
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.00 dividiert durch 2.00 ist 1.50_
/* 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);
}
Hier handelt es sich um Division auf Fließkommazahlen!
%f
%.2f
41
scanf
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)
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
Verwendung
- Nach Aufruf der scanf-Funktion erwartet Programm
Benutzereingabe über Kommandozeile
- Eingabe wird nach abschließendem Drücken der Eingabetaste
eingelesen
43
44
scanf
scanf
dient der Eingabe von Text aus der Kommandozeile (oder aus
einer Datei)
Was passiert, wenn die Eingabe nicht zum Format passt?
(Standard-)
Eingabestrom
(von Zeichen)
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, …)
Tastatur
Eingabefunktionen:
scanf()
getchar()
Programm
Puffer
(zeilenweise)
Was passiert, wenn die Eingabe nicht zum Format passt?
45
scanf
46
scanf
Beispiel für gültige/ungültige Eingaben:
Eingabe: 21
Puffer:
\n 1 2
scanf(“%i“,&x)
[x hat Wert 21]
Puffer:
\n
[\n bleibt stehen]
Eingabe: 6
Puffer:
\n 6 \n
scanf(“%i“,&x)
[überliest \n am Anfang]
[x hat Wert 6]
Puffer:
\n
47
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
scanf
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]
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
_
49
scanf
50
scanf
Zusammenfassung:
Zusammenfassung:
Zeichen werden nach dem FIFO-Prinzip aus dem Puffer geholt
(FIFO: First In, First Out)
Es wird geprüft, ob ein Anfangsstück der Eingabe zur FormatZeichenkette passt: restliche Zeichen bleiben im Puffer stehen
Zwischenraumzeichen zu Beginn werden überlesen
Eingabe schlägt fehl, wenn das Format nicht passt (Umwandlung
nicht möglich ist): (restliche) Zeichen bleiben im Puffer stehen
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
Man muss überprüfen (können), ob Eingabe geklappt hat [später]
Man muss nach jeder Eingabe Puffer leeren (können) [später]
52
Inhalt
Motivation:
Vorlesung Informatik I
Im Arbeitsspeicher/Cache wird Information durch Spannungen
dargestellt, wobei nur zwei Spannungen unterschieden werden:
Universität Augsburg
niedrige Spannung: 0 V bis 0,8 V (=0)
höhere Spannung: 2,0 V bis 3,0 V (=1)
(Versorgungsspannung 3 Volt)
Wintersemester 2010/2011
Prof. Dr. Robert Lorenz
Dadurch lassen sich zwei Ziffern darstellen (0 und 1), also 1 Bit
Lehrprofessur für Informatik
Codierung und Zahlensysteme
1
Inhalt
2
Inhalt
Motivation:
Motivation:
Im binären Zahlensystem bestehen Zahlen nur aus 0en und 1en
Aber wieso unterscheidet man nicht 10 verschiedene
Spannungen?
Dann könnte man Zahlen im dezimalen System direkt im Rechner
speichern
Das binäre Zahlensystem kann man verwenden, um jede
Information (Zahlen, Texte, Bilder, Musik, Videos, ...) durch eine
Folge von 0en und 1en computergerecht darzustellen
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)
3
4
Inhalt
Inhalt
Motivation:
Motivation:
Nur auf der Basis eines binären Zahlensystems kann man
bezahlbare Computer bauen
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)
Außerdem sollte man wissen:
Kenntnis von Zahlensystemen für Programmierer notwendig,
für normale Benutzer nützlich (technische Anleitungen,
Fehlermeldungen, …)
was man dabei beachten muss (Möglichkeit der Decodierung,
Arithmetik auf codierten Zahlen usw.)
wie Zahlen, Zeichen, Ton, Bilder, usw. in Folgen von 0en und
1en codiert werden (können)
5
Inhalt
6
Codierungstheorie
Codierungstheorie (Grundlagen)
Relevante Gebiete für die Umwandlung (Codierung) von Daten:
Speicherung im Rechner (siehe Motivation)
Zahlensysteme
Nachrichtenübertragung (Telegraphie, Telephon, DFÜ...)
Bildsignalübertragung (Video-Übertragung, HDTV)
Geheimhaltung (Militär, Datenschutz, Kryptographie)
Übersetzung (Fremdsprachen, Programmiersprachen)
7
8
Codierungstheorie
Codierungstheorie
Inhalt dieser Folien:
Alphabet, Buchstabe:
Formalisierung der Begriffe Code, Codierung, ...
Wir betrachten eine endliche Menge A und nennen diese
Alphabet
Die Elemente von A nennen wir Buchstaben
Weiterführende Inhalte (andere Vorlesungen):
|A| bezeichnet die Anzahl der Buchstaben (Elemente) von A
Untersuchung mathematischer Zusammenhänge:
-
Entschlüsselung,
-
Entdeckung und Korrektur von Fehlern,
-
Redundanz, ... (Datenkompression)
9
Codierungstheorie
10
Codierungstheorie
Alphabet, Buchstabe:
Wort:
Wir nehmen an, dass die Buchstaben in einer festen Reihenfolge
geordnet sind, ausgedrückt durch eine Relation <
Ein Wort über A ist eine endliche Folge w = a1a2 ... ak von
Buchstaben aus A
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
|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 Ak := {w | w Wort über A, |w| = k}
IB0 = {ε}, IB1 = {0,1}, IB2 = {00,01,10,11}, …
11
12
Codierungstheorie
Codierungstheorie
Wort:
Sprache:
Hintereinandergeschriebene Worte u und v ergeben ein neues
Wort uv
Menge aller Worte über A:
Gilt w = uv für Worte u und v, so heißen u,v Teilworte von w
und u Anfangsstück von w
A* := {w | w Wort über A} =
∪A
k
A+ := A*\{ε}
Eine Teilmenge L ⊆ A* heißt Sprache
13
Codierungstheorie
14
Codierungstheorie
Lexikographische Ordnung:
Codierung, Code, Codewort:
Ähnlich der alphabetischen Ordnung lässt sich die lexikografische
Ordnung aus der Ordnung der Buchstaben ableiten
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
Deshalb ordnet man die Wörter zuerst der Länge nach, und dann
innerhalb einer Länge alphabetisch:
Jedes Element b ∈ c(A)
heißt Codewort
Gilt |w|<|v|, so definieren wir w<v
Gilt |w|=|v| und w=uaw‘, v=ubv‘, a<b, so definieren wir w<v
Informal: Eine Codierung ordnet jedem Zeichen eines Alphabets
ein Wort eines anderen Alphabets zu
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
Beispiel: 0<1<00<01<10<11<000<001<010<011<100<…
15
16
Codierungstheorie
Codierungstheorie
Beispiel: Morsecode cM:{A,...,Z,0,...,9}∪{Ä,Ö,Ü,CH}→ {•,_}*
Codewort
Codewort
Codewort
Beispiel: Zählcodierung cT:{0,...,9}→{O,L}* (Impulswahlverfahren)
Codewort
1
LO
6
LLLLLLO
2
LLO
7
LLLLLLLO
•••__
3
LLLO
8
LLLLLLLLO
4
••••_
4
LLLLO
9
LLLLLLLLLO
••__
5
•••••
5
LLLLLO
0
LLLLLLLLLLO
A
•_
I
••
R
•_•
1
•____
Ä
•_•_
J
•___
S
•••
2
••___
B
_•••
K
_•_
T
_
3
C
_•_•
L
•_••
U
••_
CH _ _ _ _
M
__
Ü
D
_••
N
_•
V
•••_
6
_••••
E
•
O
___
W
•__
7
__•••
F
••_•
Ö
___•
X
_••_
8
___••
G
__•
P
•__•
Y
_•__
9
____•
H
••••
Q
__•_
Z
__••
0
_____
Läßt sich beim Morsecode eine Nachricht immer dekodieren?
Läßt sich bei der Zählcodierung eine Nachricht immer
dekodieren?
17
Codierungstheorie
18
Codierungstheorie
Wichtige Codierungsklassen:
Codierung von Nachrichten (Wörtern):
Wir betrachten zwei Alphabete A,B
Wir betrachten eine Codierung c: A → B*
c: A → B
heißt Chiffrierung, c(A) heißt Chiffre
c: A → Bn
(n fest) heißt Blockcodierung
Man codiert Wörter, indem man die Codes der einzelnen
Buchstaben hintereinanderschreibt:
c: A → IB*
heißt Binärcodierung
c: A → IBn
(n fest) heißt n-Bit-Codierung
c*(ε) := ε
c*(wa) := c*(w)c(a)
für w ∈ A*, a ∈ A
Beispiele:
cT*(214)
= LLOLOLLLLO
*
cM (ESEL) = • • • • • • _ • •
cM*(SEINE) = • • • • • • _ • •
[Wir werden nachher nur n-Bit-Codierungen betrachten]
19
20
Codierungstheorie
Codierungstheorie
Decodierung von Nachrichten (Wörtern):
Fragen/Aufgaben:
Ein Code heißt decodierbar, falls nicht zwei unterschiedliche
Wörter gleich codiert werden
Konstruiere eine decodierbare Codierung, die nicht die FanoBedingung erfüllt
Erfüllen Blockcodierungen die Fano-Bedingung?
Ein hinreichendes (aber nicht notwendiges) Kriterium für die
Decodierbarkeit ist die sog. Fano-Bedingung:
Wie lässt sich die Morsecodierung so modifizieren, dass sie die
Fano-Bedingung erfüllt?
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
22
Zahlensysteme
Wir betrachten eine nicht-negative ganze Zahl B > 2 und
nennen sie Basis
Existenz einer solchen eindeutigen Summendarstellung
k-1
x =Σ biBi = b0B0 + b1B1 + ... + bk-1Bk-1
Jede nicht-negative ganze Zahl x hat dann eine eindeutige
Summendarstellung bzgl. B der folgenden Form
i=0
k-1
(1) Man bestimmt k mit Bk-1 ≤ x < Bk für ein maximales b < B
x =i=0
Σ biBi = b0B0 + b1B1 + ... + bk-1Bk-1
(2) Man bestimmt b < B maximal mit bBk-1 ≤ x < Bk
mit nicht-negativen ganzen Zahlen bi < B
(3) Setze bk-1:= b und mache dasselbe für den Rest x-bk-1Bk-1
B=10: 27 = 7*100 + 2*101 (0≤ bi ≤9)
B=2: 27 = 1*20 + 1*21 + 0*22 + 1*23 + 1*24 (0≤ bi ≤1)
23
24
Zahlensysteme
Zahlensysteme
Berechnungsbeispiel:
Wie kann man Sie einfach(er) berechnen?: Horner-Verfahren
k-1
x =i=0
Σ biBi = b0B0 + b1B1 + ... + bk-1Bk-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 b0
(3) Jetzt dasselbe für die Zahl x/B (usw.):
Rest bei ganzzahliger Division (x/B)/B ist b1
127 / 3
42 / 3
14 / 3
4 / 3
1 / 3
=
=
=
=
=
42
14
4
1
0
Rest
Rest
Rest
Rest
Rest
1
0
2
1
1
127 = 1*30 + 0*31 + 2*32 + 1*33 + 1*34
Allgemein:
Rest nach n-maliger ganzzahliger Division durch B ist bn-1
25
Zahlensysteme
26
Zahlensysteme
Gilt für eine nicht-negative ganze Zahl x die Summendarstellung
Umrechnung zwischen Zahlensystemen
k-1
x =i=0
Σ biBi = b0B0 + b1B1 + ... + bk-1Bk-1
so heißt die Ziffernfolge (bk-1bk-2…b1b0)B B-adische Darstellung
von x
127 hat die 3-adische Darstellung (11201)3
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)
27
28
Zahlensysteme
Zahlensysteme
Für den Informatiker wichtige Basen sind 2, 8 und 16
Das 8-adische Zahlensystem heißt auch Oktalsystem
Das 2-adische Zahlensystem heißt auch Dualsystem
Im Oktalsystem gilt:
B = 8
Erlaubte Ziffern: 0,1,...,7
Im Dualsystem gilt:
B = 2
Erlaubte Ziffern: 0,1
Einfache Umrechnung ins Dualsystem:
Wegen 8 = 23 stehen jeweils 3 Dual-Ziffern für eine Oktalziffer
Beispiel: (174)8 = (001111100)2
29
Zahlensysteme
30
Zahlensysteme
Das 16-adische Zahlensystem heißt auch Hexadezimalsystem
Im Hexadezimalsystem gilt:
Beliebige reelle Zahlen (insbesondere Brüche) r haben eine Badische Darstellung, nämlich von der Form:
k-1
r =i=-∞
Σ biBi =...+ b-1B-1 + b0B0 + ... + bk-1Bk-1
B = 16
Erlaubte Ziffern: 0,1,...,9,A,…,F
(A=10,…,F=15)
B-adische Festpunktdarstellung: r=(bk-1bk-2…b1b0.b-1b-2…)B
Einfache Umrechnung ins Dualsystem und zurück:
Wegen 16 = 24 stehen jeweils 4 Dual-Ziffern für eine
Hexadezimalziffer
Diese Darstellung kann wie die Dezimaldarstellung endlich oder
unendlich sein
Beispiel: (1B9)16 = (000110111001)2
31
32
Zahlensysteme
Zahlensysteme
B-adische Darstellung berechnen für reelle Zahlen:
B-adische Darstellung berechnen für reelle Zahlen:
k-1
r =i=-∞
Σ biB =...+ b-1B
i
-1
k-1
+ b0B + ... + bk-1B
0
r =
k-1
Σ
i=-∞
biBi =...+ b-1B-1 + b0B0 + ... + bk-1Bk-1
Sei r = x + y mit x ganzzahlig und 0 ≤ y < 1
(x = Vorkommastellen, y=Nachkommastellen)
Sei r = x + y mit x ganzzahlig und 0 ≤ y < 1
(x = Vorkommastellen, y=Nachkommastellen)
(1) Vorkommastellen werden aus x berechnet (wie vorhin)
(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
33
Zahlensysteme
34
Zahlensysteme
Berechnungsbeispiel für 127.5:
Man kann in allen B-adischen Festpunktdarstellungen rechnen
wie im Dezimalsystem
0.5 * 3 = 1.5  Ziffer 1, Rest 0.5
0.5 * 3 = 1.5  …
...
 127.5 = (11201.111...)3
Stellenweises Addieren/Subtrahieren mit Übertrag
(Achtung: Übertrag bei Summen >B-1!)
Multiplizieren/Dividieren
(Sonderfall: schnelle Berechnung von *B oder /B)
Berechnungsbeispiel für 127.33...:
0.33... * 3 = 1  Ziffer 1, Rest 0
 127.5 = (11201.1)3
35
36
Zahlensysteme
Zahlensysteme
Man kann in allen B-adischen Festpunktdarstellungen rechnen
wie im Dezimalsystem
Reelle Zahlen haben auch Gleitpunktdarstellungen
r = (bk-1bk-2…b1b0.b-1b-2…)B
= bk-1bk-2…b1b0.b-1b-2… * B0
Beispiel im Dualsystem  Übertrag ab Wert 2:
= bk-1bk-2…b1.b0b-1b-2… * B1
1 1 1 1.0 0 1
+
1 1 0.1
Übertrag:1 1 1
=
1 0 1 0 1.1 0 1
= ...
= 0.0bk-1bk-2…b2.b1b0b-1b-2… * Bk+1
= ...
= bk-1bk-2…b1b0b-1.b-2… * B-1
= ...
= <Mantisse> * B<Exponent>
37
Zahlensysteme
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 *
1.253 *
...
0.01253
...
125.3 *
...
38
Man normiert die Gleitpunktdarstellung reeller Zahlen r durch
Eingrenzungen des Bereichs für die Mantisse
r = <Mantisse> * B<Exponent>
Übliche Normierungen:
100
101
1/B ≤ |<Mantisse>| < 1
also: r = 0.b-1b-2…b-m * B<Exponent> mit b-1 > 0
* 103
Beispiele: 15.3=0.153 * 102, 0.002=0.2 * 10-2,...
10-1
39
40
Zahlensysteme
Zahlensysteme
Man normiert die Gleitpunktdarstellung reeller Zahlen r durch
Eingrenzungen des Bereichs für die Mantisse
Rechnen mit normierten Gleitpunktdarstellungen
Sei r1 = m1 ⋅ Be1, r2 = m2 ⋅ Be2
r = <Mantisse> * B<Exponent>
mit r1,r2>0 (zur Vereinfachung!) und 1/B ≤ m1, m2 < 1
Übliche Normierungen:
Vergleiche:
1 ≤ |<Mantisse>| < B
also: r = b0.b-1b-2…b-m * B<Exponent> mit b0 > 0
r1<r2 genau dann wenn (gdw) (e1<e2 ) oder (e1=e2 und m1<m2)
r1=r2 gdw (e1=e2 und m1=m2)
Beispiele: 15.3=1.53 * 10 , 0.002=2.0 * 10 ,...
1
-3
41
Zahlensysteme
42
Zahlensysteme
Rechnen mit normierten Gleitpunktdarstellungen
Sei r1 = m1 ⋅ Be1, r2 = m2 ⋅ Be2
Rechnen mit normierten Gleitpunktdarstellungen
Sei r1 = m1 ⋅ Be1, r2 = m2 ⋅ Be2
mit r1,r2>0 (zur Vereinfachung!) und 1/B ≤ m1, m2 < 1
mit r1,r2>0 (zur Vereinfachung!) und 1/B ≤ m1, m2 < 1
Addition (o.B.d.A. sei r1 ≥ r2)
Subtraktion (o.B.d.A. sei r1 ≥ r2)
r1 + r2
r1 - r2
= m1 ⋅ Be1 + (m2 ⋅ Be2-e1) Be1 [Exponentenangleich]
= m1 ⋅ Be1 - (m2 ⋅ Be2-e1) Be1 [Exponentenangleich]
= (m1 + m2⋅ Be2-e1) Be1
= (m1 - m2⋅ Be2-e1) Be1
[Addition der Mantissen]
= m ⋅ Be [Normierung: m =m1+m2⋅Be2-e1 od. =(m1+m2⋅Be2-e1)/B]
43
[Addition der Mantissen]
= m ⋅ Be [Normierung: m =m1-m2⋅Be2-e1 od. =(m1-m2⋅Be2-e1)/B]
44
Zahlensysteme
Zahlensysteme
Rechnen mit normierten Gleitpunktdarstellungen
Rechnen mit normierten Gleitpunktdarstellungen
Sei r1 = m1 ⋅ Be1, r2 = m2 ⋅ Be2
Beispiele (zur Basis 2)
mit r1,r2>0 (zur Vereinfachung!) und 1/B ≤ m1, m2 < 1
(0.1*22)+(0.11*2-1)
Multiplikation (Division analog)
(0.11*2-1)+(0.1*2-1)
r1 ⋅ r2
= m1 ⋅ m2 ⋅ Be1+e2
(0.11*2-1)-(0.1*2-1)
= m ⋅ Be [Normierung: m = m1 ⋅ m2 od. = m1 ⋅ m2 ⋅ B]
(0.1*22)*(0.11*2-1)
=
=
=
=
=
=
=
=
(0.1 *22)+(0.11 *2-3)*22
0.10011* 22
1.01 * 2-1
0.101 * 20
0.01 * 2-1
0.1 * 2-2
0.011 * 21
0.11 * 20
45
Ausblick
46
Ausblick
Technische Beschränkung für Rechner:
Fragen:
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…)
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?
Folgerung:
Man kann nur endlich viele Zahlen/Zeichen darstellen
47
48
Ausblick
Fragen:
Vorlesung Informatik I
Wie lassen auf den Codierungen arithmetische Operationen
realisieren?
Universität Augsburg
(x, y)
op
c Codierung
(c(x), c(y))
x op y
c Codierung
op
c(x op y) =
c(x) op c(y)
Wintersemester 2010/2011
op ∈ {+, -,
*, / }
Prof. Dr. Robert Lorenz
op ∈ {+, -,
*, / }
Lehrprofessur für Informatik
Zahlen- und Zeichendarstellungen
Wie muss op aussehen, damit das Diagramm kommutativ ist?
49
Inhalt
1
Inhalt
Motivation
Motivation
Technische Beschränkung für Rechner:
Welche Zahlen sollen codiert werden (zusammenhängender
Bereich, ganze/gebrochene/reelle Zahlen?)
Es ist nur die Verarbeitung von n-Bit-Worten möglich (für ein
festes n)
Wie codiert man negative Zahlen?
Mit dieser Bitzahl muss man nun ganze Zahlen, reelle Zahlen,
Zeichen, usw. darstellen (in der Praxis n abhängig vom
Datentyp)
Mit welcher Genauigkeit (Rundungsfehler) codiert man
gebrochene Zahlen?
Folgerung:
Man kann nur endlich viele Zahlen/Zeichen darstellen
2
3
Inhalt
Inhalt
Motivation
Zahldarstellungen (Vorzeichen-Betrag, Exzeß-q, 1-Komplement,
2-Komplement, Festpunkt, Gleitpunkt)
Wie lassen auf den Codierungen arithmetische Operationen
realisieren?
(x, y)
op
x op y
c Codierung
(c(x), c(y))
c Codierung
op
c(x op y) =
c(x) op c(y)
Zeichendarstellungen (ASCII, Unicode)
op ∈ {+, -,
*, / }
op ∈ {+, -,
*, / }
Wie muss op aussehen, damit das Diagramm kommutativ ist?
4
Zahlendarstellungen
5
Zahlendarstellungen
Notationen
Notationen
Jedes Wort über dem Alphabet {0,1} bezeichnen wir als
Bitmuster
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.
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
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
6
7
Zahlendarstellung ganzer Zahlen
Zahlendarstellung ganzer Zahlen
Vorbereitungen
Grundidee
Für x ∈ {0, ..., 2n - 1} bezeichnen wir mit c2,n(x) die
Dualdarstellung von x in n Stellen, evtl. aufgefüllt mit führenden
Nullen
Darstellung eines Zahlbereiches A = {xu,xu+1,...,xo-1,xo},
mit:
xu
Eignet sich noch nicht für die Darstellung negativer Zahlen
0
xo
xu < 0 < xo
Bei Addition / Subtraktion / Multiplikation kann der darstellbare
Zahlenbereich über-/unterschritten werden - was dann?
A maximal, d.h. |A| ≈ 2n
A symmetrisch zum Nullpunkt, d.h. |xu| ≈ |xo|
Beispiele:
c2,8(7)=00000111
(00000111)2,8=7
Arithmetische Operationen (auf codierten Zahlen) leicht zu
realisieren (z.B. durch bitweise Operationen)
8
Vorzeichen-Betrag-Darstellung
9
Vorzeichen-Betrag-Darstellung
Beispiele
Definition
AVB,n = {-(2n-1-1),...,-0,+0,1,...,2n-1 - 1}
cVB,8(7)= 0c2,7(7)=00000111
(00000111)VB,8=7
cVB,n : AVB,n → IBn
cVB,n(x) := 0c2,n-1(|x|)
cVB,n(x) := 1c2,n-1(|x|)
, falls 0 ≤ x < 2n-1
, falls -2n-1 < x ≤ 0
cVB,4(-7)= 1c2,3(7)=1111
(1111)VB,4=-7
Also:
Positive Zahlen:
Negative Zahlen:
0
Betrag in Dualdarstellung
1
Betrag in Dualdarstellung
10
11
Vorzeichen-Betrag-Darstellung
Vorzeichen-Betrag-Darstellung
Berechnung
Arithmetik
Für
Arithmetik der Vorzeichen-Betrag-Darstellung: Sehr aufwendig!
cVB,n(x) = bn-1 ... b1b0
(selbst überlegen: z.B. postive Zahl + negative Zahl = ? 
Fallunterscheidung nötig)
gilt
n-2
x=(bn-1 ... b1b0)VB,n=(+/-) Σ
i = 0
 Wird in der Praxis nicht verwendet
bi 2i für bn-1 = (0/1)
12
Exzeß-q-Darstellung
13
Exzeß-q-Darstellung
Definition
Beispiele:
AEx-q,n={-q,...,0,1,...,2n–1–q}
cEx-32,8(7)= c2,8(39)=00100111
(00100111)Ex-32,8=7
für q ganze nicht-negative Zahl
cEx-8,4(-7)= c2,4(1)=0001
cEX-q,n : AEx-q,n → IBn
(0001)Ex-8,4=-7
cEx-q,n(x) := c2,n(x+q)
14
15
Exzeß-q-Darstellung
Exzeß-q-Darstellung
Berechnung
Arithmetik
Für
Sei + die Addition, - die Subtraktion auf Dualzahlen
Addition ⊕ (auf Exzeß-q-Darstellungen)
cEx-q,n(x) =bn-1 ... b1b0
cEx-q,n(x) ⊕ cEx-q,n(y)
gilt
(x, y)
=cEx-q,n(x+y)
n-1
x = (bn-1 ... b1b0 )Ex-q,n = Σ
i = 0
=c2,n(x+y+q)
bi ⋅ 2i – q
+
c
c
(c(x),c(y))
=c2,n(x+q)+c2,n(y+q)-c2,n(q)
x + y
⊕
c(x + y) =
c(x) ⊕ c(y)
=cEx-q,n(x)+cEx-q,n(y)–c2,n(q)
Beispiel:
cEx-32,8(7)⊕cEx-32,8(-7)=00100111+00011001-00100000=00100000
16
Exzeß-q-Darstellung
17
Exzeß-q-Darstellung
Arithmetik
Arithmetik
Sei + die Addition, - die Subtraktion auf Dualzahlen
Bei Bereichsüberlauf (also bei x+y > 2n–1–q oder <-q)
brechen C-Programme mit Fehlermeldung ab
Subtraktion Θ (auf Exzeß-q-Darstellungen)
cEx-q,n(x) Θ cEx-q,n(y)
= cEx-q,n(x-y)
=c2,n(x-y+q)
=c2,n(x+q)-c2,n(y+q)+c2,n(q)
(x, y)
-
c
c
(c(x),c(y))
Multiplikation/Division: zu kompliziert!
x - y
Θ
c(x - y) =
c(x) Θ c(y)
Wird zur Darstellung des Exponenten bei Gleitpunktdarstellungen
verwendet (bemerke: da braucht man nur Addition /
Subtraktion)
=cEx-q,n(x)-cEx-q,n(y)+c2,n(q)
Beispiel:
cEx-32,8(7) Θ cEx-32,8(-7)=00100111-00011001+00100000=00101110
18
19
1- und 2-Komplement-Darstellung
1- und 2-Komplement-Darstellung
Grundidee
Grundidee
Wir betrachten eine feste ganze nicht-negative Zahl k
Stelle positive Zahlen durch Binärcodierung dar:
Für eine ganze nichtnegative Zahl x ≤ k/2 sei
c(x) := c2,n(x)
x := k – x
Stelle negative Zahlen durch Binärcod. des Komplements dar:
das Komplement von x bzgl. k
0
x
k/2
c(-x) := c2,n(x) = c2,n(k-x)
k-x
Subtraktion durch Addition des Komplements:
k
c(y)-c(x) = c(y)+c(-x) = c2,n(y)+c2,n(k-x)
20
1- und 2-Komplement-Darstellung
21
2-Komplement-Darstellung
Grundidee
Definition
Wähle k so, dass Komplementbildung und Subtraktion von k
A2K,n = {-2n-1,...,0,1,...,2n-1 – 1}
leicht realisierbar sind:
c2K,n : A2K,n → IBn
k = 2n (2-Komplement)
c2K,n(x) := c2,n(x)
falls 0 ≤ x < 2n-1
c2K,n(x) := c2,n(2n + x) falls -2n-1 ≤ x < 0
k = 2n-1 (1-Komplement)
0
0
x
k/2
k-x
x
2n-1
2n-x
2n
k
22
23
2-Komplement-Darstellung
2-Komplement-Darstellung
Beispiele:
Beispiel für n=4 (komplett)
c2K,4(0) = 0000
c2K,4(7)= c2,4(7)=0111
(0111)2K,4=7
c2K,4(-8)= c2,4(24-8)=1000
(1000)2K,4=-8
c2K,4(1) = 0001
c2K,4(-1) = 1111
c2K,4(2) = 0010
c2K,4(-2) = 1110
...
...
c2K,4(7) = 0111
c2K,4(-7) = 1001
c2K,4(-8) = 1000
24
2-Komplement-Darstellung
25
2-Komplement-Darstellung
Berechnung
Arithmetik
Für
Komplementbildung
c2K,n(x) = bn-1 ... b1b0
Sei x∈{1,...,2n-1 - 1}, c2K,n(x)=c2,n(x)=bn-1...b1b0
Dann gilt:
gilt
n-2
x = (bn-1 ... b1b0 )2K,n = -bn-12n-1 + Σ
i = 0
c2K,n(-x) = c2,n(x)
bi ⋅ 2i
=c2,n(2n - 1)
-c2,n(x)
=(11...11)2,n -(bn-1 ... b1b0 )2,n
+ c2,n(1)
+ (00...01)2,n
=((1 - bn-1) ... (1 - b1)(1 - b0))2,n + (00...01)2,n
(Rechnung?)
 Komplementbildung = „Kippen“ aller Bits und Addition von 1
26
27
2-Komplement-Darstellung
2-Komplement-Darstellung
Arithmetik (formal)
Arithmetik (anschaulich)
c2K,n(x)⊕c2K,n (y) := (c2K,n(x)+c2K,n(y)) modulo 2n
Addition:
+
einer positiven Zahl y:
y Schritte gegen Uhrzeigersinn.
ist die Addition auf Dualzahlen
modulo 2n bedeutet anschaulich: „Ignorieren“ des Überlaufs
(führende 1 ignorieren, falls Ergebnis n+1 Stellen
hat)
einer negativen Zahl y:
y Schritte im Uhrzeigersinn.
Subtraktion: durch Addition des Komplements
Multiplikation / Division: Zurückführung auf Addition
28
2-Komplement-Darstellung
29
2-Komplement-Darstellung
Arithmetik (formal)
Arithmetik (formal)
Rechnung für 2n-1>x,y≥0, x+y<2n-1:
Rechnung für 2n-1>x≥0,0>y≥−2n-1,x+y<0:
c2K,n(x)⊕c2K,n (y)
c2K,n(x)⊕c2K,n (y)
= c2K,n(x+y)
= c2K,n(x+y)
= c2,n(x+y)
= c2,n(x+y+2n)
= c2,n(x) + c2,n(y)
= c2,n(x+y+2n) modulo 2n
= (c2,n(x) + c2,n(y)) modulo 2n
= (c2,n(x) + c2,n(y+2n)) modulo 2n
= (c2K,n(x) + c2K,n(y)) modulo 2n
= (c2K,n(x) + c2K,n(y)) modulo 2n
30
31
2-Komplement-Darstellung
2-Komplement-Darstellung
Arithmetik (formal)
Arithmetik (formal)
Rechnung für 2n-1>x≥0,0>y≥−2n-1,x+y≥0:
Rechnung für 0>x,y≥−2n-1,x+y≥-2n-1 :
c2K,n(x)⊕c2K,n (y)
c2K,n(x)⊕c2K,n (y)
= c2K,n(x+y)
= c2K,n(x+y)
= c2,n(x+y) + 2n - 2n
= c2,n(x+y+2n) + 2n - 2n
= (c2,n(x+y) + 2n) modulo 2n
= (c2,n(x+y+2n) + 2n) modulo 2n
= (c2,n(x) + c2,n(y+2n)) modulo 2n
= (c2,n(x+2n) + c2,n(y+2n)) modulo 2n
= (c2K,n(x) + c2K,n(y)) modulo 2n
= (c2K,n(x) + c2K,n(y)) modulo 2n
32
2-Komplement-Darstellung
33
2-Komplement-Darstellung
Arithmetik (formal)
Arithmetik (formal)
Ergebnis bei Bereichsüberlauf 2n-1>x,y≥0, x+y≥2n-1:
Ergebnis bei Bereichsüberlauf -2n-1≤x,y<0, x+y < -2n-1:
((c2K,n(x)+c2K,n(y))modulo 2n)2K,n=
((c2K,n(x)+c2K,n(y))modulo 2n)2K,n=
((c2,n(x)+c2,n(y))modulo 2n)2K,n=
((c2,n(x+2n)+c2,n(y+2n))modulo 2n)2K,n=
(c2,n(x+y))2K,n=
(c2,n(x+y+2n))2K,n=
x+y-2n
x+y+2n
Kein Abbruch, sondern Rückgabe des falschen Ergebnisses
Kein Abbruch, sondern Rückgabe des falschen Ergebnisses
(Anschaulich im Zahlenring: Zyklischer Bereichsüberlauf)
(Anschaulich im Zahlenring: Zyklischer Bereichsüberlauf)
34
35
1-Komplement-Darstellung
1-Komplement-Darstellung
Definition
Beispiele:
A2K,n = {-(2n-1-1),...,-0,+0,1,...,2n-1 – 1}
c1K,4(7)= c1,4(7)=0111
(0111)1K,4=7
c1K,n : A1K,n → IBn
c1K,n(x) := c2,n(x)
c1K,n(x) := c2,n(2n -1 + x)
0
x
2n-1-1
c1K,4(-7)= c1,4(24-1-7)=1000
(1000)1K,4=-7
falls 0 ≤ x < 2n-1
falls -2n-1 < x ≤ 0
2n-1-x
2n-1
36
37
1-Komplement-Darstellung
1-Komplement-Darstellung
Berechnung
Beispiel für n=4 (komplett)
c1K,4(+0) = 0000
c1K,4(-0) = 1111
Für
c1K,4(1)
= 0001
c1K,4(-1) = 1110
c1K,n(x) = bn-1 ... b1b0
c1K,4(2)
= 0010
c1K,4(-2) = 1101
gilt
...
c1K,4(7)
...
= 0111
x
c1K,4(-7) = 1000
n-2
= (bn-1 ... b1b0 )1K,n = -bn-1(2n-1-1)+ Σ
i = 0
bi ⋅ 2i
(Rechnung?)
38
39
1-Komplement-Darstellung
1-Komplement-Darstellung
Arithmetik
Arithmetik (anschaulich)
Komplementbildung
Sei x∈{1,...,2n-1}, c1K,n(x)=c2,n(x)=bn-1...b1b0
Addition:
Dann gilt:
einer positiven Zahl y:
y Schritte gegen Uhrzeigersinn.
c1K,n(-x) = c2,n(x)
= c2,n(2n - 1)
einer negativen Zahl y:
y Schritte im Uhrzeigersinn.
-c2,n(x)
= (11...11)2,n -(bn-1 ... b1b0 )2,n
Subtraktion: durch Addition des Komplements
=((1 - bn-1) ... (1 - b1)(1 - b0))2,n
Multiplikation / Division: Zurückführung auf Addition
 Komplementbildung = „Kippen“ aller Bits
40
1-Komplement-Darstellung
41
Zahlendarstellung reeller Zahlen
Arithmetik (formal)
Ziel:
Analog zu 2-Komplement: Betrachte (2n-1) statt 2n
Darstellung rationaler und reeller Zahlen als n-Bit-Worte
c1K,n(x)⊕c1K,n (y) = (c1K,n(x)+c1K,n(y)) modulo 2n-1
+
Problem:
Nur endlich viele Zahlen exakt darstellbar mit n Bits (Festpunkt
oder Gleitpunkt)
ist die Addition auf Dualzahlen
modulo 2n-1 bedeutet anschaulich: „Addition“ des Überlaufs
(führende 1 ignorieren und an letzter Stelle
addieren , falls Ergebnis n+1 Stellen hat)
 unendlich viele Zahlen nur approximativ (gerundet) darstellbar
Frage:
Welche Zahlen wollen wir exakt darstellen?
42
43
Festpunktdarstellung mit n Bits
Festpunktdarstellung mit n Bits
Definition:
Definition:
Seien m (Anzahl Nachkommastellen) und k (Anzahl
Vorkommastellen) nichtnegative ganze Zahlen fest gegeben
..
k = n-m
Hat eine nicht-negative ganze Zahl x die Summendarstellung
m
Sind die Nachkommastellen einer Zahl x nicht exakt darstellbar,
so rundet man zur nächstgelegenen exakt darstellbaren Zahl:
x = (bk-1...b0.b-1...b-m)2
Mit rd bezeichnen wir den Rundungsoperator, der eine Zahl x zur
nächstgelegenen ganzen Zahl rundet. Er erfüllt also
heißt
c2,m,k(x) = bk-1...b0b-1...b-m = c2,m+k(x*2m)
2-adische Festpunktdarstellung von x mit k Vorkomma- und m
Nachkommastellen und x heißt exakt darstellbar
|rd(x)-x|=min{|y-x| | y ist eine ganze Zahl}
44
Festpunktdarstellung mit n Bits
Festpunktdarstellung mit n Bits
Definition:
Beispiel: Stelle Dezimalzahl 1.2 in folgender 8-Bit
Festpunktdarstellung bzgl. der Basis 2 dar:
..
k = n-m
45
..
m
4
Wir definieren für beliebiges x:
4
Multiplizieren der Zahl mit 2 :
1.2 * 24 = 19.2
4
c2,m,k(x):= c2,m+k(rd(x*2m))
So können wir also bei der Berechnung vorgehen:
Auf- bzw. Abrunden in ganze Zahl:
rd(19.2)=19
(1) Multiplizieren der Zahl mit 2m
(2) Auf- bzw. Abrunden in eine ganze Zahl
(3) Dual-Darstellung mit n Bit
Dual-Darstellung mit 8 Bit:
c2,4,4(1.2)= c2,8(rd(1.2* 24))=c2,8(19)=00010011
(00010011)2,4,4=(00010011)2,8/ 24 =1.1875
46
47
Festpunktdarstellung mit n Bits
Festpunktdarstellung mit n Bits
Berechnung
Absoluter Rundungsfehler: |x-(c2,m,k(x))2,m,k |
Für
|x-(c2,m,k(x))2,m,k |
c2,m,k(x) = bn-1 ... b1b0
= |x-(c2,m+k(rd(x*2m)))2,m+k /2m|
gilt
= |x-(rd(x*2m))/2m|
x
= |x*2m -(rd(x*2m))|/2m
= (bn-1 ... b1b0 )2,m,k
n-1
= Σ
i=0
< 0.5/2m
bi ⋅ 2i-m
= 1/2m+1
(Abstände zwischen exakt darstellbaren Zahlen gleichbleibend)
= (bn-1 ... b1b0)2,m+k/2m
48
Festpunktdarstellung mit n Bits
49
Festpunktdarstellung mit n Bits
Relativer Rundungsfehler: |x-(c2,m,k(x))2,m,k|/|x|
Arithmetik:
|x-(c2,m,k(x))2,m,k|/|x|
..
k=n-m
< 1/|x|2m+1
m
Zurückführen auf Rechenoperationen für ganze Zahlen durch
Multiplizieren der Zahl mit 2m
(kann beliebig groß werden für kleine x)
50
51
Festpunktdarstellung mit n Bits
Festpunktdarstellung mit n Bits
Eigenschaften:
Eigenschaften:
..
k = n-m
..
m
k = n-m
Gleichbleibender Abstand 1/2m zwischen exakt darstellbaren
Zahlen
m
Problem:
Unterschiedliche Größenordnungen in Anwendungen:
Geeignet für Zahlen ähnlicher Größenordnung
(Anzahl der Nachkommastellen m an Größenordnung anpassen,
s.d. Rundungsfehler tolerierbar)
Avogadrozahl:
Planck – Konstante:
L = 6.0225 ⋅ 1023
h = 6.6260755 ⋅ 10-34
Besser: Darstellung als Gleitpunktzahl mit n Bits
52
Gleitpunktdarstellung mit n Bits
53
Gleitpunktdarstellung mit n Bits
Darstellung normierter Gleitpunktzahlen zur Basis 2 in n-Bits:
Definition
Jede reelle Zahl r besitzt eine eindeutige Darstellung der Form
(siehe Kapitel zu Zahlensystemen):
r = m ⋅ 2 mit 1 ≤ |m| < 2
e
V
Charakteristik
n-2
Betrag der Mantisse
k-2
0
V = Vorzeichen der Mantisse
=0 für positive Zahlen
Idee: Codiere (m, e) in geeigneter Weise als n-Bit-Zahl:
=1 für negative Zahlen
k Bits für die Darstellung von m (Festpunktdarstellung)
n - k Bits für e (Exzeß-q-Darstellung)
(0 < k < n)
54
55
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Definition
Definition
V
Charakteristik
n-2
Betrag der Mantisse
k-2
V
0
Charakteristik
Betrag der Mantisse
n-2
k-2
0
Darstellung der Mantisse (k-1 Bits): Festpunktdarstellung mit
Darstellung des Exponenten = Charakteristik (n-k Bits):
(1) einer Vorkommastelle (muss nicht dargestellt werden, da
immer =1)
(2) k-1 Nachkommastellen
Exzeß-(2n-k-1-1)-Darstellung
Für c2,k-1,1(|m|) = 1b-1b-2... b-k-2 definieren wir:
(Exponenten zwischen –(2n-k-1-1) und 2n-k-1 darstellbar)
c2,exp,n-k(e) := cEX-q,n-k(e) mit q=(2n-k-1-1)
c2,man,k-1(|m|) := b-1b-2... b-k-2
56
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Definition
V
Charakteristik
n-2
57
Beispiel:
V
Betrag der Mantisse
k-2
0
7
Charakteristik
6
Betrag der Mantisse
4
3
0
3-Bit Charakteristik: q=3, Exponent zwischen –3 (Bitmuster 000)
und 4 (Bitmuster 111)
cGP,k,n(m⋅2e ) := 0c2,exp,n-k(e)c2,man,k-1(|m|), falls 0 ≤ m
cGP,k,n(m⋅2e ) := 1c2,exp,n-k(e)c2,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
4-Bit Mantisse: Werte zwischen 1 (Bitmuster 0000) und 2-2-5
(Bitmuster 1111)
59
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Beispiel: Stelle die Zahl 4.6 dar
0
7
1
0
1
6
0
4
Beispiel: Stelle die Zahl 4.6 dar
0
1
0
3
0
0
7
(1) Normierte Gleitpunktdarstellung (m und e bestimmen):
1
0
1
6
0
4
0
1
0
3
0
(2) Vorzeichen bestimmen:
4.6 = 2.3*21 = 1.15*22
0 für positive Zahl
Ergebnis: |m| = 1.15 und e=2
60
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Beispiel: Stelle die Zahl 4.6 dar
0
7
1
6
0
1
0
4
61
Beispiel: Stelle die Zahl 4.6 dar
0
1
3
0
0
0
7
1
6
0
1
0
4
0
1
0
3
(3) Charakteristik bestimmen:
(4) Code der Mantisse bestimmen:
c2,exp,3(2)= cEX-3,3(2)= c2,3(2+3)=101
c2,4,1(1.15)=c2,5(rd(1.15*24))=c2,5(18)=10010
0
Ergebnis: c2,man,4(1.15)=0010
62
63
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Berechnung:
Beispiel: Stelle die Zahl 4.6 dar
0
7
1
0
1
6
0
4
0
1
0
3
V
Charakteristik
Betrag der Mantisse
n-2
0
Also:
cGP,4,8(4.6)=01010010
k-2
0
Für cGP,k,n(x) = bn-1 ... b1b0 gilt
Umgekehrt:
(01010010)GP,k,8 = (1.0010)2*2(101)
x
EX-3,3
=(100.1)2=4.25
= (bn-1 ... b1b0)GP,k,n
= (+/-) (1.bk-2 ... b1b0 )2 * 2(b
n-2
...b k-1 )EX-q,n-k
für bn-1=(0/1) und q=2n-k-1-1
64
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Beispiele:
V
7
Beispiel:
Charakteristik
6
65
Betrag der Mantisse
4
3
V
0
7
Charakteristik
6
Betrag der Mantisse
4
3
0
Kleinste positive darstellbare Zahl:
Größte positive darstellbare Zahl:
Kleinster Exponent:
(000)2,exp,3 = (000)EX-3,3 = (000)2,3 -3 = 0-3 = -3
Größter Exponent:
(111)2,exp,3 = (111)EX-3,3 = (111)2,3 -3 = 7-3 = 4
Kleinste Mantisse (Bitmuster 0…0 schon vergeben):
(0001)2,man,4 = (10001)2,4,1 = (1.0001)2
Größte Mantisse (Bitmuster 1…1 schon vergeben):
(1110)2,man,4 = (11110)2,4,1 = (1.1110)2
Ergebnis:
(00000001)GP,4,8 = (1.0001)2*2-3 = (0.0010001)2
Ergebnis:
(01111110)GP,4,8 = (1.1110)2*24 = (11110)2 = 30
66
67
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Beispiele: IEEE-Standard 754
Beispiele: IEEE-Standard 754
Einfache Genauigkeit:
Doppelte Genauigkeit:
V
Charakteristik
31 30
23
Betrag der Mantisse
22
V
0
Charakteristik
63 62
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)
52
Betrag der Mantisse
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)
68
Gleitpunktdarstellung mit n Bits
69
Festpunktdarstellung mit n Bits
Absoluter Rundungsfehler: |m⋅2e-(cGP,k,n(m⋅2e))GP,k,n|
Beispiele: IEEE-Standard 754
|m⋅2e-(cGP,k,n(m⋅2e))
Erweiterte Genauigkeit:
GP,k,n
|
= |m-(c2,k-1,1(m))2,k-1,1|⋅2e
V
Charakteristik
79 78
64
Betrag der Mantisse
63
< 2e/2k
0
(Kann sehr groß werden für große Zahlen:
15-Bit Charakteristik:
Exponent zwischen –(2-14-1) (Bitmuster 0...0) und 214
(Bitmuster 1...1)
(64 + 1)-Bit Mantisse:
Werte zwischen 1 (Bitmuster 0...0) und 2-2-65 (Bitmuster
1...1)
–(2n-k-1-1)≤e≤2n-k-1)
70
71
Festpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Relativer Rundungsfehler: |m⋅2e-(cGP,k,n(m⋅2e))GP,k,n|/|m⋅2e|
|m⋅2e-(cGP,k,n(m⋅2e))GP,k,n|/|m⋅2e|
Arithmetik:
V
< 2e/|m⋅2e|2k
Charakteristik
n-2
Betrag der Mantisse
k-2
0
< 2e/2e2k
Wie Arithmetik normierter Gleitpunktzahlen:
< 1/2k
Addition/Subtraktion:
Exponentenangleich - Mantissen addieren/subtrahieren - neu normieren
Multiplikation/Division:
Exponenten addieren/subtrahieren - Mantissen mult./div. - neu normieren
(Gleichbleibend für alle Zahlen)
mit Ausnahmefällen:
Bereichsüberlauf oder -unterschreitung bei Darstellung des Exponenten
(„overflow“/“underflow“); z.B. bei Multiplikation sehr großer/kleiner Zahlen
72
Gleitpunktdarstellung mit n Bits
Gleitpunktdarstellung mit n Bits
Arithmetik:
V
Charakteristik
n-2
73
Arithmetik:
Ergebnisse von Gleitpunktberechnungen können u.U. erheblich
von dem exakten Wert abweichen!
Betrag der Mantisse
k-2
0
Auswege:
Große Rundungsfehler möglich:
durch Exponentenangleich bei Addition sehr unterschiedlich
großer Zahlen ((2-9+223)-223=0,2-9+(223-223)=2-9)
durch Stellenauslöschung bei Subtraktion gleich großer
Zahlen (1023((10-9+1)- 1)=0, 1023(10-9+(1-1))=1014)
74
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
Zeichendarstellungen
Arithmetik:
Grundidee:
Sonderrolle der 0:
Schritt 1:
Verwende Code-Tabelle zur Übersetzung von Zeichen in
Zahlen (ASCII, Unicode)
Keine nGP-Darstellung
arithmetische Sonderbehandlung (siehe IEEE-Standard)
Schritt 2:
Codiere alle Zahlen in 0en und 1en (binäres Zahlensystem)
exaktes Ergebnis 0 wird in der Regel nicht angenommen
 bei Abfragen:
nicht „r == 0“, sondern „|r| < ε “
nicht „x == y“, sondern „|x - y| < ε“
76
Zeichendarstellungen
77
Zeichendarstellungen
ASCII - Tabelle:
ASCII - Tabelle:
American Standard Code for Information Interchange
Das erste Bit verwendete man früher als Kontrollbit für die
Datenübertragung:
Gebräuchlichste Code-Tabelle für Computer
Auf 0 oder 1 gesetzt, je nachdem ob die Anzahl der 1-en an den übrigen 7
Bitpositionen gerade (even) oder ungerade (odd) ist
Alle wichtigen Zeichen der englischen Sprache von 0 bis 127
nummeriert (dargestellt durch Bits 2 bis 8)
Ergebnis: Gesamtanzahl der 1-en immer gerade (even parity).
Darunter: Auch „nicht druckbare“ Zeichen mit ausschließlich
formatierender Wirkung (z.B. Tabulatorzeichen, siehe auch CVorlesung)
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, …)
Folgerung: Erkenne, wenn bei Übertragung ein Bit verfälscht wurde
78
79
Zeichendarstellungen
Zeichendarstellungen
ASCII – Tabelle, Beispiele:
Zeichen
…
0
…
9
…
A
B
…
a
b
…
dezimal
…
48
…
57
…
65
66
…
97
98
…
Unicode – Tabelle:
binär
…
0110000
…
0111001 …
1000001
1000010
…
1100001
1100010
…
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
(Groß- und Kleinbuchstaben in alphabetischer Reihenfolge)
80
Zeichendarstellungen
81
Zeichendarstellungen
Unicode – Tabelle:
Unicode – Tabelle:
Verschiedene Versionen: UTF-32, UTF-16, UTF-8
Zeichen codiert gemäß UCS (Universal Character Set):
können alle den kompletten Zeichensatz darstellen
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
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
82
83
Zeichendarstellungen
Zeichendarstellungen
Unicode – Tabelle, Beispiel UTF-8 :
Unicode – Tabelle, Beispiel UTF-8 :
7-Bit ASCII-Zeichen:
werden mit einem Byte kodiert, in der Form 0<ASCII-Code>
Wird von Java unterstützt, aber im allgemeinen nicht von höheren
Programmiersprachen (auch nicht von C)
andere:
verwenden zwischen 2 und 4 Bytes
Code beginnt mit 1
1-Byte-Codes: 0xxx xxxx
2-Byte-Codes: 110x xxxx 10xx xxxx
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)
3-Byte-Codes: 1110 xxxx 10xx xxxx 10xx xxxx
4-Byte-Codes: 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
84
85
Zusammenfassung
Daten werden über dem Alphabet {0,1} codiert mit endlich
vielen Bits
Vorlesung Informatik I
Wir haben verschiedene Codierungen für unterschiedliche
Datentypen kennengelernt
Universität Augsburg
In den verschiedenen Codierungen können identische
Codeworte vorkommen
Wintersemester 2010/2011
Wie ein Codewort interpretiert wird, hängt von der Codierung
(also dem Datentyp) ab!
Prof. Dr. Robert Lorenz
Welche und wieviele Werte codiert werden (können), hängt von
der Anzahl der verwendeten Bits ab
86
Lehrprofessur für Informatik
Programmieren in C – Fallunterscheidungen
1
Inhalt
Inhalt
Motivation:
Motivation:
Bisher: Ausgeführte Anweisungen waren unabhängig von Daten
(z.B. Benutzereingabe)
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
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
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
2
Inhalt
3
Inhalt
Vorbereitung: Ausdrücke (formal)
Abhängig von Datenwerten soll ein Programm
unterschiedlichen Verlauf nehmen können
Bedingungen
Die Operation ?:
Bedingung
erfüllt
nicht erfüllt
Anweisung 1a
Anweisung 1b
Anweisung 2a
Anweisung 2b
…
…
Bedingte Anweisung: if-else
Fallunterscheidungen
Zeichen
4
5
Ausdrücke
Ausdrücke
Ausdrücke sind mittels Operationszeichen verknüpfte Variablen
und Konstanten zur Darstellungen von Rechenvorschriften
Ausdrücke sind mittels Operationszeichen verknüpfte Variablen
und Konstanten zur Darstellungen von Rechenvorschriften
Konstruktion von Ausdrücken:
Konstruktion von Ausdrücken:
Variablen und Konstanten sind Ausdrücke
Beispiele: laenge,breite,’\n’,3,-4e2,...
Ist op ein n-stelliges Operationszeichen und sind E1,…,En Ausdrücke
)
Ausdrücke können aus Variablen und Konstanten mit Hilfe von
Operationszeichen beliebig verschachtelt aufgebaut werden
+(3,*(5,6)), *(+(3,5),6)
passenden Typs, so ist op(E1,…,En) ein Ausdruck
Beispiele: *(laenge,breite),-(3,-4e2),...
6
Ausdrücke
7
Ausdrücke
Schreibweisen für Operationen (Infix-Notation):
Unär: statt op(E) schreibt man i.d.R. op E
Beispiel: -5
Auswertung
Ein Ausdruck hat einen Wert, der sich durch die Werte der
Variablen und Konstanten und der Auswertung der Operationen
ergibt
Binär: statt op(E1,E2) schreibt man i.d.R. E1 op En
op(E1,…,En) wird ausgewertet, indem
- zuerst E1,…,En ausgewertet werden
Beispiel: 3+5
- und dann op ausgewertet wird
Ausdrücke werden also von innen nach aussen ausgewertet
Auswertungsreihenfolge ist durch den Ausdruck gegeben
8
9
Ausdrücke
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
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
10
Ausdrücke
11
Ausdrücke
Auswertung
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
Bindungen arithmetischer Operationen:
*,/,% binden stärker als +,*,/,% binden gleich stark
+,- binden gleich stark
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
x * y / z % 2 entspricht ((x * y) / z) % 2
x + y / z - 2 entspricht (x + (y / z)) – 2
12
13
Ausdrücke
Ausdrücke
Auswertung
Die Auswertung eines Ausdrucks lässt sich gut durch einen sog.
Syntaxbaum ausdrücken
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
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}
Grafische Darstellung: Zeichne Pfeile zwischen Knoten
V={u,w}, F={(u,u),(u,w)}
u
w
u
w
14
Ausdrücke
15
Ausdrücke
Auswertung
Die Auswertung eines Ausdrucks lässt sich gut durch einen sog.
Syntaxbaum ausdrücken
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 v1,...,vn∈V gibt mit (v1,v2),...,(vn-1,vn),
(vn,v1)∈F (eine solche Folge heißt Zyklus)
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
Zyklus u
Verboten:
u
w
16
17
Ausdrücke
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
Blatt
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(E1,…,En)Kinder E1,…,En haben
Blatt
(Die Teilausdrücke eines Ausdrucks op(E1,…,En) sind E1,…,En
Wurzel
Blatt
Vater
und deren Teilausdrücke)
Kinder
18
Ausdrücke
Bedingungen
Auswertung
Beispiel: Syntaxbaum des Ausdrucks 2*x+5:
Eine Bedingung ist ein Ausdruck, der nur die Werte wahr und
falsch annehmen kann
Konstruktion von Bedingungen:
+(*(2,x),5)
*(2,x)
2
19
Mittels sog. Vergleichsoperatoren verknüpfte Ausdrücke sind
Bedingungen
5
Mittels sog. logischer Operatoren verknüpfte Bedingungen sind
Bedingungen
x
20
21
Bedingungen
Bedingungen
Vergleichsoperationen zur Konstruktion von Bedingungen:
Logische Operationen zur Verknüpfung komplexer 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 ==]
&&
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
22
Bedingungen
23
Bedingungen
Wahrheitstafeln
Das Verhalten logischer Operatoren lässt sich gut durch sog.
Wahrheitstafeln illustrieren
Wahrheitstafeln
Die Operanden können selbst wieder mit logischen
Operationen konstruierte komplexe Bedingungen sein
Eine Wahrheitstafel stellt die Auswertung einer logischen
Operation in Abhängigkeit vom Wahrheitsgehalt der Operanden
dar:
Auch deren Auswertung kann in die Wahrheitstafel integriert
werden
B
!B
B1
B2
B1&&B2
B1
B2
B1||B2
0
1
0
1
0
0
1
1
1
0
1
0
0
1
0
1
0
0
0
0
0
0
1
1
1
1
1
1
24
Mit Wahrheitstafeln lassen sich komplexe Bedingungen
auswerten
25
Bedingungen
?:-Operation
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))
3-stellige Operation zur situationsbedingten Ausführung einer
Anweisung
Syntax:
B ? E1 : E2
B
Bedingung
E1, E2
Ausdrücke
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))
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)
26
27
?:-Operation
?:-Operation
Beispiel (Ausgabe der größeren von zwei Zahlen)
3-stellige Operation zur situationsbedingten Ausführung einer
Anweisung: B ? E1 : E2
/* 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);
}
B
erfüllt
E1
nicht erfüllt
E2
28
29
Auswertungsreihenfolgen (bisher)
if-else
Unäre Operationen
binden stärker als arithmetische Operationen
Bisher:
?:-Operation für situationsabhängige Ausführung einer
Anweisung
Arithmetische Operationen
binden stärker als Vergleichsoperationen
Was, wenn man eine ganze Gruppe von Anweisungen
situationsabhängig ausführen möchte?
Vergleichsoperationen
binden stärker als logische binäre Operationen
Logische binäre Operationen
binden stärker als ?:-Operation
30
if-else
31
if-else
Ausführung von (mehreren) Anweisungen, falls eine Bedingung
wahr ist:
if (Bedingung) {
<Anweisungen>
}
Ausführung von (mehreren) Anweisungen, falls eine Bedingung
wahr ist: if (Bedingung) { <Anweisungen> }
Bedingung
erfüllt
Anweisung 1a
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
32
Anweisung 2a
…
33
if-else
if-else
Ausführung von alternativen Anweisungen abhängig vom
Wahrheitsgehalt einer Bedingung
Ausführung von alternativen Anweisungen abhängig vom
Wahrheitsgehalt einer Bedingung: if (Bedingung) {
<Anweisungen> } else { <andere Anweisungen> }
if (Bedingung) {
<Anweisungen>
}
else {
<andere Anweisungen>
}
Bedingung
erfüllt
Falls die Bedingung zutrifft, werden die Anweisungen im
if – Block ausgeführt, sonst die im else - Block
nicht erfüllt
Anweisung 1a
Anweisung 1b
Anweisung 2a
Anweisung 2b
…
…
34
if-else
35
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");
}
}
36
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");
}
}
37
if-else
if-else
Beispiel (jetzt auch Behandlung nicht sinnvoller Eingaben)
Beispiel (jetzt auch Behandlung ungültiger 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 { …}
}
}
/* 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");}
}
38
39
Fallunterscheidungen
if-else
Exkurs scanf:
Bisher:
Alternative Ausführung zweier Anweisungsblöcke
scanf hat einen Rückgabewert vom Typ int
Rückgabewert gibt an, wievielen Variablen durch die Eingabe
erfolgreich ein Wert zugewiesen wurde
Was, wenn man mehr als zwei Alternativen zur Verfügung hat?
Man kann diesen Wert in einer Bedingung überprüfen
Eingabe nur dann gültig, wenn allen Variablen ein Wert
zugewiesen werden konnte
40
41
Fallunterscheidungen
Fallunterscheidungen
Verschachtelung von if-else-Blöcken zur Auswahl aus
mehreren sich ausschließenden Alternativen:
Auswahl bezüglich vereinfachter Bedingungen aus mehreren
sich ausschließennden 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
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
42
Fallunterscheidungen
43
Zeichen
Bekannt:
/* 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");
}
}
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. ASCIITabelle an (siehe Kapitel zu Zeichendarstellungen)
44
45
Zeichen 0 - 127
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
46
Zeichen
47
Zeichen
Zeichen-Funktionen
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.
ctype.h
Deklaration verschiedener Zeichenfunktionen (u.a. toupper())
stdio.h-Funktion
Keine Eingabeparameter
Gibt das erste Zeichen des Standard-Eingabestroms zurück
Rückgabetyp: int
48
49
Zeichen
Zeichen-Funktionen
Vorlesung Informatik I
toupper(char c)
Universität Augsburg
Wandelt Kleinbuchstaben in Großbuchstaben um
Wintersemester 2010/2011
Eingabeparameter: ein Zeichen vom Typ char
Rückgabewert: Eingabewert umgewandelt in Großbuchstaben
(läßt Großbuchstaben unverändert, nicht für Umlaute und ß)
Prof. Dr. Robert Lorenz
Lehrprofessur für Informatik
Umwandlung in Kleinbuchstaben: tolower()
Programmieren in C – Wiederholungen
50
Inhalt
1
Inhalt
Motivation:
Motivation:
Bisher: Anweisungen werden höchstens einmal ausgeführt
Bisher: Anweisungen werden höchstens einmal ausgeführt
Jetzt: Anweisungen wiederholt ausführen
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
Anweisungen werden wiederholt, solange eine Bedingung gilt
2
3
Inhalt
Inhalt
Anweisungen wiederholt ausführen
Zählschleifen
Bedingungs-Schleifen
Bedingung
erfüllt
Aussetzen/Fortsetzen von Schleifen
nicht erfüllt
…
Anweisung 1
Anweisungsblöcke verschachteln
…
Eingabestrom leeren
Anweisung n
4
Zählschleifen
Zählschleifen
Anzahl der Wiederholungen steht fest
Anzahl der Wiederholungen steht fest
int i,n=...;
for(i=0;i<n;i=i+1) {
<Anweisungen>
}
int i=...,n=...;
i < n
erfüllt
Anweisung 1
5
nicht erfüllt
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
…
i=i+1
6
7
Zählschleifen
Zählschleifen
Allgemeine Form:
Allgemeine Form:
for(A;B;C) {
<Anweisungen>
}
for(A;B;C) {
<Anweisungen>
}
A legt Anfangswert einer Zählvariable fest
(erste ausgeführte Anweisung, Anfangswert ist beliebig)
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> }
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
9
Zählschleifen
Zählschleifen
Beispiel: Berechnung der Fakultät n! = 1 * 2 * … * n
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);
}
(1)
(2)
(3)
for(i=1; i<=n; i++) {
fak=fak*i;
}
Werte verfolgen per Tabelle:
Zeile
(1)
(2)
(3)
(1)
(2)
(3)
(1)
10
i
1
1
2
2
2
3
3
*
*
fak
1
1
1
1
1
2
2
2
n
2
2
2
2
2
2
2
2
(i<=n)
1
1
0
11
Zählschleifen
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);
}
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
12
Bedingungs-Schleifen
13
Bedingungs-Schleifen
Bisher:
Anzahl der Wiederholungen steht von vornherein fest
Anzahl der Wiederholungen steht nicht fest, Bedingung vor erster
Ausführung überprüft:
Jetzt:
Anzahl der Wiederholungen steht nicht von vornherein fest
Bedingung
erfüllt
Anweisung 1
Beispiel:
Summenberechnung ohne vorherige Eingabe der Anzahl der
Zahlen zu summierenden Zahlen:
viel benutzerfreundlicher!
Abbruch des Programms durch besondere Eingabe erlauben
nicht erfüllt
…
…
Anweisung n
14
15
Bedingungs-Schleifen
Bedingungs-Schleifen
Anzahl der Wiederholungen steht nicht fest, Bedingung vor erster
Ausführung überprüft:
Anzahl der Wiederholungen steht nicht fest, Bedingung vor erster
Ausführung überprüft:
while (Bedingung) {
<Anweisungen>
}
while (Bedingung) {
<Anweisungen>
}
Anweisungen werden solange wiederholt wie die Bedingung
erfüllt ist:
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
Anweisungen sollten dazu führen, dass die Bedingung nach
endlich vielen Wiederholungen nicht mehr zutrifft (sonst hat
man eine Unendlichschleife programmiert)
16
Bedingungs-Schleifen
17
Bedingungs-Schleifen
Beispiel: Flexibler Abbruch der Eingabe von Zahlen
for-Schleife durch while-Schleife ausdrücken:
/* 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++;
}
…
for(A;B;C) {
<Anweisungen>
}
entspricht
A;
while (B) {
<Anweisungen>
C;
}
18
19
Bedingungs-Schleifen
Bedingungs-Schleifen
Anzahl der Wiederholungen steht nicht fest, Bedingung nach
erster Ausführung überprüft:
Anzahl der Wiederholungen steht nicht fest, Bedingung nach
erster Ausführung überprüft:
do {
Bedingung
erfüllt
<Anweisungen>
} while (Bedingung);
nicht erfüllt
Anweisung 1
…
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!
Anweisung n
20
Bedingungs-Schleifen
21
Bedingungs-Schleifen
Beispiel: Flexibler Abbruch der Eingabe von Zahlen
Abbruch von Unendlichschleifen mit break:
/* 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);
scanf("%lf",&zahl);
summe=summe+zahl;
anzahl++;
} while (zahl != 0);
…
while(1) {
...
if (Bedingung) { break;}
...
}
Durch Ausführung von break wird die Schleife verlassen
22
23
Bedingungs-Schleifen
Bedingungs-Schleifen
Beispiel: Flexibler Abbruch der Eingabe von Zahlen
Fortsetzung von Unendlichschleifen mit continue:
/* 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++;
}
…
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
24
Bedingungs-Schleifen
Verschachtelung von Blöcken
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++;
}
…
25
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]
26
27
Verschachtelung von Blöcken
Verschachtelung von Blöcken
Wir kennen schon verschiedene sog. Anweisungsblöcke:
if- else-,for-,while-,do-Block
Wir kennen schon verschiedene sog. Anweisungsblöcke:
if- else-,for-,while-,do-Block
Nicht möglich ist es, Blöcke ineinander zu verschränken:
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
[Anfang Block 1] {
[Anfang Block 2] {
}[Ende Block 1]
}[Ende Block 2]
28
Eingabestrom leeren
29
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
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
Was this manual useful for you? yes no
Thank you for your participation!

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

Download PDF

advertisement