Erledigt Danke Berechnung Entfernung Erde Alpha Centauri



  • /*Ein Raumschiff startet von der Erde und bewegt sich gleichförmig
    mit x Prozent der Lichtgeschwindigkeit. Lesen Sie den Prozentsatz x
    ein und berechnen Sie, wie lange eine Reise zum Alpha Centauri für den Piloten dauert.
    Wieviel Zeit ist auf der Erde vergangen?
    Anmerkung: In der Klassenbibliothek cmath befindet sich die Funktion sqrt(),
    die zur Berechnung der Quadratwurzel dient. Der übergebene Wert sollte nicht
    kleiner als 0 (Null) sein, sonst wird ein Fehler ausgelöst.
    */

    #include <iostream>
    using namespace std;

    int main()
    {

    double v,x,t;

    cout<<"Bitte Geben Sie den Prozentsatz fuer Die Geschwindigkeit ein"<< endl;
    cin>>x;

    if(x!=0)
    {
    const double c=299792458; //Lichtgeschwindigkeit in m/s
    const double s=4.1153e16; //Entfernung

    v=c*(x/100.0); //Prozentwert der abweicht von der Lichtgeschwindigkeit

    t=s/v; //Zeitberechnung aus der Physik

    cout<<"Die Reise mit Geschwindigkeit "<<v<<" dauert "<<t<<" Lichtjahre "<<endl;
    cin>>t;
    }
    else
    cout<<"0 ist keine Geschwindigkeit"<< endl;

    }

    Hallo zusammen,
    ist das Programm richtig programmiert
    bitte um Hilfe
    😃



  • Ihr habe C aber schön gelernt...


  • Mod

    Das Lichtjahr ist ein Entfernungsmaß, keine Zeitdauer.



  • Wenn in der Aufgabe expilzit sqrt angesprochen wird, dann sollte man diese Funktion auch verwenden. Desweiteren suggeriert die Aufgabenstellung, dass relativistisch gerechnet werden soll.



  • knivil schrieb:

    Wenn in der Aufgabe expilzit sqrt angesprochen wird, dann sollte man diese Funktion auch verwenden. Desweiteren suggeriert die Aufgabenstellung, dass relativistisch gerechnet werden soll.

    👍
    @TE
    http://de.wikipedia.org/wiki/Zeitdilatation



  • #include <iostream>
    #include <cmath>
    #include <stdio.h>

    using namespace std;

    int main()
    {

    double v,x,t;

    cout<<"Bitte Geben Sie den Prozentsatz fuer Die Geschwindigkeit ein"<< endl;
    cin>>x;

    if(x!=0)
    {
    const double c=299792458; //Lichtgeschwindigkeit in m/s
    const double s=4.1153e16; //Entfernung

    v=c*(x/100.0); //Prozentwert der abweicht von der Lichtgeschwindigkeit

    t=t*((sqrt((1-(pow(v,2))/(pow(c,2)))))); //Zeitdilatation

    cout<<"Die Reise mit Geschwindigkeit "<<v<<" dauert "<<t<<" Lichtjahre "<<endl;
    cin>>t;
    }
    else
    cout<<"0 ist keine Geschwindigkeit"<< endl;

    }



  • 1. Wozu brauchst du <stdio.h> (welches übrigens nicht mal Standardkonform ist)?
    2. Wieso definierst du die Variablen am Scope-Anfang und nicht dort wo du sie benötigst?
    3. Dieses Forum kennt C++-Tags.



  • markuswenczel schrieb:

    Anmerkung: In der Klassenbibliothek cmath befindet sich die Funktion sqrt(),
    die zur Berechnung der Quadratwurzel dient.

    cmath ist beim besten Willen keine Klassenbibliothek.


  • Mod

    Fällt dir bei deinen Formeln nichts auf? Schreib das mal auf Papier hin und guck mal nach, ob du wirklich den Zahlwert der Lichtgeschwindigkeit brauchst, wenn du die Entfernung schon in Lichtjahren kennst.

    Weiterhin ein paar grobe Fehler:
    - Das s fließt nirgends ein. Die Entfernung ist für die Reisedauer schon entscheidend wichtig.
    - Das t wird uninitialisiert benutzt
    - Aus den beiden obigen Punkten folgt, dass deine Formeln schlichtweg falsch sind
    - Eine Fließkommazahl (x) absolut zu vergleichen ist tendenziell gefährlich, auch wenn es hier noch einmal gut gehen mag

    Diese Fehler hättest du aber auch leicht gesehen, wenn du dein Programm mit Warnoptionen compilieren würdest (sollte man immer tun) oder spätestens beim Ausprobieren wäre dir das uninitialisierte t aufgefallen. Heißt das, du hast dein Programm nicht einmal selber ausprobiert?



  • Also ich hab mir das mal angeguckt und bin zu folgedem Code gekommen:

    #include <iostream>
    
    using namespace std;
    
    int main( int argc, char **argv )
    {
    	int Tmp;
    	double t, v;
    	const double c = 299792458; //Lichtgeschwindigkeit in m/s 
    	const double s = 4.1153e16; //Entfernung 
    
    	cout << "Prozentsatz eingeben: ";
    	cin >> Tmp;
    	cout << endl;
    
    	if( Tmp == 0 )
    	{
    		cout << "Fehler! 0 ist keine Geschwindigkeit!" << endl;
    		return 0;
    	}
    
    	v = Tmp / 100;
    
    	v = c * v;
    
    	t = s / v;
    
    	cout << "Das Raumschiff braucht " << t << " Sekunden!" << endl;
    
    	return 0;
    }
    

    Aber man muss sagen, dass das eine völlig unklare (und meiner Meinung nach auch fehlerhafte!) Aufgabenstellung ist!
    Aufgrund der Anmerkung, dass man cmath (was ja gar keine Klassenbibliothek ist lol) bzw sqrt() verwenden soll, gehe ich davon aus, dass der Aufgabensteller folgende Formel im Kopf hatte:
    s = 0.5 * a *t^2
    -> Diese Formel wird aber nur dann gebraucht, wenn es sich um eine inkonstante Geschwindigkeit handelt! (Aber vllt nur zur Verwirrung...)

    Man soll zwar noch die vergangene Zeit auf der Erde berechnen, aber die ist doch immer gleich? Ich nehme mal stark an, dass man hier nicht mit Einsteins-Theorien arbeiten muss O.o



  • Edit: Unklar z.B. bei der Definition des Prozentsatzes; Wenn man einen Prozentsatz einliest bedeutet doch, dass man z.B "50" eingibt, was 50% bzw dem Prozentsatz 0.5 entspricht. Oder?


  • Mod

    SeppJ schrieb:

    - Eine Fließkommazahl (x) absolut zu vergleichen ist tendenziell gefährlich, auch wenn es hier noch einmal gut gehen mag

    Da kann ich nun nicht zustimmen. Da es nur eine (kontextabhängige) Tendenz ist, gibt es keinen Grund damit anzufangen, wenn ein solcher Fall nicht vorliegt. Eher schon würde ich die entsprechende Fehlerbehandlung kritisieren: Natürlich ist 0 (m/s) eine Geschwindigkeit und es ist sicher auch nicht sinnlos, in diesem Fall nach der Reisedauer zu fragen.



  • Yo schrieb:

    Ich nehme mal stark an, dass man hier nicht mit Einsteins-Theorien arbeiten muss O.o

    Doch, klar.

    Beweisstück A:

    Yo schrieb:

    Man soll zwar noch die vergangene Zeit auf der Erde berechnen, aber die ist doch immer gleich?

    Beweisstück B:

    Aufgabe schrieb:

    mit x Prozent der Lichtgeschwindigkeit



  • Beweisstück C:

    markuswenczel schrieb:

    Anmerkung: In der Klassenbibliothek cmath befindet sich die Funktion sqrt(), die zur Berechnung der Quadratwurzel dient.



  • .-.



  • Kann man hier überhaupt mit den Zeitdilatationsformeln der SRT rechnen, wenn sich die Erde nicht in einem Inertialsystem bewegt? ART-Berechnungen erscheinen mir für eine C++-Übungsaufgabe etwas unpassend.



  • camper schrieb:

    Eher schon würde ich die entsprechende Fehlerbehandlung kritisieren: Natürlich ist 0 (m/s) eine Geschwindigkeit und es ist sicher auch nicht sinnlos, in diesem Fall nach der Reisedauer zu fragen.

    Dann mal Butter bei die Fische: Wie lang dauert in diesem Fall die Reise?



  • ups 🙂



  • int main()
    {
      std::cout << "Prozentsatz eingeben: ";
      double speed;
      std::cin >> speed;
      speed /= 100;
      if (speed <= 0 || speed >= 1)
      {
        std::cout << "Das Raumschiff wird nie ankommen!" << std::endl;
        return 0;
      }
      const double distance = 4.1153;
    
      std::cout << "Vergangene Zeit auf der Erde: " 
                << distance / speed << " Jahre." << std::endl;
      std::cout << "Vergangene Zeit in dem Raumschiff: " 
                << (distance / speed) * sqrt(1 - pow(speed, 2)) 
                << "Jahre." << std::endl;
    
      return 0;
    }
    


  • @cooky451
    Ist das nicht falsch rum? Gefragt war doch die Reisedauer aus Sicht des Piloten und die währenddessen vergangene Zeit auf der Erde, nicht andersrum.


Anmelden zum Antworten