Wie entsteht ein Computerprogramm Grundstrukturen von Programmen Programmiersprachen Entwicklungsschritte eines Programms Programmdokumentation Seite 1 Telefonanruf-Algorithmus Start Rufnummer bereitstellen Rufnummer eingeben, wählen Verbindung beenden Rufzeichen Meldung "Entschuldigung" murmeln gewünschter Teilnehmer Gespräch; Verbindung beenden Stopp Seite 2
PC-Kauf Ausstattung, Preis festlegen ersten Laden aufsuchen nächsten Laden aufsuchen Ausstattung ok ja Preis ok ja kaufen Seite 3 Algorithmus Definition nach Horowitz / Sahni Ein Algorithmus ist eine endliche Menge von Anweisungen, die (falls man sie ausführt) eine bestimmte Aufgabe lösen. Eigenschaften von Algorithmen: Input: Es gibt keine, eine oder mehrere (Eingabe-)Größen, die extern bereitgestellt werden. Output: Mindestens eine (Ausgabe-)Größe wird erzeugt. Definiertheit: Jede Anweisung muss für sich allein ausführbar und eindeutig sein. Endlichkeit: Wenn die Anweisungen des Algorithmus ausgeführt werden, muss er in allen Fällen nach einer endlichen Zahl von Schritten enden. Effektivität: Für jede Anweisung muss der Aufwand für ihre Ausführung bestimmbar und vorhersagbar sein. Seite 4
Algorithmus weitere Definitionen Ein Algorithmus liegt genau dann vor, wenn gegebene Größen (Eingabegrößen, Aufgaben) auf Grund eines Systems von Regeln (Umformungsregeln) eindeutig in andere Größen (Ausgabegrößen, Lösungen) umgeformt werden. Ein Algorithmus dient stets zur Lösung einer Klasse von Aufgaben einheitlichen Typs. Ein Algorithmus ist ein eindeutig bestimmtes Verfahren unter Anwendung von Grundoperationen über primitiven (gegebenen) Objekten. Seite 5 Beispiel: Sortieren von Zahlen Ausgangssituation: Unsortierte Werteliste 37 12 69 48 51 24 39 28 Algorithmus: Suche kleinsten Wert und seine Position: 12 auf Platz 2 Setze kleinsten Wert an Stelle 1 und den von Stelle 1 auf den bisherigen Platz des kleinsten: 12 37 69 48 51 24 39 28 Wiederhole diese beiden Schritte jeweils für den unsortierten Teil der Liste: 12 24 69 48 51 37 39 28 insgesamt (n-1)-mal 12 24 28 48 51 37 39 69 12 24 28 37 51 48 39 69 12 24 28 37 39 48 51 69 eigentlich fertig! 12 24 28 37 39 48 51 69 12 24 28 37 39 48 51 69 Seite 6
Darstellung von Algorithmen Programmablaufplan (PAP) Eingabe / Ausgabe Unterprogramm-Aufruf Anweisung ja Verzweigung (Alternative) Seite 7 Grundstrukturen: Darstellung von Algorithmen Struktogramm nach Nassi-Shneiderman Sequenz (Folge) Alternative (Verzweigung) ja Entscheidung Zyklus (Schleife) Zyklus-Spezifikation Seite 8
Algorithmus Sortieren von Zahlen (SelectionSort) LIES (anzahl); für i von 1 bis anzahl LIES (zahl[i]); für j von 1 bis (anzahl-1) min=zahl[j]; pos=j; für i von (j+1) bis anzahl zahl[i]<min ja min=zahl[i]; pos=i; zahl[pos]=zahl[j]; zahl[j]=min; für i von 1 bis anzahl SCHREIBE (zahl[i]); Seite 9 Beispiel: Summieren einer festen Anzahl von Werten z.b.: 5 Werte summieren 27+13+22+11+22 = 95 anzahl wert summe zähler summe = 0; zähler = 0; LIES (anzahl); SOLANGE (zähler<anzahl) LIES (wert); summe neu = summe alt + wert; zähler neu = zähler alt + 1; SCHREIBE (summe); Trockentest: anzahl 5 ENDE zähler 0 1 2 3 4 5 wert 27 13 22 11 22 summe 0 27 40 62 73 95 Offene Fragen: Wann wird anzahl festgelegt Was ist zu tun, wenn anzahl am Beginn der Summierung nicht bekannt ist Seite 10
Beispiel: Zählen von bestimmten Werten in einer festen Anzahl von Werten z.b.: Wie oft kommt der Wert "22" vor in den folgenden 5 Werten vor 27 13 22 11 22 Trockentest: anzahl zähler wert vergl wieoft anzahl wert vergl zähler wieoft 5 0 0 22 zähler = 0; wieoft = 0; LIES (anzahl); LIES (vergl); SOLANGE (zähler<anzahl) LIES (wert); ja wert == vergl ENDE 1 2 3 4 5 27 13 22 11 22 1 2 wieoft neu = wieoft alt + 1; zähler neu = zähler alt + 1; SCHREIBE (wieoft); Seite 11 Programmiersprachen Klassifikation Maschinensprachen prozessorabhängige Verschlüsselung von Befehlen, Adressen und Daten als Bitmuster Maschinenorientierte Programmiersprachen (Assembler-Sprachen) prozessor- / assemblerabhängige Verschlüsselung von Befehlen, Adressen und Daten über Symbole ein Assembler-Befehl ergibt einen Maschinenbefehl Problemorientierte Programmiersprachen den zu bearbeitenden (z.b. numerischen, kommerziellen, technischen,...) Problemen angepasste Formulierung von Programmen eine Anweisung ergibt viele Maschinenbefehle portabel, da prozessorunabhängig Seite 12
Programmiersprachen Beispiele Prozedurale Programmiersprachen: ALGOL (ALGOrithmic Language) FORTRAN (FORmula TRANslator) COBOL (COmmon Business Oriented Language) PL/1 (Programming Language 1) PASCAL C Funktionale Programmiersprachen: PROLOG (PROgramming in LOGic) LISP (LISt Processing Language) Seite 13 Programmiersprachen Beispiele Objektorientierte Programmiersprachen: SMALLTALK EIFFEL C++ Java Echtzeit-Programmiersprachen: PEARL Datenbank-Sprachen: SQL (Structured Query Language) Dokumenten- / Datenbeschreibungssprachen: HTML (HyperText Markup Language) XML (extensible Markup Language) Seite 14
Entwicklungsschritte eines Programms Spezifikation der Aufgabenstellung Entwicklung des Algorithmus Datenentwurf Eingabedaten, Ausgabedaten, Zwischenwerte / Konstanten, Variablen Datentypen (Wertebereiche, Genauigkeit,...) / Datenstrukturen Entwurf der Programmstruktur vom Allgemeinen zum Konkreten Zerlegung in Teilprogramme Eingabe - Verarbeitung - Ausgabe Implementierung Formulierung in einer Programmiersprache Eingabe Übersetzung Test Dokumentation, Übergabe Seite 15 Ein einfaches Programm Kugeltank-Berechnung Aufgabenstellung: Eingabe von Durchmesser und Wandstärke Berechnung von Volumen, Oberfläche und Masse Welches Volumen Welche Oberfläche Masse: Welches Material Berechnungsformeln: V i = 4/3 * π * r 3 i A a = 4 * π * r 2 a m = ( V a - V i ) * ρ Fragen / Probleme: Eingabedaten Maßeinheiten Umrechnungen Konstanten / Variablen Wandstärke Außendurchmesser Seite 16
Daten Konstanten und Variablen Konstante: Wert wird zur Entwicklungszeit eines Algorithmus festgelegt hat bei jeder Benutzung des Algorithmus den gleichen Wert, der beim Programmieren festgelegt wurde Variable: Name der Variablen (Speicherplatz) wird beim Programmieren festgelegt, der Wert aber nicht (ist undefiniert!) Wert wird bei der Benutzung des Algorithmus durch Einlesen oder durch Zuweisung in die Variable übertragen Wert kann sich während der Benutzung ändern Wert muss bei wiederholter Benutzung immer wieder neu in die Variable übertragen werden Seite 17 Kugeltank-Berechnung Das C-Programm #include <stdio.h> void main () { float PI = 3.141592, // Festlegung von Konstanten RHO = 7850.0; // Dichte von Eisen in kg/m^3 int ad, ws; // Aussendurchm., Wandst. in mm float ar,ir, // Aussen-/Innenradius in m avol,ivol, // Aussen-/Innenvolumen in m^3 a, // Oberflaeche in m^2 m; // Masse in t printf("k u g e l t a n k - B e r e c h n u n g\n"); printf("---------------------------------------\n\n\n"); // Parameter-Eingabe printf ("Eingabe der Parameterwerte\n\n"); printf ("Aussendurchmesser in mm: "); scanf ("%d", &ad); printf ("Wandstaerke in mm: "); scanf ("%d", &ws); ar = 0.5*ad/1000; // Berechnungen ir = ar-ws/1000.0; avol = ar*ar*ar*4/3*pi; ivol = ir*ir*ir*4/3*pi; a = ar*ar*4*pi; m = (avol-ivol)*rho/1000; // Ergebnis-Ausgabe printf ("\n\n\nberechnungsergebnisse:\n"); printf (" Innenvolumen = %10.8f m^3\n", ivol); printf (" Oberflaeche = %10.8f m^2\n", a ); printf (" Masse = %10.8f t \n", m ); } Seite 18
Programm-Entwicklung Datenflussplan Quelltext Editor Quellmodul Compiler Systembibliotheken Compilerprotokoll Fehlerliste Objektmodul Linker Linkerprotokoll Fehlerliste Lademodul Seite 19 Programmdokumentation Gliederung Programmkenndaten Programmbezeichnung Autor / -in Aufgabe (Kurzbeschreibung) Gerätebedarf (Rechner,...) Programmbedarf (Betriebssystem,...) Programmiersprache (Compiler,...) Funktion und Aufbau des Programms Aufgabenstellung, Aufgabenlösung, Programmaufbau, Programmablauf, Daten, Anwendungsgrenzen, Datensicherung, Anwendungsbeispiel Installation des Programms Installation, Test Benutzung des Programms Gerätebedarf, Bedienung, Unterbrechungen im Programmablauf, Wiederanlauf, Leistungsmerkmale Seite 20
Fragen zur Überprüfung des Verständnisses 1. Was ist ein Algorithmus 2. Aus welchen Grundstrukturen werden Rechner-Algorithmen konstruiert 3. Worin besteht der Unterschied zwischen einem Algorithmus und einem Rechnerprogramm 4. In welchen Schritten wird ein Rechnerprogramm entwickelt 5. Was wird in einem Rechnerprogramm alles festgelegt 6. Worin besteht der Unterschied zwischen Konstanten und Variablen in einem Rechnerprogramm 7. Welche Arten von Programmiersprachen kennen Sie 8. Welche Programmiersprache(n) "versteht" der Prozessor eines Rechners 9. Warum müssen Rechnerprogramme in aller Regel übersetzt werden 10. Was geschieht beim Test eines Rechnerprogramms Seite 21