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) Flexibilität leicht änderbar Adaptibilität leicht erweiterbar Portabilität plattformunabhängig Benutzersicht (Nutzen) 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 Dr. Norbert Spangler / Programmieren I 30.09.2013 3
// 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; 1.3 Beispielprogramm 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 Dr. Norbert Spangler / Programmieren I 30.09.2013 4
Wesentliche Programmmerkmale Verwendung vorhandener Resourcen cmath, iostream Unterschiedliche Typen von Daten double, int konstant, änderbar Formeln mit Rechenoperatoren und Klammern x-(x*x-a)/(2*x) Vergleiche a>0 Kommentare // Semikolon ; Lesbare Anweisungen, gruppiert mit Klammern Bedingungen if (Bedingung) { } else { } Wiederholungen while (Bedingung) { } Speichern x=a; x=formel; Einfache Ein-/Ausgabe mit Tastatur/Bildschirm 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 (Problem)Analyse Prinzipieller Ablauf nach dem Wasserfallmodell Entwurf Einteilung in 5 Phasen 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 Machbarkeitsstudien Testplan.. Beispiel: Wurzel einer Zahl a> 0 näherungsweise mit den Grundrechenarten + - * / berechnen Daten: a, Ergebnis, Genauigkeit, Anzahl der Schritte Algorithmus: Newtonverfahren durch Lösen der Gleichung x 2 a = 0 Genauigkeit vorgeben (z.b. 3 Stellen) Dr. Norbert Spangler / Programmieren I 30.09.2013 7
Aufstellen eines Testplans (-> Übungsblatt) Fall Beschreibung Ausgangsdaten (Eingabe) Erwartetes Ergebnis 1 Normalfall 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 0 Meldung 4 Unzulässige Daten 4.1 Negative Zahl -1 Meldung 4.2 Keine Zahl a 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) 3 Symbole Erstellung eines dokumentierten Entwurfs für das System und die einzelnen Komponenten Ein-/Ausgabe Einfacher Befehl Abfrage Wurzel berechnen Eingabe a Ja a muss >0 sein a <= 0 x=a Nein Solangex*x-a ungenau Die Inhalte der Symbole sind frei wählbar Wiederholung x*x-a x = x - ------- 2x 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 -> projektname Programmdatei anlegen -> main.cpp Editor Programm eingeben -> main.cpp +Headerdateien (z.b. Musterprogramm) #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 Ausgangsdate n (Eingabe) Erwartetes Ergebnis Ergebnis 1 Normalfall 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 3 Grenzfall 0 Meldung a muss>0 sein * 4 Unzulässige Daten 4.1 Negative Zahl -1 Meldung a muss>0 sein 4.2 Keine Zahl a Nicht festgelegt a muss>0 sein * Abweichungen genauer dokumentieren Datum Unterschriften Dr. Norbert Spangler / Programmieren I 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