Ahiles und Schildkröte
Verfasst: Mo Jul 06, 2015 11:32 am
Hallo. Ich bin festgefahren.
Kann mir jemand helfen. Ich muss ein programm in C schreiben. Das programm soll dabei eines rekursiven Algoritmus bedinen.
Das programm lifert als Ausgaben
-den Vorsprung der Schildkröte in Metern, wenn Achiles die Hälfte des jeweiligen Vorsprungs erreicht hat.
-die Zeit, die bis dahin vergangen ist, in Sek.
-die Strecke, die Achiles zum Zeitpunkt der nächsten vollständigen Sek. nach Erreichen der Schildkröte zurückgelegt hat.
-die Strecke, welche die Schildkröte zum Zeitpunkt der nächsten vollständigen Sekunde nach dem Einholen durch Achiles zurückgelegt hat.
So:
--------------------------------------------------------------------------------------------------------------------
Geschwindigkeit Achilles eingeben :10
Geschwindigkeit Schildkroete eingeben :0.1
Vorsprung Schildkroete eingeben :100
Toleranz eingeben :1
Abstand 100.000 m nach 0.000 sec
Abstand 50.500 m nach 5.000 sec
Abstand 25.503 m nach 7.525 sec
Abstand 12.879 m nach 8.800 sec
Abstand 6.504 m nach 9.444 sec
Abstand 3.284 m nach 9.769 sec
Abstand 1.659 m nach 9.933 sec
Abstand 0.838 m nach 10.016 sec
Abstand 0.423 m nach 10.058 sec
Abstand 0.214 m nach 10.079 sec
Abstand 0.108 m nach 10.090 sec
Abstand 0.054 m nach 10.096 sec
Abstand 0.028 m nach 10.098 sec
Abstand 0.014 m nach 10.100 sec
Abstand 0.007 m nach 10.100 sec
Schildkröte nach 11.000000 sek.: = 101.1000
Achilles nach 11.000000 sek.: = 110.0000
-------------------------------------------------------------------------------------------------------------------
Meine quellcode:

Das programm lifert als Ausgaben
-den Vorsprung der Schildkröte in Metern, wenn Achiles die Hälfte des jeweiligen Vorsprungs erreicht hat.
-die Zeit, die bis dahin vergangen ist, in Sek.
-die Strecke, die Achiles zum Zeitpunkt der nächsten vollständigen Sek. nach Erreichen der Schildkröte zurückgelegt hat.
-die Strecke, welche die Schildkröte zum Zeitpunkt der nächsten vollständigen Sekunde nach dem Einholen durch Achiles zurückgelegt hat.
So:
--------------------------------------------------------------------------------------------------------------------
Geschwindigkeit Achilles eingeben :10
Geschwindigkeit Schildkroete eingeben :0.1
Vorsprung Schildkroete eingeben :100
Toleranz eingeben :1
Abstand 100.000 m nach 0.000 sec
Abstand 50.500 m nach 5.000 sec
Abstand 25.503 m nach 7.525 sec
Abstand 12.879 m nach 8.800 sec
Abstand 6.504 m nach 9.444 sec
Abstand 3.284 m nach 9.769 sec
Abstand 1.659 m nach 9.933 sec
Abstand 0.838 m nach 10.016 sec
Abstand 0.423 m nach 10.058 sec
Abstand 0.214 m nach 10.079 sec
Abstand 0.108 m nach 10.090 sec
Abstand 0.054 m nach 10.096 sec
Abstand 0.028 m nach 10.098 sec
Abstand 0.014 m nach 10.100 sec
Abstand 0.007 m nach 10.100 sec
Schildkröte nach 11.000000 sek.: = 101.1000
Achilles nach 11.000000 sek.: = 110.0000
-------------------------------------------------------------------------------------------------------------------
Meine quellcode:
Code: Alles auswählen
#include <stdio.h>
#define BIL printf("\n\n")
void schritt(double v_S,double g_A,double g_S,double t,double z);
int main( void )
{
char str[50];
double g_A; // Geschwindikeit Achilles in m/s
double g_S; // Geschwidikeit Schildkroete in m/s
double v_S; // v_S Vorsprung Schildkrkoete in m
double t; // Toleranz in cm
double z; // vergangene Zeit in sek
BIL;
printf("\n\tGeschwidigkeit Achiles eingeben < 10 m/s > : ");
fgets(str,50,stdin);
sscanf(str,"%lf",&g_A);
printf("\n\tGeschwindikeit Schildkroete eingeben < 0.1 m/s >: ");
fgets(str,50,stdin);
sscanf(str,"%lf",&g_S);
printf("\n\tVorsprung Schildkrkoete eingeben < 100 m > : ");
fgets(str,50,stdin);
sscanf(str,"%lf",&v_S);
printf("\n\tToleranz eingeben < 1 cm > : ");
fgets(str,50,stdin);
sscanf(str,"%lf",&t);
BIL;
schritt(v_S,g_A,g_S,t,z);
}
/*************************************************************************/
void schritt(double v_S,double g_A,double g_S,double t,double z)
{
if( v_S < t )
{
return;
}
else
{
printf("\n\tAbstand %3.3lf m \tnach %3.3lf sec ",v_S,z);
v_S = (v_S / 2);
z += (v_S * g_S);
v_S = (v_S / g_A) / g_A + v_S;
schritt(v_S,g_A,g_S,t,z);
}
}