SUCHE MIT Google
Web virtualuniversity.ch
HOME DIDAKTIK ECDL ELEKTRONIK GUIDES HR MANAGEMENT MATHEMATIK SOFTWARE TELEKOM
DIENSTE
Anmeldung
Newsletter abonnieren
Sag's einem Freund!
VirtualUniversity als Startseite
Zu den Favoriten hinzufügen
Feedback Formular
e-Learning für Lehrer
Spenden
Autoren login
KURSE SUCHEN
Kurse veröffentlichen

Suche nach Datum:

Suche mit Schlüsselwort:

Suche nach Land:

Suche nach Kategorie:
PARTNER
ausbildung24.ch - Ausbildungsportal, Seminare, Kursen... 

 
HTMLopen.de - Alles was ein Webmaster braucht

 
PCopen.de - PC LAN Netze und Netzwerke - alles was ein IT Profi und Systemtechnicker braucht

SOFTWARE
#define DEBUG 1 #if DEBUG #define ANFANG(Funktion) \ printf("Start %s [%s:%d]\n", Funktion, __FILE__, __LINE__); #define ENDE(Funktion) \ printf("Ende %s [%s:%d]\n", Funktion, __FILE__, __LINE__); #else #define ANFANG(Funktion) #define ENDE(Funktion) #endif float Endkapital (float Einz, float Zins, float Zeit); main () { printf ("Endkapital ... : %.2f DM", Endkapital (1000, 10, 2)); return (0); } /* Rekursive Berechnung des Endkapitals */ float Endkapital (float Einz, float Zins, float Zeit) { float ergebnis; ANFANG ("Endkapital") if (Zeit == 1) ergebnis = Einz * (1 + Zins/100); else ergebnis = (1 + Zins/100) * Endkapital(Einz, Zins, Zeit - 1); ENDE ("Endkapital") return(ergebnis); } Der Programmlauf ergibt:
                                       Start Endkapital [modrek2.C:31] 
                                       Ende  Endkapital [modrek2.C:36] 
                                       Start Endkapital [modrek2.C:31] 
                                       Ende  Endkapital [modrek2.C:36] 
                                       Endkapital ... : 1210.00 DM
                                       

In der Bildschirmausgabe ist zu erkennen, wann das Modul Endkapital() betreten und wann es verlassen wurde. Weiterhin wird jeweils die aktuelle Zeilennummer ausgegeben.

Analyse

Anfang und Ende der Funktion Endkapital() sind mit ANFANG ("Endkapital") und ENDE ("Endkapital") versehen worden. Bitte beachten: es folgt kein Strichpunkt, da dieser bereits im Makro vorhanden ist. Makros werden ja vom Präprozessor rein textuell ersetzt. Diese Makros haben aber nur dann eine Bedeutung, wenn DEBUG wahr ist (#define DEBUG 1). In diesem Fall haben die Makros Anfang und Ende die im #if-Zweig angegebene Bedeutung:
                                       #define ANFANG(Funktion) \
                                               printf("Start %s [%s:%d]\n", Funktion, __FILE__, __LINE__); 
                                       #define ENDE(Funktion) \ 
                                               printf("Ende  %s [%s:%d]\n", Funktion, __FILE__, __LINE__);
                                       
Anderenfalls haben sie keine Bedeutung, da im #else-Zweig ein leeres Makro definiert wird. Das Makro muß nur vorhanden sein, damit der Compiler keinen Fehler meldet:
                                       #define ANFANG(Funktion)
                                       #define ENDE(Funktion)
                                       
Diese Technik eignet sich gut zum Debuggen von Quelltext. Solange das Programm noch nicht einwandfrei läuft, werden so Debuggingzeilen untergebracht. Sobald das Programm für den Produktions-Betrieb compiliert werden soll, werden diese Zeilen für den Compilationsvorgang deaktiviert (#define DEBUG 0). Sie werden nicht aus dem Quelltext herausgenommen, da dies nicht nur Arbeit verursacht, sondern sie bei Programmänderungen und -erweiterungen auch wieder von Nutzen sein können.

Da die Makroersetztung auf Quellniveau erfolgt, wird auch kein "toter Code" im Binärprogramm erzeugt. Das Schema läßt sich beliebig erweitern, indem man beispielsweise auch Variablenwerte "tracen" kann. Durch die Definition eines weiteren Makros kann man auch den Resultatwert nachverfolgen:

                                       /* Zinseszinsrechnung */ 
                                       /* Rekursion mit Debugging-Informationen */ 
                                       /* kaprek.c */
                                       
                                       #include 
                                       #define DEBUG 1 
                                       
                                       #if DEBUG 
                                       #define ANFANG(Funktion) \
                                               printf("Start %s [%s:%d]\n", Funktion, __FILE__, __LINE__); 
                                       #define ENDE(Funktion) \ 
                                               printf("Ende  %s [%s:%d]\n", Funktion, __FILE__, __LINE__);
                                       #define TRACE(Floatvar, Floatwert) \
                                               printf("Variable %s: %f [%s:%d]\n", 
                                                       Floatvar, Floatwert, __FILE__, __LINE__);
                                       #else 
                                       #define ANFANG(Funktion) 
                                       #define ENDE(Funktion) 
                                       #define TRACE(Floatvar, Floatwert)
                                       #endif
                                       
                                       float Endkapital (float Einz, float Zins, float Zeit);
                                       
                                       main ()
                                         {
                                         printf ("Endkapital ... : %.2f DM", Endkapital (1000, 10, 2));
                                         return (0);
                                         }
                                       
                                       /* Rekursive Berechnung des Endkapitals */ 
                                       float Endkapital (float Einz, float Zins, float Zeit)
                                         {
                                         float ergebnis;
                                       
                                         ANFANG ("Endkapital")
                                         if (Zeit == 1)
                                           ergebnis = Einz * (1 + Zins/100);
                                         else
                                           ergebnis = (1 + Zins/100) * Endkapital(Einz, Zins, Zeit - 1);
                                         TRACE("ergebnis", ergebnis)
                                         ENDE ("Endkapital")
                                         return(ergebnis);
                                         }
                                       

DIPLOMARBEITEN UND BÜCHER

Diplomarbeiten zum Runterladen:

Suche im Katalog:
Architektur / Raumplanung
Betriebswirtschaft - Funktional
Erziehungswissenschaften
Geowissenschaften
Geschichtswissenschaften
Informatik
Kulturwissenschaften
Medien- und Kommunikationswissenschaften
Medizin
Psychologie
Physik
Rechtswissenschaft
Soziale Arbeit
Sozialwissenschaften


JOBS
HOME | E-LEARNING | SITEMAP | LOGIN AUTOREN | SUPPORT | FAQ | KONTAKT | IMPRESSUM
Virtual University in: Italiano - Français - English - Español
VirtualUniversity, WEB-SET Interactive GmbH, www.web-set.com, 6301 Zug

Partner:   Seminare7.de - PCopen.de - HTMLopen.de - WEB-SET.com - YesMMS.com - Ausbildung24.ch - Manager24.ch - Job und Karriere