Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.

Slides:



Advertisements
Ähnliche Präsentationen
Vom Bildungsplan zum Stundenthema
Advertisements

Schnelle Matrizenoperationen von Christian Büttner
Das LCA – Problem in Suffixbäumen
Suche in Texten (Stringsuche )
3. Kapitel: Komplexität und Komplexitätsklassen
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Berechnung und Vereinfachung von Termen
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
Algorithmus Teilziel: Begriff des Algorithmus verstehen.
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
Widersprüche in Gesprächen, im Leben, im Menschen in Systemen,...
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
ARRAY oder FELD oder VEKTOR
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
ARRAY oder FELD oder VEKTOR
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Kapitel 5 Stetigkeit.
Kapitel 2 Die rationalen und die irrationalen Zahlen.
Schwierigkeitsgrad III 6 X - 7 = X
Imperative Programmierung
handlungsorientierte Zugänge zur Algebra
Beschreibung von Abläufen (IKARUS S109)
Gymnasium Horn – Bad Meinberg
Kakuro Regeln und Strategien
Einführung in die Programmiersprache C 1
Zahlenmengen.
Bruchrechenregeln Los geht´s Klick auf mich! Melanie Gräbner.
Effiziente Algorithmen
§3 Allgemeine lineare Gleichungssysteme
Polynome und schnelle Fourier-Transformation
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
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 ins Lösen von Gleichungen
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Rechnen mit Brüchen Kamyla A. Barrientos P, 5B.
PHP: Operatoren und Kontrollstrukturen
Vertauschungs-, Verbindungs-, Verteilungsgesetz
Rechnen mit negativen Klammern
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Lineare Gleichungen Allgemeine Einführung Äquivalenzumformungen
Rechnen mit negativen Klammern
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Vorstellen und Herleiten der Horner Schemas
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tageszähler).Wenn.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Reihenfolge der Operatoren
Was sind Zuordnungen? Werden zwei Größenbereiche in Beziehung gesetzt, entstehen Zuordnungen. Ihre zeichnerische Darstellung in einem Koordinatensystem.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Lineare Optimierung Nakkiye Günay, Jennifer Kalywas & Corina Unger Jetzt erkläre ich euch die einzelnen Schritte und gebe Tipps!
mаtheguru.one Tipps und Lösungen zu Matheaufgaben aus Schulbüchern
Gleichung und ihre Lösung
Variable Beim Ausschalten gehen alle in den Variablen gespeicherten Informationen verloren! Zweck: Speichern von Informationen, z. B. Zahlen Modellvorstellung:
Laufzeitverhalten beim Sortieren
kleinstes gemeinsames Vielfaches – größter gemeinsamer Teiler
Tutorium Programmieren I.
Was kann man mit Zahlen anfangen?
Grundlagen und Grundbegriffe
LernBar LU 16: Zehn hoch.
REKURSION + ITERATION.
Datentyp- umwandlung.
Grundschule Oberasbach Siegbert Rudolph
Rechenausdrücke (Terme) – Fachbegriffe - Rechenregeln
 Präsentation transkript:

Algorithmus

Ein Kochrezept, zum Beispiel:

Kartoffelbrei

Aus welchen zwei Teilen besteht ein Kochrezept ? Frage:

Zutaten : 2 Kg Kartoffeln, 0,5 l Milch, 200 gr Butter, 1 TL Salz, 1 TLPfeffer, 1TL Muskat

Kartoffeln schälen, zerkleinern und in Salzwasser gar kochen. Mit dem Mörser zerstampfen und unter Hinzufügen der Butter und Milch mit dem Schneebesen schaumig schlagen und würzen. Zubereitung :

Ein Algorithmus ist - salopp ausgedrückt - ein Kochrezept

Präziser:

Ein Algorithmus ist ein Verfahren zur Lösung eines gegebenen Problems. Er hat folgende Eigenschaften:

schrittweise eindeutig endlich

Was "schrittweise" bedeutet, muss in der konkreten Situation geklärt werden: Bei einem modernen Rechner bedeutet ein Schritt z.B: - Addition zweier Zahlen - Subtraktion zweier Zahlen - Multiplikation zweier Zahlen - Division zweier Zahlen - Vergleich zweier Zahlen mit, Ein Schritt ist z.B. nicht der Vergleich dreier Zahlen wie z.B: 3 < 5 < 2

Aufgabe: Geben Sie ein Beispiel eines nicht endlichen "Kochrezepts":

Auf der Suche nach einer Genehmigung in irgendeinem Amt:

Der Pförtner schickt Sie ins Zimmer 10.

Vom Zimmer 10 werden Sie ins Zimmer 17 geschickt.

Vom Zimmer 17 werden Sie ins Zimmer 10 geschickt.

10 17

Welche Algorithmen haben Sie bis jetzt in der Schule kennengelernt ? Frage:

- addieren, subtrahieren - multiplizieren, dividieren, - wurzelziehen - kgV - ggT

Darstellungsmöglichkeiten eines Algorithmus

Flußdiagramm Programmiersprache (z.B. C++)

Elemente des Flußdiagramms

Anfang bzw. Ende Anfang Ende

Eingabe bzw. Ausgabe

Anweisung

Fallunterscheidung (Verzweigung) Bedingung falsch wahr

kurz: Bedingung f w

Flußrichtung

Variablen (technisch gesehen sind dies Stellen im Arbeitsspeicher). Zum Beispiel wird eine Eingabe in einer Variablen gespeichert.

Unter einer Variablen kann man sich einen Behälter vorstellen. In diesem Behälter wird ein Wert gespeichert (z.B. eine bestimmte Menge Flüssigkeit). Diese Menge bleibt solange konstant in diesem Behälter, solange sie nicht verändert wird. Diese Eigenschaft nennt man speichern. Es "verdunstet" deshalb auch nichts.

Jede Variable hat einen Namen, den der Programmierer vergibt. z1z2 Inhalt der Variablen z1 Inhalt der Variablen z2 Namen einer Variablen

Einer Variablen kann man einen Wert zuweisen (der Behälter kann gefüllt werden). Zum Beispiel: Der Variablen b wird der Inhalt 0,5 zugewiesen (Der Behälter wird mit 0,5 gefüllt). b := 0,5 Das Zeichen := bedeutet soviel wie "der Wert rechts von := wird der linken Variablen zugewiesen" und ist auf keinen Fall mit dem aus der Mathematik bekannten Gleichheitszeichen = zu verwechseln ! WICHTIG: Vor dieser Zuweisung hat die Variable b einen unbekannten Wert. Man sagt, die Variable hat einen undefinierten Wert. b 0,5

Einer Variablen kann man einen Wert zuweisen (der Behälter kann gefüllt werden). Zum Beispiel: b := 0,5 Links des Zeichens := muss genau eine Variable stehen. Rechts davon muss ein Wert oder ein aus Variablen (und Werten) bestehender Term stehen, wie z.B. x+y*z oder x * 2 b 0,5 Wichtig: Umgekehrt gemacht, ist es falsch: 0,5 := b oder x + y + z := b ist falsch.

Der Variablen b wird der Inhalt 0,3 zugewiesen. Der alte Wert von 0,5 wird überschrieben und geht verloren. b := 0,3 b Was bewirkt die gleich folgende weitere Anweisung ? b := 0,5 0,5

Der Variablen b wird der Inhalt 0,3 zugewiesen. Der alte Wert von 0,5 wird überschrieben und geht verloren. b := 0,3 b Was bewirkt folgende weitere Anweisung ? b := 0,5

Der Variablen b wird der Inhalt 0,3 zugewiesen. Der alte Wert von 0,5 wird überschrieben und geht verloren. b := 0,3 b Was bewirkt folgende weitere Anweisung ? b := 0,5 0,3

b = 0,3 b Was würde das Gleichheitszeichen = bewirken ? b = 0,5 0,3 Man sieht jetzt auch genau, was passieren würde, wenn man in der letzten Folie statt := das Gleichheitszeichen = verwenden würde. Was würde mathematisch oben aus den zwei Gebilden folgen ? 0,5 = 0,3 Also:

Welche Werte haben die Variablen g und h ? g h

g h ? ?

Was bewirkt folgende Anweisung ? g := 0,3 g h ? ?

g h ? Was bewirkt folgende Anweisung ?

g := 0,3 g h 0,3 ? Was bewirkt folgende Anweisung ?

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,3 ? h := 0,5

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,3 h := 0,5

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,50,3 h := 0,5

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,50,3 h := 0,5 g := h

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,5 h := 0,5 g := h

Was bewirkt folgende weitere Anweisung ? g g := 0,3 h 0,5 Der Wert von h - also 0,5 - wird von h in den Behälter g kopiert (nicht geleert, also nicht verschoben). Der alte Wert von g wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht). D.h. nur der Wert der linken Variablen wird verändert. Der Wert der rechten Variablen bleibt unverändert. Dies entspricht also z.B. nicht den Erfahrungen eines durstigen, aber wenig Geld besitzenden Besuchers einer Trinkherberge, der in einem günstigen Augenblick den Inhalt des benachbarten Bierglases in den des seinen verschiebt. h := 0,5 g := h

Bitte folgende Regel einhalten: Anfangsbuchstabe eines Variablennamens immer klein schreiben. Dies ist dem Compiler zwar egal, doch an diese Regel halten sich alle Programmierer.

Ein weiteres Beispiel:

Welche Werte haben die Variablen g und h ? g h

g h ? ?

Was bewirkt folgende Anweisung ? g := 0,3 g h ? ?

g h ? Was bewirkt folgende Anweisung ?

g := 0,3 g h 0,3 ? Was bewirkt folgende Anweisung ?

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,3 ? h := 0,5

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,3 h := 0,5

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h 0,50,3 h := 0,5

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h h := 0,5 h := g 0,3 0,5

Was bewirkt folgende weitere Anweisung ? g := 0,3 g h h := 0,5 h := g 0,3

Was bewirkt folgende weitere Anweisung ? g g := 0,3 h 0,3 Der Wert von g - also 0,3 - wird von g in den Behälter h kopiert (nicht geleert, also nicht verschoben). Der alte Wert von h wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht). D.h. nur der Wert der linken Variablen wird verändert. Der Wert der rechten Variablen bleibt unverändert. Dies entspricht also z.B. nicht den Erfahrungen eines durstigen, aber wenig Geld besitzenden Besuchers einer Trinkherberge, der in einem günstigen Augenblick den Inhalt des benachbarten Bierglases in den des seinen verschiebt. h := 0,5 h := g 0,3

Ein weiteres Beispiel:

Welchen Wert hat die Variable z ? ? z

Was bewirkt folgende Anweisung ? z := 3 z ?

Was bewirkt folgende Anweisung ? z := 3 z

Was bewirkt folgende Anweisung ? z := 3 z 3

Was bewirkt folgende weitere Anweisung ? z z := 3 z := z*z 33 9 Der Wert von z - also 3 - wird mit dem Wert von z - also 3- multipliziert und in den Behälter z kopiert (nicht geleert, also nicht verschoben). Der alte Wert von z wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht). 3

Was bewirkt folgende weitere Anweisung ? z z := 3 z := z*z 33 9 Der Wert von z - also 3 - wird mit dem Wert von z - also 3- multipliziert und in den Behälter z kopiert (nicht geleert, also nicht verschoben). Der alte Wert von z wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht).

Was bewirkt folgende weitere Anweisung ? z z := 3 z := z*z 33 9 Der Wert von z - also 3 - wird mit dem Wert von z - also 3- multipliziert und in den Behälter z kopiert (nicht geleert, also nicht verschoben). Der alte Wert von z wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht). 9

Was bewirkt folgende weitere Anweisung ? z z := 3 z := z*z Der Wert von z - also 9 - wird mit dem Wert von z - also 9- multipliziert und in den Behälter z kopiert (nicht geleert, also nicht verschoben). Der alte Wert von z wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht).

Was bewirkt folgende weitere Anweisung ? z z := 3 z := z*z Der Wert von z - also 3 - wird mit dem Wert von z - also 3- multipliziert und in den Behälter z kopiert (nicht geleert, also nicht verschoben). Der alte Wert von z wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht).

Was bewirkt folgende weitere Anweisung ? z z := 3 z := z*z Der Wert von z - also 3 - wird mit dem Wert von z - also 3- multipliziert und in den Behälter z kopiert (nicht geleert, also nicht verschoben). Der alte Wert von z wird überschrieben (er geht verloren, d.h. er wird vorher gelöscht). 81

Aufgabe: Der Wasserstand des Neckars wird zweimal im Jahr (im Sommer und Winter) gemessen. Bestimmen Sie den maximalen Wasserstand, kurz...

Bestimmen Sie das Maximum zweier eingegebener Zahlen, wobei...

... dies durch den Vergleich zweier Zahlen zu lösen ist. Auf einmal können nur 2 Zahlen verglichen werden, also keine 3 oder mehrere. Also, z.B: x<y möglich, x<y<z nicht möglich

Anfang 1. Zahl eingeben: Eingabe(z1) 2. Zahl eingeben: Eingabe(z2)

z1 < z2 f w max := z2max := z1 Das Maximum ausgeben: Ausgabe(max) Das Zeichen := bedeutet soviel wie "der Wert der rechten Variablen wird der linken Variablen zugewiesen" und ist auf keinen Fall mit dem aus der Mathematik bekannten Gleichheitszeichen = zu verwechseln !

Ende

Nachdem der Algorithmus entwickelt wurde, muss er einem Crash-Test (Härte-Test) unterzogen werden. Dieses Prinzip wird prinzipiell in der Wissenschaft verwendet:

Man versucht eine aufgestellte Behauptung kaputt zu testen. Anschaulich gesprochen wird auf die aufgestellte Behauptung so lange eingedroschen, bis sie kaputt geht. Falls dies nicht gelingt, kann man davon ausgehen, ein gutes Produkt entwickelt zu haben.

Wir testen den Algorithmus für die Eingabe konkreter Zahlen, wie z.B:

Anfang 1. Zahl eingeben: Eingabe(z1) 2. Zahl eingeben: Eingabe(z2) Annahme (nach der Eingabe), also an dieser Stelle des Flußdiagramms: z1 = 3 z2 = 7

z1 < z2 f w max := z2max := z1 Das Maximum ausgeben: Ausgabe(max) Welchen Wert hat max an dieser Stelle des Flußdiagramms ? max ist undefiniert, d.h. der Wert ist unbekannt. Ende

z1 < z2 f w max := z2max := z1 Das Maximum ausgeben: Ausgabe(max) Annahme: z1 = 8 z2 = 2 8 Ende

z1 < z2 f w max := z2max := z1 Das Maximum ausgeben: Ausgabe(max) Annahme: z1 = 5 z2 = 5 5

Bei allen folgenden Aufgaben müssen Test-Protokolle gemacht werden. Bei der Aufgabe das Maximum zweier Zahlen zu finden, sieht ein Test-Protokoll z.B. so aus:

T E S T P R O T O K O L L Datum: Name des Entwicklers: Erich Überflieger Name des Testers: Ernst Bockelhart TESTDATEN z1z2Algorithmus richtig? 37ja 82 55

Stellen Sie den Algorithmus durch ein Flußdiagramm dar, der das Maximum dreier in beliebiger Reihenfolge eingegebener Zahlen berechnet. Aufgabe:

1) Nur der wichtigste Teil der Lösung wird hier und in den folgenden Lösungen dargestellt (z.B. wird der Eingabeteil weggelassen). 2) Im Verzweigungsteil wird w und f nicht immer angegeben Bemerkungen:

1. Lösung:

w max1 := z2max1 := z1 z1 < z2 f Zuerst wird - genau so wie ein paar Folien vorher - das Maximum von den Zahlen z1 und z2 berechnet. Dieses Maximum nennen wir das vorläufige Maximum (bezeichnet mit max1), weil es noch nicht das endgültige Maximum von z1, z2 und z3 ist. Was muss man jetzt nur noch machen, um das endgültige Maximum zu berechnen? Man muss nur noch das Maximum von z3 und max1 berechnen!

max1 < z3 w max1 := z2 Ausgabe(max2) max1 := z1 z1 < z2 f max2 := max1 max2 := z3 Ende Vorläufiges Maximum von z1 und z2, kurz: max1 =Maximum(z1, z2) Maximum von z3 und max1, also Maximum von z3 und z1 und z2, kurz: max2 = Maximum(z3, max1) = Maximum(z3, z1, z2) f w

w max1 := z2 Ausgabe(max2) max1 := z1 z1 < z2 f max2 := max1 max2 := z3 Ende max1 < z3 w f Angenommen, man müsste Speicher sparen. Wie kann man den Algorithmus mit einer Variable (einem Behälter) weniger realisieren?

2. Lösung:

max < z3 w max := z2 Ausgabe(max) max := z1 z1 < z2 f max := z3 Ende Annahme: z1 = 10 z2 = 20 z3 = w f

max < z3 w max := z2 Ausgabe(max) max := z1 z1 < z2 f max := z3 Ende Annahme: z1 = 10 z2 = 20 z3 = Berechnet hier das (vorläufige) Maximum von z1 und z2. Berechnet hier das (endgültige) Maximum von max (also z1 und z2) und z3. Wichtig: max kann also während des Programmablaufs verschiedene Werte annehmen. 20 w f

max < z3 w max := z2 Ausgabe(max) max := z1 z1 < z2 f max := z3 Ende Annahme: z1 = 70 z2 = 60 z3 = w f

Stellen Sie den Algorithmus durch ein Flußdiagramm dar, der drei in beliebiger Reihenfolge eingegebene Zahlen ihrer Größe nach aufsteigend sortiert und ausgibt. Aufgabe:

w a:=z3 b:=z1 c:=z2 z1 < z2 f z3 < z1 z3 < z2 a:=z1 b:=z3 c:=z2 a:=z1 b:=z2 c:=z3 a:=z3 b:=z2 c:=z1 z3 < z2 z3 < z1 a:=z2 b:=z3 c:=z1 a:=z2 b:=z1 c:=z3 Ausgabe(a,b,c)

a) Die Klasse besteht aus 1 Schüler. b) Die Klasse besteht aus unendlich vielen Schülern. c) Die Klasse besteht aus 50 Schülern. d) Der Lehrer kann die Schüleranzahl eingeben. Aufgabe: Stellen Sie den Algorithmus durch ein Flußdiagramm dar, der für eine Klassenarbeit für jeden Schüler den Prozentsatz erreichter Punkte – auf die maximal möglich zu erreichende Gesamtpunktzahl bezogen - errechnet und ausgibt.

Lösung a)

p := punkte/gesamtpunkte*100 Eingabe (punkte) Ausgabe(p) Ende Anfang Eingabe (gesamtpunkte)

Lösung b)

p := punkte/gesamtpunkte*100 Eingabe (punkte) Ausgabe(p) Ende Anfang Eingabe (gesamtpunkte) Was muss man machen, damit nochmals das gleiche für mehrere Schüler gemacht wird ? Man muss ein Schleife einbauen !

p := punkte/gesamtpunkte*100 Eingabe (punkte) Ausgabe(p) Anfang Eingabe (gesamtpunkte) Warum ist dies ein anwenderunfreundliche Lösung ? Weil der Anwender bei jedem Schüler die Gesamtpunkte nochmals eingeben muss, obwohl diese Zahl für jeden Schüler die gleiche ist. Welche Lösung wäre dann anwenderfreundlicher ?

p := punkte/gesamtpunkte*100 Eingabe (punkte) Ausgabe(p) Anfang Eingabe (gesamtpunkte)

Lösung c): (für 50 Schüler)

p := punkte/gesamtpunkte*100 Eingabe (punkte) Ausgabe(p) Anfang Eingabe (gesamtpunkte) Was muß in diese Lösung noch eingebaut werden, damit genau 50 Schüler ausgegeben werden ? Ein Zähler und eine Verzweigung, die den Wert des Zählers überprüft.

zähler < 50 zähler := 0 f Eingabe(gesamtpunkte) p := punkte/gesamtpunkte*100 Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende PROBLEM: Woher kann man sicher sein, dass in der Verzweigung die Bedingung zähler < 50 heißt ? Warum könnte hier z.B. nicht stehen: zähler < 51 oder zähler 51 Im folgenden wird eine Möglichkeit dargestellt, wie man nachprüfen kann, ob das Programm das Gewünschte macht.

zähler < 50 zähler := 0 f Eingabe(gesamtpunkte) p := punkte/gesamtpunkte*100 Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende Am roten Pfeil wird das Programm bei jedem Durchgang gedanklich angehalten und der Wert der Variablen zähler und die Anzahl der Schülerausgaben protokolliert (besonders der erste und der letzte Durchgang): Dieses schrittweise Abarbeiten des Programms nennt man auch "Schreibtischtest" zähler Schüler- ausgaben letzter Durchgang: Welcher Zusammenhang besteht zwischen Schülerausgaben und zähler ? Schülerausgaben = zähler

Was muß im Programm geändert werden, damit die Schüleranzahl eingegeben werden kann ?

zähler < zähler := 0 f Eingabe(gesamtpunkte) Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende p := punkte/gesamtpunkte*100

zähler < anz zähler := 0 Eingabe(gesamtpunkte) Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende Eingabe(anz) f p := punkte/gesamtpunkte*100

zähler < 50 zähler := 0 f Eingabe(gesamtpunkte) p := punkte/gesamtpunkte*100 Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende NOCHMALS PROBLEM: Woher kann man sicher sein, dass in der Verzweigung die Bedingung zähler < 50 heißt ? Warum könnte hier z.B. nicht stehen: zähler < 51 oder zähler 51 Im folgenden wird eine weitere Möglichkeit dargestellt, wie man nachprüfen kann, ob das Programm das Gewünschte macht.

zähler < 50 zähler := 0 f Eingabe(gesamtpunkte) p := punkte/gesamtpunkte*100 Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende Da es sehr aufwendig wäre, das ganze Programm (der Wert 50 ist sehr groß) bis zum Programmende am Schreibtisch durch zu gehen, nimmt man statt 50 einfach einen kleineren Wert, wie z.B. 3 und führt das Programm bis zum Programmende am Schreibtisch durch. Außerdem muss natürlich ein Protokoll gemacht werden. Nach jedem Schritt des Programms wird der Wert der Variablen neben die Variable geschrieben

zähler < zähler := 0 f Eingabe(gesamtpunkte) p := punkte/gesamtpunkte*100 Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende Da es sehr aufwendig wäre, das ganze Programm (der Wert 50 ist sehr groß) bis zum Programmende am Schreibtisch durch zu gehen, nimmt statt 50 einfach einen kleinern Wert, wie z.B. 3 und führt das Programm bis zum Programmende am Schreibtisch durch. Außerdem muss natürlich ein Protokoll gemacht werden. Nach jedem Schritt des Programms wird der Wert der Variablen neben die Variable geschrieben

zähler < zähler := 0 f Eingabe(gesamtpunkte) p := punkte/gesamtpunkte*100 Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende Da es sehr aufwendig wäre, das ganze Programm (der Wert 50 ist sehr groß) bis zum Programmende am Schreibtisch durch zu gehen, nimmt statt 50 einfach einen kleinern Wert, wie z.B. 3 und führt das Programm bis zum Programmende am Schreibtisch durch. Außerdem muss natürlich ein Protokoll gemacht werden. Nach jedem Schritt des Programms wird der Wert der Variablen neben die Variable geschrieben Wir nehmen an, dass hier 200 eingegeben wird. 200 Wir nehmen an, dass hier 20 eingegeben wird Wir nehmen an, dass hier 30 eingegeben wird Wir nehmen an, dass hier 50 eingegeben wird

zähler < zähler := 0 f Eingabe(gesamtpunkte) p := punkte/gesamtpunkte*100 Eingabe (punkte) zähler := zähler + 1 Ausgabe(p) w Ende Da es sehr aufwendig wäre, das ganze Programm (der Wert 50 ist sehr groß) bis zum Programmende am Schreibtisch durch zu gehen, nimmt statt 50 einfach einen kleinern Wert, wie z.B. 3 und führt das Programm bis zum Programmende am Schreibtisch durch. Außerdem muss natürlich ein Protokoll gemacht werden. Nach jedem Schritt des Programms wird der Wert der Variablen neben die Variable geschrieben Es wurden also bei zaehler < 3 3 Ausgaben gemacht Also ist es "einsichtig", dass bei zaehler < Ausgaben gemacht werden.

Aufgabe: Siehe Übungsblatt

Die 2. Möglichkeit, einen Algorithmus zu beschreiben ist die Programmiersprache.

Eine Programmiersprache ist eine künstliche Sprache – im Gegensatz zu einer natürlichen Sprache (wie z.B. der englischen Sprache). Eine künstliche Sprache wird für spezielle Dinge - wie z.B. der Programmierung - benutzt, weil eine natürliche Sprache dazu zu ungenau wäre.

Programmiersprache : Syntax Semantik

Die Syntax definiert die äußeren Formgesetze dieser Programmiersprache (ähnlich den grammatikalischen Regeln einer natürlichen - wie z.B. der englischen- Sprache).

Die Semantik ist der Bedeutungsinhalt (ähnlich der Bedeutung der einzelnen Worte einer natürlichen - wie z.B. der italienischen - Sprache) der einzelnen Objekte einer Programmiersprache.

Eine "höhere" Programmiersprache (z.B: Java, C, Pascal, Cobol, Ada, Prolog, usw.) kann zwar von einem Menschen verstanden werden ("menschengerecht"), doch nicht von einem Mikroprozessor (dem Herz des Computers), weil ein Mikroprozessor nur sogenannte Maschinenbefehle (bestehen aus 0 en und 1 en) versteht.

Deshalb benötigt man einen Übersetzer (engl. Compiler), der einen in einer höheren Programmiersprache formulierten Text (ein sogenanntes Programm) in einen aus Maschinenbefehlen bestehenden Text (einem sogenannten Maschinenprogramm) verwandelt. Dieses kann dann vom Mikroprozessor abgearbeitet (ausgeführt) werden.