Erledigt Danke Berechnung Entfernung Erde Alpha Centauri
-
#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; //Entfernungv=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.
-
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 magDiese 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?
-
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.
-
ipsec schrieb:
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.
Wie denn jetzt andersrum? Für den Piloten ist Zeit vergangen und auf der Erde ist auch Zeit vergangen. Was genau soll man da umdrehen?
-
Ich meine deine Berechnung. Das, was du als "Vergangene Zeit auf der Erde" berechnest, ist doch eigentlich die vergangene Zeit für den Piloten.
-
ipsec schrieb:
Ich meine deine Berechnung. Das, was du als "Vergangene Zeit auf der Erde" berechnest, ist doch eigentlich die vergangene Zeit für den Piloten.
Also ich habe Physik nach der 10. leider abgewählt, aber ich hoffe doch, dass ich Wikipedia Artikel lesen kann. "Bewegte Uhren gehen langsamer".
-
cooky451 schrieb:
ipsec schrieb:
Ich meine deine Berechnung. Das, was du als "Vergangene Zeit auf der Erde" berechnest, ist doch eigentlich die vergangene Zeit für den Piloten.
Also ich habe Physik nach der 10. leider abgewählt, aber ich hoffe doch, dass ich Wikipedia Artikel lesen kann. "Bewegte Uhren gehen langsamer".
Hättest nicht abwählen dürfen. Für den Piloten bewegt sich nicht das Raumschiff, sondern die Erde (und die restliche Umgebung)
-
cooky451 schrieb:
ipsec schrieb:
Ich meine deine Berechnung. Das, was du als "Vergangene Zeit auf der Erde" berechnest, ist doch eigentlich die vergangene Zeit für den Piloten.
Also ich habe Physik nach der 10. leider abgewählt, aber ich hoffe doch, dass ich Wikipedia Artikel lesen kann. "Bewegte Uhren gehen langsamer".
Das ist schon richtig, was du da gemacht hast, außer dass ich eine andere Fehlermeldung bei Überlichgeschwindigkeit ausgeben würde.