/* Wertetabelle und Ableitungen fuer eine spezielle Funktion ================================================== ======= Das Programm gibt fuer eine fest einprogrammierte ("hard coded") mathematische Funktion y = f(x) eine Wertetabelle mit fest vorgegebenen Grenzen und fest vorgegebener Schrittweite und die naeherungsweise nach den Differenzenformeln ys = (yr - yl) / (2*h) y2s = (yr - 2*y + yl) / (h*h) berechneten ersten beiden Ableitungen aus (yr ist der Funktionswert an der Stelle x+h, yl der Funktionswert an der Stelle x-h (h wird sehr klein gewaehlt). y, ys und y2s (Funktionswert, 1. und 2. Ableitung) werden in einer Funktion y_ys_y2s berechnet, die damit 3 Werte an das aufrufende Programm abliefern muss (ueblicherweise hat eine Funktion nur einen Return-Wert). Die zu verwendenden Differenzenformeln koennen ein fuer die Ingenieur- Mathematik mit bevorzugter "Floating-Point-Arithmetik" typisches Problem erzeugen, die Ausloeschung gueltiger Stellen bei Bildung von Differenzen (da sich die Funktionswerte eng benachbarter Punkte in der Regel nur wenig voneinander unterscheiden, stehen in den Klammern z. B. Ausdruecke wie 4.32793 - 4.32789). Der Ingenieur ist gut beraten, generell mit doppelter Genauigkeit zu rechnen (Typ ’double’), um die Auswirkungen solcher Operationen gering zu halten */ #include <stdio.h> #include <math.h> #define xanf -4.0 /* Untere Grenze fuer Wertetabelle */ #define xend 5.0 /* Obere Grenze fuer Wertetabelle */ #define delta_x 0.5 /* Schrittweite fuer Wertetabelle */ #define bda 4.0 /* Spezielle Konstante fuer f(x) */ #define mgdca 1.0 /* Spezielle Konstante fuer f(x) */ double y_ys_y2s (double , double , double * , double *); /* "Prototyp" der Funktion y_ys_y2s */ double f_von_x (double); /* "Prototyp" der Funktion f_von_x */ main () { double x , y , ys , y2s; printf ("Wertetabelle\n\n x y"); printf (" y’ y’’\n\n"); x = xanf; while (x <= xend + delta_x / 100.) { y = y_ys_y2s (x , delta_x / 1000.0 , &ys , &y2s); printf ("%16.6f%16.6f%16.6f%16.6f\n" , x , y , ys , y2s); x += delta_x; } return 0; } double y_ys_y2s (double x , double h , double *ys , double *y2s) { double y , yr , yl; y = f_von_x (x); yr = f_von_x (x + h); yl = f_von_x (x - h); *ys = (yr - yl) / (2.0 * h); *y2s = (yr - 2.0 * y + yl) / (h * h); return y; } double f_von_x (double x) { double wurzel; wurzel = sqrt (x*x + 1.0); return (wurzel - bda) * x / wurzel - mgdca; }
Dieses Programm aus einem Tutorial, behandelt das Thema Pointer, was ich eigentlich auch ziemlich verstanden habe. Jedoch taucht dort immer wieder die Variable "h" in dem Programm auf. Ich finde jedoch keine Stelle, an der der Variable ein Wert zugewiesen wird Kann mir das jemand erklären, weil ohne Wert, würde das Programm ja eigentlich nicht funktionieren.