Problem beim gliedern von Funktionen und Schleifen.
-
Hi! Ich möchte hier niemanden auffordern sich in diesen schlampigen Code hineinzuversetzen, dennoch bin völlig verzweifelt.
Ich have versucht durch eine Art "Baumdiagram" 4 verschiedene Arten der Wahrscheinlichkeit in ein Programm zu säumen, aber ich bin natürlich total gescheitert. Wie man sieht, wenn man den Code anschaut bin ich nicht gerade der tolle Programmierer, dennoch gewillt zu lernen. Wer also einen Vorschlag für eine bessere Gliederung hätte, nur raus damit. :-).Es ist sinnlos nur 2 Zeilen zu posten, da das ganze Programm nicht funktioniert.
Das Problem ist, wenn man es ausführt, kann man die zweiten, dritte und vierte Formel nicht auswählen.#include <iostream> #include <math.h> using namespace std; double factorial (double num) { if (num==1) return 1; return factorial(num-1)*num; // recursive call } double formula1 (double n, double k) { double r; r=pow(n,k); return (r); } // n^k double formula2 (double n, double k) { double s; double fact1; double fact2; fact1=(n+k-1); fact2=(n-1); factorial(fact1); factorial(fact2); factorial(k); s=fact1/(fact2*k); return (s); } double formula3 (double n, double k) { double t; t=n/k; return (t); } double formula4 (double n, double k) { double u; u=n+k; return (u); } int main () { cout<<"Welcome to the probability calculator 0.1a by Alexander Svozil\n"; cout<<"Tell me the numbers, in the syntax ""number of globes"", ""drawings"" \n"; double globes; // Variables double drawings; int reclining ; int order ; int order2 ; cin>>globes; cin>>drawings; cout<<"With reclining?\n y=1 n=2\n"; cin>>reclining; if (reclining=1) { cout<<"Is the order important? y=1 n=2\n"; cin>>order; if(order=1) { double a; a=formula1(globes,drawings); cout<<"Ergebnis: "<<a<<"\n"; } else if(reclining=2) { double b; b=formula2(globes,drawings); cout<<"Ergebnis: "<<b<<"\n"; } } else if(reclining=2) { cout<<"Is the order important? y=1 n=2\n"; cin>>order2; if(order2=1) { double c; c=formula3(globes,drawings); cout<<"Ergebnis: "<<c<<"\n"; } else if(order2=2) { double d; d=formula4(globes,drawings); cout<<"Ergebnis: "<<d<<"\n"; } } system("Pause") ; return 0; }
Für die Leute die sich die Mühe machen es sich anzuschauen, Dank im vorraus.
-
= dient der Zuweisung, == ist für Vergleiche da
Da Zuweisungen ebenfalls Ausdrücke sind, können sie als Bedingung in if-Anweisungen auftreten - im Allgemeinen warnt der Compiler dann aber (wenn man es ihm gesagt hat).
factorial und formula2 machen wahrscheinlich kaum das, was du willstmain.cpp(27) : warning C4718: 'factorial' : recursive call has no side effects, deleting
was nicht verwunderlich ist. Ich habe mir das Programm nicht angeschaut, das sind alles nur Hinweise, die sich aus Compilermeldungen ergeben.
-
Ahh, danke schonmal für diese Antwort. Mein Compiler zeigt mir irgendwie keine Fehler an. (g++) Aber mal schaun was passiert.
lGEdit: Die Funktion geht nicht.
-
Ich hätte noch eine weitere Frage: Warum funktioniert der Code:
double factorial (double m) { double y = 1; if (m <= 1) return 1; y = m * factorial(m - 1); return y; } double formula2 (double n, double k) { double s; s=factorial(n+k-1)/(factorial(n-1)*factorial(k)); return (s); }
nicht (im Sinne von, kein Error beim kompilieren und keine Rückgabe.)
-
-pedantic -Wall -Wextra -Wformat=2 -Wconversion -Wsign-conversion -Wno-long-long -O
sollte für den Anfang als Standard-Compileroptionen nützlich sein. Einerseits sind die Warnungen im Allgemeinen nützlich, andererseits produzieren sie nur selten Falschmeldungen.
-
Handelt es sich vielleicht um einen Tippfehler oder liegt es an mir:
g++ -pedantic -Wall -Wextra -Wformat=2 -Wconversion -Wsign-conversion -Wno-long-long -O -o test test.cpp
ergibt bei mir:
cc1plus: error: unrecognized command line option "-Wsign-conversion"
g++ --version i686-apple-darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465)
Unter Windows (3.95.schlagmichtot) ebenso.
-
-Wsign-conversion gibt es erst ab gcc 4.3 - also einfach weglassen
-
Ach so. Vielen Dank.