Seite 1 von 1

Programm zur Berechnung der Zeitdilatation

Verfasst: Sa Mai 13, 2017 9:56 pm
von Gerowia
Hallo,
ich soll ein Programm zur Berechnung der Zeitdilatation der speziellen Relativitätstheorie schreiben. Eingelesen sollen vom benutzer hierfür Geschwindigkeit v und Zeitspanne t werden. Allerdings hat die Rechnung bei mir leider kein Ergebnis, hat jemand eine Idee woran das liegen könnte?

Code: Alles auswählen

#include <stdio.h>
#include <math.h>
int main(void)
{
	double z, t, v, c ;
	c=299792458;

	
	printf("relative Geschwindigkeit (in Metern pro Sekunde): \n");
	scanf("%d", &v);
	printf("Zeitspanne (in Sekunden): \n");
	scanf("%d", &t);
	
	if(v<=c, t<=c){
	
	z=(1/sqrt(1-((v*v)/(c*c))))*t ;
	printf("Die gemessene Zeitspanne betraegt %6.2f \n", z );
}
	
	return 0;
}

Re: Programm zur Berechnung der Zeitdilatation

Verfasst: Sa Mai 13, 2017 10:06 pm
von cloidnerux
Zum generellen Vorgehen:
Wenn du nicht weißt, was passiert, helfen zusätzliche Ausgaben:

Code: Alles auswählen

printf("relative Geschwindigkeit (in Metern pro Sekunde): \n");
scanf("%d", &v);
printf("Zeitspanne (in Sekunden): \n");
scanf("%d", &t);
printf("v=%f, t=%f\n", v, t);
Mit diesen Zeilen wird ganz schnell klar, dass egal was du eingibst, die Variablen immer den Wert 0 haben. Nach kurzer Recherche finden wir heraus, dass scanf nur dann korrekt mit doubles Funktioniert, wenn wir den Bezeichner "%lf" verwenden.

Weiterhin hast du ein Problem mit deinem if:

Code: Alles auswählen

if(v<=c, t<=c){
Warum genau das compiliert kann ich dir nicht sagen, es sorgt aber auf jeden fall nicht dafür, dass du die Berechnung nur durchführst, wenn beide Zahlen kleiner der Lichtgeschwindigkeit sind. Der Korrekte logische Ausdruck lautet:

Code: Alles auswählen

if(v<=c && t<=c){

Re: Programm zur Berechnung der Zeitdilatation

Verfasst: So Mai 14, 2017 2:46 pm
von Gerowia
Oh vielen Dank, ich hatte zuvor int verwendet bevor ich auf double gewechselt habe und wohl vergessen %d zu %lf abzuändern.
Auch die Korrektur des logischen und habe ich nun abgeändert, danke. Aber trotzdem wird als Ergebnis meiner Rechnung, egal welche Werte ich eingebe ,immer der für t eingegebene Wert ausgespuckt..
Hat dazu vielleicht noch jemand eine Idee? :shock:

Re: Programm zur Berechnung der Zeitdilatation

Verfasst: So Mai 14, 2017 3:33 pm
von cloidnerux
Ich habe folgendes Programm:

Code: Alles auswählen

#include <stdio.h>
#include <math.h>
int main(void)
{
   double z, t, v, c ;
   c=299792458;

   
   printf("relative Geschwindigkeit (in Metern pro Sekunde): \n");
   scanf("%lf", &v);
   printf("Zeitspanne (in Sekunden): \n");
   scanf("%lf", &t);
   printf("v=%f, t=%f\n", v, t);
   if(v<=c && t<=c){
   
       z=(1/sqrt(1-((v*v)/(c*c))))*t ;
       printf("Die gemessene Zeitspanne betraegt %6.8f \n", z );
   }
   
   return 0;
}
und folgende Eingabe:

Code: Alles auswählen

relative Geschwindigkeit (in Metern pro Sekunde):
100000000
Zeitspanne (in Sekunden):
1
v=100000000.000000, t=1.000000
Die gemessene Zeitspanne betraegt 1.06075200
Es kommen also andere Werte heraus. Man muss nur sehr große Werte eingeben. Nach der Formel von Wikipedia müsste es so stimmen

Re: Programm zur Berechnung der Zeitdilatation

Verfasst: So Mai 14, 2017 3:54 pm
von Gerowia
Oh danke, du hast recht, ich dachte schon ich hätte noch einen Fehler gemacht, bin mit der Thematik nicht sonderlich vertraut ;)