Praktische Informatik 1

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

Kurzwiederholung Informatik I, Teil I: Grundkonzepte
ALP II: Objektorientierte Programmierung Sommersemester 2006
Programmierung: Einführung
Befehlssatz und Struktur
Forschungszentrum caesar
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Lösung 7.1 Syntax und Semantik
CPU, Programmausführung
Formale Sprachen – Mächtigkeit von Maschinenmodellen
Entwicklung der Programmiersprachen
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Aufbau und Funktionsweise von Prozessoren
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Zusammenfassung Vorwoche
High Performance = Innovative Computer Systems + Efficient Algorithms Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Modulare Programmierung
Einführung Inhalte dieses Kurses Generationen der Programmiersprachen
Programmieren mit MS Small Basic
Dateien Datei = File (engl.) Mögliche Inhalte einer Datei
Entwicklung der Programmiersprachen
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung
Grundlagen der Informatik 4 Lehrstuhl für Betriebssysteme 1 Wie werden Funktionen realisiert? Beispiel: int maximum(int x, int y) { int j = x; if (y >
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
2.4 Rekursion Klassifikation und Beispiele
Programmieren in C Einführung
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Algorithmen und Datenstrukturen Übungsmodul 8
Verzweigungen in Delphi
Programmieren in Assembler
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Johann Baron von Neumann
programmieren des casio FX-7400GII
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/ Übungsaufgabe vom Logische Ausdrücke 1.true & false | true 2.(10>2)
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Sprachen und Programmiersprachen
Tobias Sammet 8DY1 Programmieren Tobias Sammet 8DY2 Programmierung ● = das Schreiben eines Computerprogramms ● Dient zur Lösung eines.
Aufbau und Funktionsweise einer CPU
Kurswahlen Einführungsphase
Praktische Informatik 1
Programmieren in C Einführung
Klausur „Diskrete Mathematik II“
2.4 Rekursion Klassifikation und Beispiele
Gliederung 0. Motivation und Einordnung 1. Endliche Automaten
Variable Beim Ausschalten gehen alle in den Variablen gespeicherten Informationen verloren! Zweck: Speichern von Informationen, z. B. Zahlen Modellvorstellung:
Einführung in die Programmierung
Durchschnitt (verbal)
Nksainf.ch/oinf.
Vom HW-Automaten zum Prozessor
Grundlagen der Rechnerarchitektur [CS ]
Kurswahlen Einführungsphase
Prof. J. Walter Bitte römische Zahlen im Geschichtsunterricht!
Einführung in die Programmierung
Algorithmen.
Implementieren von Klassen
Objektorientierte Programmierung
Einführung in die Programmierung
 Präsentation transkript:

Praktische Informatik 1 Prof. Dr. H. Schlingloff 26. 11. 2007

Zu 2.3 Darstellung von Algorithmen Beispiel: Wechselgeldbestimmung Eingabe: Preis p, Ausgabe: Wechselgeld w auf 5 Euro (nur 10c-,20c-,50c-Münzen, möglichst wenige). 1. Darstellung in natürlicher Sprache „Die Rückgabe enthält maximal eine 10-Cent-Münze, zwei 20-Cent-Münzen, und den Rest in 50-Cent-Münzen. 10-Cent werden zurückgegeben, falls dies nötig ist, um im Nachkommabereich auf 0, 30, 50, oder 80 Cent zu kommen. Eine oder zwei 20-Cent-Münzen werden zurückgegeben, um auf 0, 40, 50 oder 90 Cent zu kommen. Wenn der Nachkommaanteil 0 oder 50 ist, werden nur 50-Cent-Münzen zurückgegeben.“

2. Darstellung als nichtdeterministischer Pseudo-Code Sei w={} Multimenge; Solange p<5 tue [] erste Nachkommastelle von p {2,4,7,9}: p = p + 0.10, w = w  {10c} [] erste Nachkommastelle von p {1,2,3,6,7,8}: p = p + 0.20, w = w  {20c} [] erste Nachkommastelle von p {0,1,2,3,4,5}: p = p + 0.50, w = w  {50c} Ergebnis w Keine feste Syntax, es dürfen nur Sprachelemente verwendet werden, deren Bedeutung klar definiert ist. Berechnungsbeispiel: p=3.20, w={}  p=3.70, w={50c}  p=3.80, w={50c, 10c}  p=4.30, w={50c, 10c, 50c}  p=4.50, w={50c, 50c, 10c, 20c}  p=5.00, w={50c, 50c, 50c, 20c, 10c}

3. Darstellung mathematisch-rekursiv  {}, falls p=5   0,50+Wechselgeld (p+0.50), falls p5 und 5-p  0.50 Wechselgeld (p)=   0,20+Wechselgeld (p+0.20), falls p5, 5-p < 0.50 und 5-p  0.20  0,10+Wechselgeld (p+0.10), sonst Beispiel zum Berechnungsablauf: Wechselgeld(3.20) = 0.50+Wechselgeld(3.70) = 0.50+0.50+Wechselgeld(4.20) = 0.50+0.50+0.50+Wechselgeld(4.70) = 0.50+0.50+0.50+0.20+Wechselgeld(4.90) = 0.50+0.50+0.50+0.20+0.10+Wechselgeld(5.00) = 0.50+0.50+0.50+0.20+0.10

Schreibweise der Informatik: Syntax gemäß den Regeln der Mathematik bzw. Logik, jederzeit erweiterbar. Semantik klar definiert. Schreibweise der Informatik: Wechselgeld (p) = Falls 5-p=0 dann Rückgabe({}) sonst falls 5-p  0.50 dann Rückgabe(0.50+Wechselgeld(p+0.50)) sonst falls 5-p  0.20 dann Rückgabe(0.20+Wechselgeld(p+0.20)) sonst Rückgabe(0.10+Wechselgeld(p+0.10))

als bc-Programm define wg(p){ if (5-p==0) return(0) else if (5-p>=0.50) return(100+wg(p+0.50)) else if (5-p>=0.20) return(10+wg(p+0.20)) else return(1+wg(p+0.10))} Darstellung des Ergebnisses: dreistellige natürliche Zahl (erste Stelle Anzahl der 50-Cent-Münzen, zweite ist Anzahl der 20-Cent-Münzen, letzte 10-Cent-Münzen) wg(2.70) 411 wg(3.10) 320

4. Darstellung als Ablaufdiagramm oder Flussdiagramm Start Int(Fract(p)*10)  {2,4,7,9}? w+={10c} p +=0.1 w={} Int(Fract(p)*10)  {1, 6}? w+={20c} p +=0.2 Int(Fract(p)*10)  {3, 8}? p < 5 ? w+={50c} p +=0.5 Stop n y

Prinzipiell ein endlicher Automat Prinzipiell ein endlicher Automat! (mit Variablen, Bedingungen, Zuweisungen, …) Ausführungsbeispiel p=3.20, w={}  p=3.30, w={10c}  p=3.50, w={10c, 20c}  p=4.00, w={10c, 20c, 50c}  p=4.50, w={10c, 20c, 50c, 50c}  p=5.00, w={10c, 20c, 50c, 50c, 50c}

5. Darstellung als Java-Programm static int fünfzigCentStücke(double p) { return (int)((5 - p) * 10 / 5) ;} static int zehnCentStücke(double p) { int cent = (int)((p-(int)(p)) * 100); return((cent==20 || cent==40 || cent==70 || cent==90) ? 1 : 0) ;} static int zwanzigCentStücke(double p) { int tencent = (int)((p-(int)(p)) * 10); int[] coins = {0,2,1,1,0,0,2,1,1,0}; return coins[tencent] ;} Syntax und Semantik: eindeutig definiert jedes Java-Programm determiniert und deterministisch terminiert für jede Eingabe Korrektheit bleibt zu beweisen

6. Darstellung als Assemblerprogramm Ursprünglich: Programmierung durch Eingabe einer Folge von Maschinenbefehlen Assemblersprachen: menschenlesbare Varianten von Maschinensprachen Maschinenbefehle in mnemotechnischer Form niedergeschrieben symbolische Referenzierung: Häufig verwendete Adressen (Nummern von Speicherzellen) können mit Namen versehen werden indirekte Adressierung: Inhalt einer Speicherzelle enthält Adresse einer anderen Speicherzelle verfügbaren Befehle hängen von der Art der zu programmierenden Maschine ab Typische Assemblerbefehle: mov rx ry (Bedeutung: transportiere / kopiere den Inhalt von rx nach ry) jgz rx lbl (Bedeutung: wenn rx größer als Null, gehe zur Sprungmarke lbl)

6. Darstellung als Assemblerprogramm // Eingabe: Preis in Register p in Cent (wird zerstört) // Ergebnisse in fc, zc, tc (fünfzigCent, zwanzigCent, tenCent) mov 0, fc mov 0, zc mov 0, tc loop: mov p, ac // lade p in den Akkumulator sub ac, 450 // subtrahiere 450 jgz hugo // jump if greater zero to hugo add ac, 500 // addiere 500 mov ac, p // speichere Akkumulator nach p mov fc, ac add ac, 1 mov ac, fc // fc := fc + 1 goto loop hugo: mov p, ac // wie oben sub ac, 480 jgz erna add ac, 500 mov ac, p mov zc, ac add ac, 1 mov ac, zc goto hugo erna: mov p, ac sub ac, 490 jgz fertig mov 1, tc fertig:

7. Darstellung als Maschinenprogramm Maschinenprogramm: Folge von Befehlen, die direkt von einer Maschine eines dafür bestimmten Typs ausgeführt werden kann Jedem Assemblerbefehl entspricht eine bestimmte Anzahl von Bytes im Maschinenprogramm.

Programmiersprachen Programm = Repräsentation eines Algorithmus in einer Programmiersprache Syntax von Programmiersprachen (JAVA, C, Delphi, Ada, …) im Allgemeinen durch kontextfreie Grammatik. Maschinen- und Assemblersprachen: sehr einfache Sprachen (durch reguläre Grammatiken definiert); Programmieren in Assembler außerordentlich fehleranfällig Höhere Programmiersprachen: nicht an Maschinen, sondern an den Problemen orientiert (Prolog, …) Interpreter: Programm zur Ausführung von Programmen einer höheren Programmiersprache auf einem Rechner Compiler: Programm zur Umformung eines Programms aus einer höheren Sprache in eine Folge von Maschinenbefehlen

Programmiersprachen (Forts.) Bei einigen Prgrammiersprachen (Java, C#, UCSD-Pascal): zunächst Übersetzung in die Maschinensprache einer virtuellen Maschine, d.h. einer nicht in Hardware realisierten Maschine, welche daher unabhängig von einer speziellen Hardwaretechnologie ist. Ausführung von Maschinenprogrammen der virtuellen auf einer realen Maschine erfolgt von speziellen Interpretern Spezifikationssprachen: Beschreibungssprachen, die einer maschinellen Behandlung nicht direkt zugänglich sind und von Menschen in Programme überführt werden müssen