Kap 1. Programmentwicklung Dr. Norbert Spangler / Programmieren I 30.09.2013 1 1.1 Programme Ein Programm ist ein in einer Programmiersprache formulierter Algorithmus. -> Was ist eine Programmiersprache ? hier C++ Sie ist beschrieben durch Syntax = Regeln/Grammatik zur Festlegung der Form von Anweisungen Semantik = Festlegung der Wirkungsweise der Anweisung -> Was ist ein Algorithmus ? Ein Algorithmus ist eine formalisierte Angabe der vorzunehmenden endlich vielen Anweisungen zur Lösung eine Klasse von Aufgabenstellungen. Ein Programm besteht also aus Anweisungen, die in einer Programmiersprache formuliert sind, zur Lösung einer Klasse von Aufgabenstellungen. Unser Ziel ist es aber auch, gute Programme zu schreiben -> Was ist ein „gutes“ Programm ? Sicht des Programmierers <-> Sicht des Benutzers Dr. Norbert Spangler / Programmieren I 30.09.2013 2 1.2 Beurteilungskriterien für ein Programm (Auswahl) Programmierersicht (Technik) Benutzersicht (Nutzen) Flexibilität leicht änderbar Benutzerfreundlichkeit Gute Hilfe, übersichtlich, brauchbar verständliche Fehlermeldungen leicht erlernbar (ohne Handbuch!) … Qualität korrekt, robust, ausfallsicher effektiv (verwendete Mittel) effizient (erzielter Nutzen) konfigurierbar, skalierbar … Wirtschaftlichkeit preiswert, termingerecht, langlebig … Adaptibilität leicht erweiterbar Portabilität plattformunabhängig Dr. Norbert Spangler / Programmieren I 30.09.2013 3 1.3 Beispielprogramm // Wurzel berechnen #include <iostream> //Praeprozessordirektiven #include <cmath> using namespace std; void main() { const double genauigkeit=1.0e-3; double x,a; int schritte=0; //Eingabe cout <<"\n a eingeben "; cin>>a; //Plausibilitaetskontrolle if ( a<=0 )// unzulaessige Eingabe cout <<"\n a muss > 0 sein "; else { //Verarbeitung x=a; while ( abs (x*x-a)>genauigkeit )//Wiederholungsbedingung { x=x-(x*x-a)/(2*x); schritte++; } // Ende Wiederholung (Schleife) //Ergebnis cout <<"\n Wurzel von "<<a<<" = "<<x; cout<<" nach "<<schritte<<" Schritten"<<endl; } } Dr. Norbert Spangler / Programmieren I Kommentar Praeprozessordirektive Praeprozessordirektive using Direktive Funktion main Klammer auf Deklaration einer Konstanten Deklaration von a und b vom Typ double Deklaration von schritte vom Typ int Kommentar Ausgabe eines Textes Eingabe von a Kommentar Befehl: Bedingung + Kommentar Ausgabe eines Textes else Klammer auf + Kommentar Befehl. (um)speichern Befehl Wiederholung + Kommentar Befehl: rechnen und speicherm Befehl: Wiederholung + rechnen+ Funktionswert Befehl: schritt hochzählen Klammer zu Wiederholungsbedingung Kommentar Ausgabe Text+Zahlen Ausgabe text+Zahl+Neue Zeile Klammer zu Klammer zu 30.09.2013 4 Wesentliche Programmmerkmale Verwendung vorhandener Resourcen cmath, iostream Unterschiedliche Typen von Daten Formeln mit Rechenoperatoren und Klammern Vergleiche double, int konstant, änderbar x-(x*x-a)/(2*x) a>0 Kommentare Semikolon // ; Lesbare Anweisungen, gruppiert mit Klammern Bedingungen Wiederholungen Speichern Einfache Ein-/Ausgabe mit Tastatur/Bildschirm if (Bedingung) { } else { } while (Bedingung) { } x=a; x=Formel; cin>> cout<< Programme haben eine „klassische“ Struktur: EVA-Prinzip Direktiven - Deklarationen – Eingabe – Verarbeitung - Ausgabe Dr. Norbert Spangler / Programmieren I 30.09.2013 5 1.4 Programmentwicklung Prinzipieller Ablauf nach dem Wasserfallmodell (Problem)Analyse Einteilung in 5 Phasen Entwurf Implementierung Test Betrieb Dr. Norbert Spangler / Programmieren I 30.09.2013 6 Phase 1:Problemanalyse/Anforderungen Ermittlung der Anforderungen (Kundensicht!) Erhebung erforderlicher Daten und Funktionen Auswahl an Algorithmen/Entscheidungskriterien Einsatzbereich Beispiel: Wurzel einer Zahl a> 0 näherungsweise mit den Grundrechenarten + - * / berechnen Machbarkeitsstudien Testplan Daten: a, Ergebnis, Genauigkeit, Anzahl der Schritte ….. Algorithmus: Newtonverfahren durch Lösen der Gleichung x2 – a = 0 Genauigkeit vorgeben (z.b. 3 Stellen) Dr. Norbert Spangler / Programmieren I 30.09.2013 7 Aufstellen eines Testplans (-> Übungsblatt) Fall Beschreibung 1 Normalfall Ausgangsdaten (Eingabe) Erwartetes Ergebnis 1.1 Quadratzahl 4 2.00 1.2 Quadratzahl ( Ergebnis=Zahl) 1 1.00 1.3 Zahl<1 0.5 0.707 1.4 Zahl>1 2 1.41 2 Sonderfall 2.1 Große Zahl 1000001 1000 2.2 Kleine Zahl 0.000001 0.001 3 Grenzfall 4 Unzulässige Daten 4.1 4.2 0 Negative Zahl -1 Keine Zahl a Meldung Meldung Nicht festgelegt Problem: Für möglichst alle Fälle ein typisches Beispiel finden. Beispiele ohne neue Erkenntnis (=neue Beschreibung) ->weglassen Dr. Norbert Spangler / Programmieren I 30.09.2013 8 Phase 2: Entwurf (Übung: Laboreinführung) Erstellung eines dokumentierten Entwurfs für das System und die einzelnen Komponenten 3 Symbole Einfacher Befehl Ein-/Ausgabe Wurzel berechnen Eingabe a a <= 0 Ja Nein Abfrage a muss >0 sein Die Inhalte der Symbole sind frei wählbar x=a Solangex*x-a ungenau x*x-a x = x - ------2x Wiederholung Formel/Berechnung Ausgabe x Dr. Norbert Spangler / Programmieren I 30.09.2013 9 Phase 3: Implementierung Siehe Laboreinführung Bedienungsanleitung Visual Studio auf der Homepage Visual Studio Projekt anlegen Programmdatei anlegen -> projektname -> main.cpp Editor Programm eingeben (z.B. Musterprogramm) -> main.cpp +Headerdateien #include C++ Compiler Programm übersetzen -> main.obj +andere.obj + Bibl. Linker Anwendung erzeugen -> projektname.exe Dr. Norbert Spangler / Programmieren I 30.09.2013 10 Phase 4: Test Fehlersuche/-beseitigung Syntaxfehler (Tippfehler) Semantikfehler(logische /Denkfehler) ->Compiler mit Zeilenangabe ->Debug/einzelne Befehle ansehen Komponententest (einzelne Funktionen) Systemtest/Integrationstest (alle Funktionen zusammen) Test: Abarbeitung Testplan Testprotokoll Dr. Norbert Spangler / Programmieren I 30.09.2013 11 Test/Testprotokoll Fall Beschreibung 1 Normalfall Ausgangsdate n (Eingabe) Erwartetes Ergebnis Ergebnis 1.1 Quadratzahl 4 2.00 2.00 1.2 Quadratzahl(Zahl=Ergebnis) 1 1.00 1 1.2 Zahl<1 0.5 0.707 0.707108 1.3 Zahl>1 2 1.41 1.41422 2 Sonderfall 2.1 Große Zahl 1000001 1000 1000 2.2 Kleine Zahl 0.000001 0.001 0.0312607 Meldung a muss>0 sein Meldung a muss>0 sein Nicht festgelegt a muss>0 sein 3 Grenzfall 4 Unzulässige Daten 4.1 4.2 0 Negative Zahl -1 Keine Zahl a * Abweichungen genauer dokumentieren Dr. Norbert Spangler / Programmieren I * Datum Unterschriften 30.09.2013 12 Phase 5: Betrieb Programmeinführung Betrieb inkl. Wartung und Pflege Beseitigung von Fehlern -> sofort Sammeln von Wünschen -> für spätere Versionen Nächste Version Dr. Norbert Spangler / Programmieren I 30.09.2013 13