2017-02-20 2 views
2

Ich kann nicht verstehen, warum es passiert, aber es wird eine Endlosschleife, wenn ich das Programm starte. Was mache ich falsch?Warum endet mein Programm in einer Endlosschleife?

program Hello 
    REAL K1,K2,RP,G,m,t,time,R1,R2 
    G = 6.67384 * (10**(-11)) 
    m = 5.9723E24  
    t = 0.1    
    RP = 6371000    
    K1 = 15      
    K2 = 10       
    R1 = K1 + RP 
    R2 = K2 + RP 
    r = R1 
    DO WHILE (r > R2) 
    r = r - ((Gm*t/r**2)*t) 
    time = time + t 
    END DO 
write (*,*) "Time = seconds" 
write (*,*) (Gm*t/r**2) 
end program Hello 
+0

Bitte verwenden Sie 'implizite none' als zweite Zeile und beheben Sie die folgenden Kompilierungsprobleme. – francescalus

+0

Ich verwendete implizite keine und fixierte Gm Sache, aber es immer noch die gleichen% 35 CPU und nicht fertig –

Antwort

2

Gm wird nicht erklärt und ist implizit real zu sein. Der Wert von Gm ist nicht festgelegt, aber es ist sehr wahrscheinlich 0. Daher r ist die gleiche die ganze Zeit.

Sie wollten wahrscheinlich G*m eingeben, aber Sie haben Gm in ((Gm*t/r**2)*t).

Verwenden Sie in Ihren Programmen immer implicit none. Es ist sehr wichtig.

Und wie Sie selbst gefunden 10**(-11) ist Null, weil es ein ganzzahliger Ausdruck ist. E oder müssen für Exponenten in Gleitkommaausdrücken verwendet werden.

+0

schreiben (*, *) ((G * m/r ** 2) * (t ** 2) Ich tat was du habe mir gesagt, ich benutze dies und immer noch sagt es gleich 0. –

+1

Ich löste es Ich benutzte E-11 anstelle von 10 ** (- 11) und seine gelösten Dank für die Hilfe :) –

+0

Sie sollten die Antwort akzeptieren, wenn Es hat dein Problem gelöst. – Ross

Verwandte Themen