Ahiles und Schildkröte

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
wam
Beiträge: 4
Registriert: Sa Jul 04, 2015 10:35 am

Ahiles und Schildkröte

Beitrag von wam » Mo Jul 06, 2015 11:32 am

Hallo. Ich bin festgefahren. :shock: 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:

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Ahiles und Schildkröte

Beitrag von Xin » Mo Jul 06, 2015 7:43 pm

wam hat geschrieben:Hallo. Ich bin festgefahren. :shock: 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.
z += (v_S * g_S);

Und die Zeit ist abhängig vom Produkt aus Vorsprung der Schildkröte und der Geschwindigkeit der Schildkröte?

Den Hintergedanken der anderen Formeln verstehe ich ehrlich gesagt auch nicht. Bitte kommentiere mal im Quelltext, was Du da tust - und warum. Das hilft mir zu verstehen, was Du da tust - und Dir vermutlich auch. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

wam
Beiträge: 4
Registriert: Sa Jul 04, 2015 10:35 am

Re: Ahiles und Schildkröte

Beitrag von wam » Di Jul 07, 2015 6:20 am

Code: Alles auswählen

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); // vergangene Zeit

		v_S = (v_S / g_A) / g_A + v_S;
		schritt(v_S, g_A, g_S, t, z);
	}
}
Die Funktion ' schritt() ' ruf sich selbst auf, wenn die Toleranz für den Abstand von Schildkröte und Achiles noch nicht erreicht ist. Genau damit habe ich Problem.

Edit by Xin: Codetags hinzugefügt

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Ahiles und Schildkröte

Beitrag von Xin » Di Jul 07, 2015 8:35 am

wam hat geschrieben:

Code: Alles auswählen

		z += (v_S * g_S); // vergangene Zeit
Das hast Du sehr schön kommentiert. :-D

Jetzt kommentiere mal, wieso Du die Zeit so berechnest. Und vor allem weshalb. :-)
wam hat geschrieben:Die Funktion ' schritt() ' ruf sich selbst auf, wenn die Toleranz für den Abstand von Schildkröte und Achiles noch nicht erreicht ist. Genau damit habe ich Problem.
Schreib mal in ganzen Sätzen auf, was Du tun willst. Das Ziel ist nicht, dass Du abschreibst, was Du im ersten Posting geschrieben hast, sondern dass Du einen Text aufsetzt in dem Du haarklein jedes Detail beschreibst, was Du eigentlich tun sollst und wie Du es löst und weshalb Du es genauso so löst. Programmieren auf Deutsch.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten