Langen Term in c++ realisieren
-
Hi, nachdem ich hier schonmal kompetent Hilfe bekommen habe, versuche ich nochmal mein Glück

Ich versuche grade für den Physik-Unterricht ein kleines Programm zu schreiben (eigentlich gehts eher um den Lerneffekt^^) und muss dafür eine recht lange Formel mit einigen Variablen ausrechnen lassen.
http://upload.wikimedia.org/math/f/5/0/f5089b792ed089d674082669239bc8c8.png
Meine Frage ist nun, ob ich für jeden einzelnen Rechenschritt eine eigene Variable erzeugen muss, die einzeln ausgerechnet und anschließend dann verrechnet werden, oder ob ich die Formel in einem Schritt ausrechnen lassen kann.
Der Benutzer muss V0 und Alpha angeben, g werde ich fest als 9,81 definieren. Und bei h0 weiß ich ehrlich gesagt noch nicht was das ist....
Wie sähe denn jetzt die Formel in c++ für "T" aus?
PS: Muss ich dafür nur math.h einfügen, oder benötige ich noch eine weitere Bibleothek?
freundliche Grüße
jusaca
-
T = v0 * sin ( a )+ sqrt( .... ) / g;
math.h wäre für die trigonometrie funktionen nicht schlecht aber sonst sieht die formel nicht wirklich anders aus.
PS: Du kannst es entweder aufspalten in einzelne rechenschritte oder in einem das ist relativ egal, von der laufzeit macht es warscheinlich etwas im nano sekunden bereich aus.
-
math.hist kein C++ Header, sondern ein C Header. Der C++ Header lautetcmath.
2. Mach Zwischenresultate und verrechne diese weiter. Der Compiler optimiert dies dann wahrscheinlich völlig weg. Zum Debuggen ist das aber unheimlich praktisch, damit man gleich die Zwischenresultate einsehen kann.
Grüssli
-
Ich hab das jetzt mal als eine lange Formal geschrieben, da das dann übersichtlicher wird.
Und Zwischenwerte abzufragen wäre ja nur in dem Fall praktisch, falls ein Fehler vorliegen sollte, und dann wird die Formal ja sowieso berichtigt
Hier mal der Code, den ich geschrieben habe, um die Wurfweite beim schrägen Wurf auszurechnen. Könnte da mal grad jemand trüberschauen? Ich hab hier nämlich keinen Compiler zur Hand, um zu testen obs klappt.
Der Code ist ja nicht grade lang oder schwer, aber ich stecke in den Kinderschuhen
// Tool zum Berechnen der Flugweite beim schrägen Wurf // #include <iostream> #include <cmath> using namespace std; //Hauptprgramm // int main() { //Variablen deklarieren // float Flugweite; float Abwurfhöhe; float Walpha; float Calpha; float Flugzeit; float Vnull; //Variablen über Benutzereingabe definieren // cout << "Abwurfhöhe angeben: "; cin >> Abwurfhöhe; cout << endl; cout << "Abwurfwinkel angeben: "; cin >> Walpha; cout << endl; cout << "Abwurfgeschwindigkeit angeben: "; cin >> Vnull; cout << endl; //Berechnen von Cosinus Alpha // Calpha = cos (Walpha); //Berechnen der Flugzeit // Flugzeit = Vnull * Calpha + sqrt(pow(double Vnull, double 2) * pow(double sin (Walpha), double 2) + 2 * 9,81 * Abwurfhöhe) / 9,81; //Berechnen der Flugweite // Flugweite = Vnull * Calpha * Flugzeit; cout << "Flugweite: " << Flugweite << endl; return 0; }Und eine Frage hab ich immer noch:
Ich bin mir grad nicht sicher, aber kann es sein, dass wenn ich die exe dann hinterher starte, mein Ergebniss dann gleich wieder verschwindet und sich die Konsole schließt?Ich war der Meinung, ich muss noch einen Codeschnipsel einfügen, damit am Schluss das Ergebnis stehen bleibt...
freundliche Grüße
jusaca
-
jusaca schrieb:
Ich bin mir grad nicht sicher, aber kann es sein, dass wenn ich die exe dann hinterher starte, mein Ergebniss dann gleich wieder verschwindet und sich die Konsole schließt?
Ich war der Meinung, ich muss noch einen Codeschnipsel einfügen, damit am Schluss das Ergebnis stehen bleibt...
Ja, entweder Du baust eine Wartefunktion ein, oder Du startest das Programm aus einer vorher geöffneten Konsole.
-
jusaca schrieb:
Und Zwischenwerte abzufragen wäre ja nur in dem Fall praktisch, falls ein Fehler vorliegen sollte, und dann wird die Formal ja sowieso berichtigt

Und wie findest du raus, dass etwas, bzw. was genau, falsch läuft? Aja, genau, in dem man die Zwischenresultate anschaut.

Für allem für später, wenn man noch grössere Berechnungen hat, sollte man sich so ein Vorgehen angewöhnen. Beim Programmieren geht es nicht darum, ob etwas "schön" aussieht, sondern ob man den Programmcode lesen und debuggen kann. Die Wartung ist viel wichtiger!jusaca schrieb:
Und eine Frage hab ich immer noch:
Ich bin mir grad nicht sicher, aber kann es sein, dass wenn ich die exe dann hinterher starte, mein Ergebniss dann gleich wieder verschwindet und sich die Konsole schließt?Ich war der Meinung, ich muss noch einen Codeschnipsel einfügen, damit am Schluss das Ergebnis stehen bleibt...
http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html
Grüssli
-
Ok,
jetzt habe ich1. alle Schritte einzeln in Variablen gepackt
2. mir nen Compiler besorgt und installiert (ist zwar uralt, aber klappt noch :D)Aber in dieser Zeile:
Flugzeit = Vnull * Calpha + sqrt(Vnullq * Salphaq + 2 * 9,81 * Abwurfhoehe) / 9,81;Bekomme ich folgenden Fehler:
"error C2660: 'sqrt' : Funktion akzeptiert keine 2 Parameter"Wo hab ich denn nun den Fehler eingebaut?
freundliche Grüße
jusaca
-
9,81ist falsch! Richtig wäre9.81
C++ ist schliesslich eine englisch ausgerichtete Sprache
Grüssli
-
Ah!! Stimmt..... so ein kleines Missgeschick und schon sucht man sich halb tot^^
Ich danke euch für eure Hilfe - jetzt klappt alles. Muss mich nur noch mit der Warteschleife beschäftigen, damit ich das Ergebnis auch genießen kann *g
freundliche Grüße
jusaca
-
In deinem Ausdruck könntest du 9.81 als eine Konstante definieren (ja nicht mit
#define), da die Zahl mehrmals vorkommt:const float g = 9.81f;Übrigens:
jusaca schrieb:
Ok,
jetzt habe ich [...] mir nen Compiler besorgt und installiert (ist zwar uralt, aber klappt noch :D)Davon würde ich dringendst abraten. Du handelst dir dabei nur Probleme ein. Es gibt kostenlose moderne Entwicklungsumgebungen wie Microsoft Visual C++ 2008 Express oder Code::Blocks, die sind auch weitgehend mit dem C++-Standard kompatibel.
-
Nexus schrieb:
Davon würde ich dringendst abraten. Du handelst dir dabei nur Probleme ein. Es gibt kostenlose moderne Entwicklungsumgebungen wie Microsoft Visual C++ 2008 Express oder Code::Blocks, die sind auch weitgehend mit dem C++-Standard kompatibel.
Ich hatte noch "Microsoft Visual C++ 6.0" auf CD. Habe ich jetzt benutzt, weil ich nichts anderes zur Hand hatte

Aber ich stehe heute abend echt auf dem Schlauch.... An welcher Stelle von dem Code muss ich denn nun das "void wait () " einfügen, damit der mir das Programm auch wirklich anhält?
freundliche Grüße
jusaca
-
Na also, jetzt hab ich es

Nochmal einen dank an die Community und eine gute Nacht

Grüße
jusaca