WinFuture-Forum.de: Frage Zu C-programm - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Frage Zu C-programm Mal wieder... :-)


#1 Mitglied ist offline   Foxhound 

  • Gruppe: aktive Mitglieder
  • Beiträge: 366
  • Beigetreten: 29. November 04
  • Reputation: 0

geschrieben 02. Juni 2005 - 15:18

/* 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.
0

Anzeige



#2 Mitglied ist offline   Master_P. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 340
  • Beigetreten: 18. Mai 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Irgendwo im Nirgendwo (Westerwald)
  • Interessen:vieles

geschrieben 02. Juni 2005 - 15:27

h müßte delta_x / 1000.0 sein.
h gibbet ja nur in der Funktion von daher erhält es den Übergabeparameter...
mfg
M@$t3r_P.

Das Ziel jedes Menschen liegt 2 Meter unter der Erde.
0

#3 Mitglied ist offline   Foxhound 

  • Gruppe: aktive Mitglieder
  • Beiträge: 366
  • Beigetreten: 29. November 04
  • Reputation: 0

geschrieben 02. Juni 2005 - 17:08

Danke jetzt fällts mir auch wieder ein (variablen können ja übergeben werden).
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0