Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.



  • #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include "C:\Users\conrad\source\repos\V1\C09\Cpptime\Cpptime\Cpptime.h"
    #include "Complex.h"
    using namespace std;
    
    int main() {
    	Time start;
    	const double pi = 3.14159265;
    	cout << start.dayOfWeek();
    	const int TwoPi = 360;
    	Complex ePowerIfI;
    	double fIradian;
    
    	for (int fI = 0; fI <= TwoPi; fI++) {
    		fIradian = fI * pi / 180;
    		ePowerIfI.set_real(cos(fIradian));
    		ePowerIfI.set_imaginaer(sin(fIradian));
    		cout << fI << "° " << ePowerIfI;
    	}
    	Time end;
    	cout << "start " << start.ascii() << endl;
    	cout << "end " << end.ascii() << endl;
    	cout << " time " << end.delta(&start);
    }
    


  • Das Programm überprüft Eulers Identität...... Alle Kommentare willkommen......


  • Mod

    #include "C:\Users\conrad\source\repos\V1\C09\Cpptime\Cpptime\Cpptime.h"
    

    Conrad, du solltest aufpassen, welche Informationen du versehentlich im Internet preisgibst. Außerdem solltest du die Suchpfade deines Compiler einrichten 😉

    Die Klasse std::complex aus der Standardbibliothek ist dir bekannt?

    const int TwoPi = 360;
    

    Das wird garantiert niemanden verwirren 😃
    Deine Rechnung ist ein bisschen merkwürdig. Du hast von den Variablennamen her doch eindeutig vor, dass fI ein Winkel im Bogenmaß ist. Aber es dank solcher Hauer wie TwoPi = 360; ist es effektiv doch Grad. Und dann rechnest du das wieder zurück ins Bogenmaß. Wozu überhaupt Grad in deinem Programm? Weil die Ausgabe des Winkels lieber in Grad sein soll? Dann rechne es doch dort bei der Ausgabe um, dann kannst du an der Stelle auch einen etwas genaueren Wert für 2π benutzen, als 360…

    Du weißt, dass der letzte Ausdruck in einer for-Schleife nicht unbedingt ein Inkrement um 1 zu sein braucht? Das kann alles sein, was du möchtest.

    sin und cos sind im Header cmath deklariert. Das kann zwar zufällig trotzdem auch ohne diesen funktionieren, muss es aber nicht.

    Ich sehe nicht, was irgendetwas hier von mit Eulers Identität zu tun haben soll. Du berechnest doch nur Sinus und Cosinus der Winkel 0° bis 360°. Sollten da nicht irgendwo Eulers Konstante, ein imaginäres Element, und eine Potenz vorkommen? Du steckst ja das Wissen schon rein, dass pow(e, i x) = cos(x) + i sin(x) ist.



  • Danke SeppJ,
    Es geht um e^ipi +1=0;
    360
    365
    366
    Da sind einige Geheimnisse, es ist eine Spielerei, komplexe Zahlen sind ein mächtiges Werkzeug für diferentiale Gleichungen. Danke.





  • @SeppJ

    //: eIPi.cpp
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include "Header.h"
    #include <cmath>
    #include <complex>

    using namespace std;

    int main() {
    Time start;
    const complex<double> pi{ 3.14159265, 0 };
    const complex<double> e{ 2.718282, 0 };

    complex<double> ePowerIfI;
    
    complex<double> i {0, 1};   // Imaginary unit
    int j = 1;
    /*   ASCII 65		ASCII 66  
     KIrilisch		*/	
    	
    for (complex<double> fI = 0.1; j < 62; j++) {		// 36 0 degree Celsius
    	
    	ePowerIfI = pow(e,i * fI);
    	fI += 0.1;
    	cout << fI << "radian " << ePowerIfI << endl;
    }
    Time end;
    cout << "start " << start.ascii() << endl;
    cout << "end " << end.ascii() << endl;
    cout << " time " << end.delta(&start);
    

    }


  • Mod

    Es macht zwar keinen echten Unterschied, aber dank den Wundern von Überladung und Umwandlungen kann man problemlos complex mit nicht-complex Typen mischen. Das heißt, du könntest e, pi, und fI auch als double definieren und der Rest des Programms würde unangetastet weiter exakt das gleiche tun. Sähe vielleicht ein bisschen schöner aus. Außerdem könnte man dann die Konstanten auch in anderem Kontext benutzen, und beispielsweise feststellen, dass e < pi. Oder ob fI < 6.2. Was ja mit komplexen Zahlen beides nicht geht.



  • @SeppJ danke, es sind gute Ideen, überladene Funktionen zu üben....Du bist gute Hilfe, danke Dir...


  • Mod

    @odalv sagte in Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.:

    @SeppJ danke, es sind gute Ideen, überladene Funktionen zu üben....Du bist gute Hilfe, danke Dir...

    Immer eine gute Übung, aber in diesem Fall war gemeint, dass die Macher von std::complex das schon für dich gemacht haben: https://ideone.com/hv2Sna



  • @odalv sagte in Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.:

    for (complex<double> fI = 0.1; j < 62; j++) { // 36 0 degree Celsius

    Sechsunddreißig Null Grad Celsius? Was hat nun die Temperatur wieder mit Winkeln zu tun? Und was sollen die beiden Zahlen bedeuten?

    Ich würde die Loop wahrscheinlich in Grad (Winkel, nicht Temperatur) machen, damit ich da ganzzahlige Grad-Winkel habe und in der Berechnung einfach mit einer Konstanten deg_to_rad multiplizieren:

    const double PI = std::acos(-1.0);
    const double deg_to_rad = PI / 180.0;
    
    // hier kannst du deinen Beginn/Ende/Step einstellen
    for (double angle_deg = 0.0; angle_deg < 600; angle_deg += 10) {
        const auto angle_rad = angle_deg * deg_to_rad;
        ... // rechne mit angle_rad
    } 
    


  • @odalv sagte in Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.:

    const complex<double> pi{ 3.14159265, 0 };
    const complex<double> e{ 2.718282, 0 };
    

    Noch ein (für Übungscode) nicht ganz so wichtiges Detail am Rande - Ab C++20 gibt es diese Konstanten (endlich) auch im Standard:

    #include <numbers>
    
    using std::numbers::e;
    using std::numbers::pi;
    

    Hat den Vorteil, das diese dann maxmiale Genauigkeit für den Datentypen (hier double) haben und es eine einzige Stelle gibt, wo sie definiert sind (statt zig Stellen überall im Code verteilt mit unterschiedlich vielen Nachkommastellen und man sich irgendwann wundert, weshalb zwei Programmteile bei der selben Berechnung zu verschiedenen Ergebnissen kommen 😉 ).

    Alternativ kann man sich die Konstanten sogar aus mathematischen Funktionen herausziehen und erreicht damit quasi implizit eine für den Fliesskomma-Datentyp und die Maschine gute Genauigkeit:

    #include <cmath>
    
    const double pi = 2.0 * std::asin(1.0);
    const double e = std::exp(1.0);
    


  • @Finnegan danke, das freut mich



  • @wob danke, ich werde später über 36 erklären.
    6x6 Menschliche Temperatur usw



  • @SeppJ danke dir, schönes Wochenende


Anmelden zum Antworten