000
11.12.2004, 17:30 Uhr
newbie2oo4
|
Hallo,
hab leider die Aufgabenstellung etwas fehlintepretiert, bei mir muss man den Wert in Grad eingeben, welcher dann ins Bogenmaß umgewandelt wird. Unter Genauigkeit hatte ich eigentlich die Anzahl der Rechenschritte verstanden, wenn man bei mir z.B. 30 eingibt wird 30 mal das x^n ausgerechnet und dann abgebrochen.
Die Aufgabenstellung lautet aber: "es soll der sinus einer zahl berechnet werden, wie das geht steht in jeder Formelsammlung!! Also keine Standart c++ funktion benutzen, sondern ein Programm das mit Hilfe von Funktionsaufrufen die Fakultät. die Hochzahl und den Sinus berechnet. Diese 3 Sachen sind auszuprogrammieren!!!! Näheres gibts Montags bzw. Donnerstags während des Praktikums!! Sinnvolles Abruchkriterium für die Genauigkeit der Berechnung 0.000001! Das ganze soll dann auch noch mit der in C++ Standartfunktion verglichen werden!"
Vielleicht kann mir jemand weiterhelfen, hab mein Program mal angehängt.
Gruß Martin
C++: |
#include <iostream.h> #include <stdio.h>
#define pi 3.1415926535897932384626433832795
double dFakultaet( double); //funktionsdeklaration bzw. funktionsprototyp double dExponent( double, double); double dSinus( double, double);
void main() { //hauptfuntion double dWinkel; double dGenauigkeit; double dErgebnis;
cout<<"Geben sie den Winkel ein"<<endl; cin>>dWinkel;
cout<<"Geben sie die Genauigkeit ein"<<endl; cin>>dGenauigkeit;
dErgebnis = dSinus(dWinkel, dGenauigkeit);
// cout<<"Sinus = "<<dErgebnis<<endl; printf("Sinus = %5.20f\n", dErgebnis); }
double dFakultaet( double dN) { //berechnung fakultät double dM = 1; double dF = 1;
while(dM <= dN) dF *= dM++;
return(dF); }
double dExponent(double dBasis, double dExponent) { double dErgebnis = dBasis; if(dBasis == 0) return(0); //wenn basis 0 if(dExponent == 0) return(1); //wenn exponent 0 for(; dExponent > 1; dExponent--) dErgebnis = dErgebnis * dBasis; return(dErgebnis); }
// Funktion: dSinus // Beschreibung: xxx // // IN: // OUT:
double dSinus( double dWinkel, double dGenauigkeit) { double dErgebnis = 0; double dTemp = 1; double dWert = 1; int dZaehler;
dWinkel = dWinkel * (2*pi/360); //Umrechnung ins Bogenmaß
if(dGenauigkeit == 0) dGenauigkeit = 1;//fehlerfall wenn genauigkeit = 0 for(dZaehler = 1; dZaehler <= dGenauigkeit; dZaehler++) { //schleife für genauigkeit dTemp = dExponent(dWinkel, dWert) / dFakultaet(dWert); //formelteil nicht vorzeichenbehaftet
if(dZaehler % 2) dErgebnis = dErgebnis + dTemp; //vergleich auf ungerade, ist zahler für genauigkeit ungerade wird addiert else dErgebnis = dErgebnis - dTemp; //vergleich auf gerade dWert += 2; //damit nur ungerade exponenten und fakultäten, also x hoch 3, x hoch 5, ... } return(dErgebnis); }
|
Dieser Post wurde am 11.12.2004 um 17:44 Uhr von FloSoft editiert. |