Algorithmierung und Programmierung Gliederung: Der Algorithmusbegriff Grenzen der Algorithmierbarkeit Grundlagen der Programmierung.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
Objektorientierte Programmierung
Forschungszentrum caesar
Einführung in die Programmierung Zusammenfassung
10. Grundlagen imperativer Programmiersprachen
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Imperative Programmierung
der Universität Oldenburg
der Universität Oldenburg
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Imperative Programmierung
Thema des Informatikkurses der Klasse 8
Das Java-Hamstermodell
Einführung in die Programmierung Datensammlung
Informatik Grundkurse mit Java

Prof. Dr. med. Stefan Schulz
Kapitel 1 – Erste Schritte
grundlagen der Wirtschafts- informatik
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
Algorithmen und Datenstrukturen Übungsmodul 1
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Programmieren - wie einsteigen ?
PHP: Operatoren und Kontrollstrukturen
Programmieren ... in C++ Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Das Java-Hamster-Modell
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Delphi Chars und Strings
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Extended Pascal ( Erweitreung von Pascal) Name: Mehmet CELIK Matr :
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Variablen und Datentypen
Pool Informatik, Sj 11/12 GZG FN W.Seyboldt 1 Pool Informatik 5 GZG FN Sj. 11/12 Kopieren, Daten, Programme.
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Class HelloWorldApp { public static void main(String[] args) {... } Grundkurs Inf - wie einsteigen ?
Wiederholte Programmausführung
Graphen.
Datentypen: integer, char, string, boolean
Aufgaben zu Rückgabewerten
Kontrollstrukturen von Algorithmen
Datentypen: integer, char, string, boolean
Klassen selbst programmieren
Felder in Java.
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Die Struktur einer Java-Klasse
Hexadezimale Darstellung von Zahlen
Unterschiedliche Kontrollstrukturen
SS 04 Christiane Rauh Christian Hellinger
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Unterschiedliche Arten von Kontrollstrukturen
Schleifen mit der Turtle
Algorithmen.
Implementieren von Klassen
Objektorientierte Programmierung
Datentyp- umwandlung.
 Präsentation transkript:

Algorithmierung und Programmierung Gliederung: Der Algorithmusbegriff Grenzen der Algorithmierbarkeit Grundlagen der Programmierung

Algorithmus Das Wort Algorithmus ist eine Abwandlung des Namens von Muhammed Al Chwarizmi (* ca. 783; † ca. 850), dessen arabisches Lehrbuch „Über das Rechnen mit indischen Ziffern“ (um 825) in der mittelalterlichen lateinischen Übersetzung mit den Worten „Dixit Algorismi“ begann. Im Mittelalter wurde daraus lateinisch „algorismus“ als Bezeichnung für die Kunst des Rechnens mit den arabischen Ziffern und als Titel für Schriften über diese Kunst.

Definition Eine Berechnungsvorschrift zur Lösung eines Problems heißt genau dann Algorithmus, wenn eine zu dieser Berechnungsvorschrift äquivalente Turingmaschine existiert, die für jede Eingabe, die eine Lösung besitzt, stoppt. ?

Eigenschaften Aus der Definition sind folgende Eigenschaften eines Algorithmus ableitbar: Das Verfahren muss in einem endlichen Text eindeutig beschreibbar sein (Finitheit). Jeder Schritt des Verfahrens muss auch tatsächlich ausführbar sein (Ausführbarkeit).

Eigenschaften Das Verfahren darf zu jedem Zeitpunkt nur endlich viel Speicherplatz benötigen (Dynamische Finitheit). Das Verfahren darf nur endlich viele Schritte benötigen (Terminierung).

Eigenschaften Der Algorithmus muss bei denselben Voraussetzungen das gleiche Ergebnis liefern (Determiniertheit). Die nächste anzuwendende Regel im Verfahren ist zu jedem Zeitpunkt eindeutig definiert (Determinismus).

Definition Ein Algorithmus ist eine Verarbeitungsvorschrift, die aus einer endlichen Folge von eindeutig ausführbaren Anweisungen besteht. Unter gleichen Voraussetzungen liefert die Ausführung eines Algorithmus stets gleiche Ergebnisse. → Endlichkeit → Eindeutigkeit → Ausführbarkeit Merkmale

Beispiel Der Algorithmus auf der folgenden Folie beschreibt die Verschlüsselung eines Textes nach dem Vigenère-Verfahren. Verschlüssle einen kurzen Text mit diesem Verfahren und übergib ihn deinem rechten Nachbar (mit Schlüssel)! Entwerfe einen entsprechenden Algorithmus zur Entschlüsselung und dekodiere damit die Nachricht deines linken Nachbarn!

1.Wähle ein Schlüsselwort. 2.Ersetze im Text und im Schlüsselwort alle Umlaute (ä → ae, ö → oe und ü → ue) und ß ( → ss). 3.Schreibe das Schlüsselwort immer wieder unter den zu verschlüsselnden Text, bis unter jedem Buchstaben des Textes ein Buchstabe des Schlüsselwortes steht. 4.Ordne jedem Buchstaben des Schlüsselwortes seinen Platz im Alphabet zu (A = 1, B = 2,..., Z = 26). 5.Verschiebe die Buchstaben des zu verschlüsselnden Wortes um diese Zahl. Wenn du dabei das Ende des Alphabets erreichst, beginne von vorn.

z.B. Klartext: I c h b i n g e n i.. Positionen: Schlüsselwort: N a s e n b a e r N.. Positionen: Versch. auf: bei > 26: 1 6 Schlüsseltext: W d a g w p h j f w.. A = 1, B = 2, C = 3, D = 4, E = 5, F = 6, G = 7, H = 8, I = 9, J = 10, K = 11, L = 12, M = 13, N = 14, O = 15, P = 16, Q = 17, R = 18, S = 19, T = 20, U = 21, V = 22, W = 23, X = 24, Y = 25, Z = 26 A = 1, B = 2, C = 3, D = 4, E = 5, F = 6, G = 7, H = 8, I = 9, J = 10, K = 11, L = 12, M = 13, N = 14, O = 15, P = 16, Q = 17, R = 18, S = 19, T = 20, U = 21, V = 22, W = 23, X = 24, Y = 25, Z = 26

Grenzen der Algorithmierbarkeit Alle Probleme, die sich mit Hilfe von Computern lösen lassen, basieren auf Algorithmen. Für manche Aufgaben sind Computer ungeeignet, weil: sie nicht durch Algorithmen beschreibbar sind. der Rechenaufwand zu hoch währe.

Grundlagen der Programmierung Gliederung: Modellierung eines Hamsters Der Hamstersimulator Das erste Programm

Der Feldhamster Feldhamster sammeln im Sommer ca. 60 kg Vorräte für den Winter. Im Winter schlafen sie und werden zwischendurch wach und fressen von ihren Vorräten. Der Hamster benutzt seine Backentaschen als Tragetaschen. Er schnappt sich Kornähren und zieht sie zwischen seinen Zähnen durch. Dabei streift er sich die Samenkörner in den Mund. Wenn seine Backentaschen voll sind, schleppt er den Inhalt in seinen Bau. In seine Backentaschen passen ca. 50 Gramm. Das ist ein Zehntel von seinem Körpergewicht. Ein Feldhamster ist etwa 34 cm lang. Ein Feldhamster bekommt 2 – 3 mal im Jahr 4 bis 12 Junge. Der Feldhamster (Cricetus cricetus) gehörte früher zu den häufigsten Kleinsäugetieren Deutschlands und wurde noch bis in die 70er Jahre hinein für eine Plage gehalten. Deshalb wurde er Jahrzehnte lang verfolgt. Bei der Pelzindustrie war er wegen seines weichen Fells auch sehr beliebt. Zusätzlich wurden durch die intensive Bebauung seiner Lebensräume und die veränderte Landwirtschaft die Bestände massiv dezimiert. Die Bestandssituation in Europa ist heute von Zusammenbrüchen der Populationen und Inselbildung gekennzeichnet, aus vielen Gegenden, in denen er traditionell sehr häufig vorkam, ist er heute meist völlig verschwunden. Dadurch, dass die heutige Landwirtschaft durch die frühe und gründliche Ernte dem Hamster Nahrung und Versteckmöglichkeiten nimmt, fällt er besonders häufig seinen Fressfeinden zum Opfer.

Modellierung Klasse Hamster Zeile, Spalte //Standort Blickrichtung Anzahl Körner im Maul vor()// Hüpfe eine Kachel in Blickrichtung. linksUm()// Drehe dich um 90 Grad nach links. nimm()// Nimm von der Kachel, auf der du gerade stehst, ein Korn auf. gib()// Lege auf die Kachel, auf der du ge- rade stehst, ein Korn aus deinem Maul. vornFrei()// Entscheide, ob vor() möglich ist! kornDa()// Entscheide, ob nimm() möglich ist! maulLeer()// Entscheide, ob gib() möglich ist! Instanz Hamster Willy Zeile 2, Spalte 5 Blickrichtung Ost Anzahl Körner im Maul: 3 vor() linksUm() nimm() gib() vornFrei() kornDa() maulLeer()

Der Hamstersimulator Editor Hamsterp rogramm Hamsterter ritorium

Der Hamstersimulator Funktionen des Programms: Verwalten und Editieren von Hamster- Programmen Compilieren von Hamster-Programmen Verwalten und Gestalten von Hamster- Territorien Ausführen von Hamster-Programmen Debuggen von Hamster-Programmen

Hinweise Die Dateiverwaltung erfolgt auf Betriebssystemebene. Die selbst entwickelten Hamster-Programme sowie die Hamster-Territorien werden auf Betriebssystemebene in Dateien abgespeichert. Diese Dateien finden Sie in einem Ordner namens ~/Programmierung/Javahams- ter/Programme Dateien mit Sourcecode von Hamster-Programmen haben die Endung.ham. Dateien mit Hamster-Territorien haben die Endung.ter.

Hinweise Ansonsten gibt es noch Dateien mit der Endung.java und.class. Diese werden beim Kompilieren generiert und enthalten Java-Sourcecode (.java) bzw. ausführbaren Java-Bytecode (.class). Funktionen zum Verwalten dieser Dateien (Umbenennen, Kopieren, Verschieben, neuen Ordner erzeugen usw.) können Sie auch auf Betriebssystemebene durchführen. Sie sollten dies jedoch nicht tun, wenn der Hamster- Simulator gestartet ist, da es ansonsten zu Inkonsistenzen kommen kann.

Das erste Programm

Kontrollstrukturen Eine einfache Abfolge von Anweisungen ist nicht ausreichend, um den Hamster auf bestimmte Situationen (Korn da oder nicht, vorn frei oder nicht...) angemessen reagieren zu lassen. Für solche Fälle existieren Kontrollstrukturen wie z.B. Selektionen oder Schleifen, die es ermöglichen, in Abhängigkeit von erfüllten Bedingungen Anweisungen (mehrmals) auszuführen.

Selektion (Auswahl) Bei der Selektion werden eine oder mehrere Aktionen nur dann ausgeführt, wenn eine bestimmte Bedingung erfüllt ist (bedingte Auswahl). → if... then... Eine Erweiterung ist die alternative Auswahl, bei der zusätzlich andere Aktionen ausgeführt werden, wenn die Bedingung nicht erfüllt ist. → if... then... else

Darstellung als Struktogramm: bedingte Auswahl Beispiel: Willy soll immer dann, wenn ein Korn da liegt, dieses aufnehmen: willy.kornDa() ja willy.nimm() Programmcode: if (willy.kornDa()) {willy.nimm(); }

alternative Auswahl willy.kornDa() janein willy.nimm()willy.gib() Beispiel: Willy soll immer dann, wenn ein Korn da liegt, dieses aufnehmen. Falls keins daliegt soll er eins ablegen: if (willy.kornDa()) {willy.nimm(); } else {willy.gib(); }

Anwendung Programmiere einen Hamster, der ein Feld vorrückt und dort ein Korn aufnimmt, wenn eins da ist. Erweitere dieses Programm so, dass der Hamster ein Korn hinlegt, wenn keins da ist. Der Hamster soll nun das ganze Feld von links nach rechts durchqueren und auf jedem Feld ein Korn aufnehmen bzw. ablegen. Welches Problem ergibt sich dabei?

Lösung Problem: gesamter Block muss mehrfach wiederholt werden.

Schleifen Schleifen wiederholen Anweisungsblöcke. Die Anzahl der Wiederholungen kann vorher festgelegt werden oder vom Erfüllen einer Bedingung abhängig sein. Die while-Schleife führt einen Anweisungsblock solange aus wie die Bedingung erfüllt bleibt. Je nach Konstruktionsart kann der Anweisungsblock bei nicht erfüllter Bedingung gar nicht oder mindestens einmal ausgeführt werden.

while-Schleife als Abweisschleife Beispiel: Willy soll immer ein Feld vorrücken, solange das Feld vor ihm frei ist: solange willy.vornFrei() willy.vor() als Nichtabweisschleife while (willy.vornFrei()) {willy.vor(); } do {willy.vor(); } while (willy.vornFrei()); Welcher Unterschied besteht zwischen beiden Versionen?

Anwendung Verbessere das letzte Programm (Der Hamster soll das ganze Feld von links nach rechts durchqueren und auf jedem Feld ein Korn aufnehmen bzw. ablegen.) so, dass der Anweisungsblock mit Hilfe einer while-Schleife wiederholt wird. Teste beide Varianten (Abweis- und Nichtabweisschleife). Was passiert, wenn die Körner im Maul alle sind und eins abgelegt werden soll?

Lösung 1

Lösung 2

Datentypen Ein Datentyp ist die Zusammenfassung von Wertebereichen und Operationen zu einer Einheit. (= Definition) In Programmiersprachen benutzt man z.B. die folgenden konkreten Datentypen: Ganze Zahl, Zeichen, Wahrheitswert, rationale Zahl, Feld, Zeichenkette, Verbund und Zeiger Zu jedem dieser Datentypen gibt es in der Programmiersprache typische Funktionen.

(siehe nächste Folie) Überblick Datentypen Datentypen einfachezusammengesetzte ordinal (abzählbar) nicht ordinal ganze Zahl (integer, int) Beispiele: 3 – Zeichen (char) Beispiele: e R ? 5 Wahrheitswert (boolean) Beispiele: true false rationale Zahl (real, float) Beispiele: –

Übersicht Datentypen Datentypen einfachezusammengesetzte Feld, Reihung (array) Abbildung von zusammengehörig en Daten eines Typs in eine Liste, Tabelle o.ä. Zeichenkette (string) Beispiele: 'Hallo Welt' '08A3F' '2365' 'a b c' Verbund (record) Zusammenfassu ng von Datenelementen zu Datensätzen Zeiger (pointer) dynamischer Datentyp

Eigene Prozeduren Hamster Willy soll das ganze Feld reihenweise ablaufen. Das Hauptprogramm könnte wie folgt lauten: Hamster willy; void main() { willy = Hamster.getStandardHamster(); while(willy.vornFrei()) { doppelreiheAblaufen(); } }

Eigene Prozeduren Die Prozedur doppelreiheAblaufen ist nicht vordefiniert und muss selbst programmiert werden, z.B.: void doppelreiheAblaufen() { vorwaerts(); rechtsUm(); willy.vor(); rechtsUm(); vorwaerts(); willy.linksUm(); willy.vor(); willy.linksUm(); } Ebenso müssen vorwaerts und rechtsUm selbst programmiert werden.

Eigene Prozeduren void vorwaerts() { while (willy.vornFrei()) { willy.vor(); } } void rechtsUm() { willy.linksUm(); }

Eigene Prozeduren Löse folgende Aufgabe unter Verwendung eigener Prozeduren! Dein Hamster soll das gesamte Feld nach Körnern absuchen, diese aufnehmen und auf dem letzten Feld ablegen. Stellt eure Varianten vor und diskutiert sie!

Definition und Merkmale eines Algorithmus (siehe Folie 7) Ablauf der Modellierung (siehe Folie 14) Kontrollstrukturen (Anwendung, Struktogramm und Programmcode) Selektion (bedingte und alternative Auswahl, Folien 20 bis 25) Schleifen (Folien 26 – 30) Datentypen (Einteilung, Beispiele, siehe Folien 31 – 33) Schwerpunkte LK