Programm zur Berechnung der Zeitdilatation

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Gerowia
Beiträge: 14
Registriert: Di Jan 03, 2017 10:38 am

Programm zur Berechnung der Zeitdilatation

Beitrag von Gerowia » Sa Mai 13, 2017 9:56 pm

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;
}

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Programm zur Berechnung der Zeitdilatation

Beitrag von cloidnerux » Sa Mai 13, 2017 10:06 pm

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){
Redundanz macht wiederholen unnötig.
quod erat expectandum

Gerowia
Beiträge: 14
Registriert: Di Jan 03, 2017 10:38 am

Re: Programm zur Berechnung der Zeitdilatation

Beitrag von Gerowia » So Mai 14, 2017 2:46 pm

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:

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Programm zur Berechnung der Zeitdilatation

Beitrag von cloidnerux » So Mai 14, 2017 3:33 pm

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Gerowia
Beiträge: 14
Registriert: Di Jan 03, 2017 10:38 am

Re: Programm zur Berechnung der Zeitdilatation

Beitrag von Gerowia » So Mai 14, 2017 3:54 pm

Oh danke, du hast recht, ich dachte schon ich hätte noch einen Fehler gemacht, bin mit der Thematik nicht sonderlich vertraut ;)

Antworten