Kap 1. Programmentwicklung - fbi.h

Werbung
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
Herunterladen