kleines prob weiss ned warum
-
dies ist eine kleine funktion bei der der borland c++ builder meint,
[C++ Fehler] File1.cpp(6): E2141 Fehler in der Deklarationssyntax
cond() ist eine eigene fuktion.
float effzins(float z,int n)
{
return cond(n==0,0,(1+(z/n))*effzins(z,(n-1)));
}
-
int main()
{
cout << "Geben Sie bitte den Zinssatz ein:" <<endl;
cin >>z>>;
cout << "Geben Sie bitte die Dauer in Tagen ein:"<<endl;
cin >>n>>;
cout << "der effektive Zinssatz beträgt:"<< (effzins(z,n)-1) <<"%"<<endl;
}wo steckt da der fehler der meint
[C++ Fehler] File1.cpp(14): E2188 Ausdruckssyntax
-
Mach jeweils das zweite >> bei cin weg.
effzins hat übrigens eine Rekursion, die nicht terminiert.
-
die terminiert schon ^^
weil die cond so definiert ist dass:
cond(<bedingung>,<ausführen wenn war>,<ausführen wenn falsch>)
jedoch hab ich grad noch das prob dass ich halt c++builder 5 benutze und der macht mir aus meinem cpp file keine exe datei ^^
-
hab es auch schon ein wenig geändert sieht alles nun so aus:
#include <iostream>
#include <cond>using namespace std;
float z;
int n;
float effzins(float z, int n)
{
return cond(n==0,1,(1+(z/n))*effzins(z,(n-1)));
}int main()
{
cout << "Geben Sie bitte den Zinssatz ein:"<<;
cin >> z ;
cout << "Geben Sie bitte die Dauer in Tagen ein:"<<;
cin >> n ;
cout << "der effektive Zinssatz beträgt:"<< effzins(z,n)-1 <<endl;
}
-
das endl hinter den cout hab ich nun auch schon hinzugefuegt
-
hab den identischen quelltext mit bloodsheet versucht jedoch mag der das überhaupt nicht
-
Sie terminiert nicht, wenn cond, wie du gesagt hast, eine Funktion ist. cond müßte ein Makro sein, was etwa so definiert ist:
#define cond(i,t,e) ((i)?(t):(e))
BTW noch was zum Stil: #include <name> ist für die Standardbibliothek reserviert. Eigene Header sollten so eingebunden werden: #include "name", wobei name hier der Dateiname ist. Je nach Geschmack würde man die Datei cond.h, cond.hh, cond.hpp oder ähnlich nennen.
Achja, und die globalen Variablen sind unnötig. Definiere z und n doch besser lokal in der main-Funktion.
-
und warum terminiert das nicht??
wenn ich bedingung hab n==0 und sonst mein und wenn das war ist geb ich 1 zurück und wenn es falsch is verringere ich mein n durch das effzins(z,(n-1)) immer um 1
warum sollte das denn dann nicht terminieren???
und jo so sieht das makro aus
-
ok also
das mit den anführungszeichen war es bei der cond.h
mein prob iss grad nur wie bekomme ich aus der doofen cpp datei ne exe weil mein doofer übungsleiter will da ne exe ham ^^
-
QuarkMan schrieb:
warum sollte das denn dann nicht terminieren???
Es kann nicht terminieren, wenn, wie du gesagt hattest, cond eine Funktion ist, weil alle Funktionsparameter vor dem Aufruf ausgewertet werden.
und jo so sieht das makro aus
Dann sag nicht, das es eine Funktion ist.
-
wie alle parameter werden vor funktionsaufruf gestartet???
wie soll ich das verstehen?
-
wie soll denn ie
cond(*****)
aussehen damit sie rekursiv(1+(z/n)^n berechnet??
-
Bitte genauer lesen.
Ich sagte: Das kann nicht terminieren, wenn cond eine Funktion ist.
cond ist aber keine Funktion, sondern ein Makro.
Was das erstellen einer ausführbaren Datei angeht, da wendest du dich am besten vertrauensvoll an das für deinen Compiler/IDE zuständige Forum.
-
ok also terminieren tut es aber es rechnet blos voll den scheiss aus ^^
also es soll ((1+(z/n)^n)-1 berechnet werden
nur versteh ich nur warum es das nicht tut hab es nun umgeschrieben so wie ich rekursion verstehen muesste es doch so gehen
cond(n>=1,(1+(z/n))*effzins(z,n-1),1);
-
das -1 hab ich hinten bei der ausgabe mit eingerechnet die Rekursion soll nur mein (1+(z/n)^n berechnen
-
also meine rekursion terminiert zwar jedoch:
berechnet sie nicht (1+(z/n)^n sondern
summe von i=0 bis n von (1+z/i)^i
wie kann ich eine potenz durch eine rekursion darstellen?
-
so stimmt das prog nun:
#include <iostream>
#include "cond.h"using namespace std;
float effzins(float z, int n)
{
return cond(n>=1,(1+(z))*effzins(z,n-1),1);
}int main()
{
float z;
int n;
cout << "Geben Sie bitte den Zinssatz ein:"<<endl;
cin >> z ;
cout << "Geben sie die Zahl der Verzinsungen pro Jahr ein"<<endl;
cin >> n ;
cout << "Der effektive Zinssatz betraegt:"<< (effzins(z/n,n)-1)*100 <<"%" <<endl;
cin >> z;
}