Fortran: determine the horizontal distance of a ball

Click For Summary

Discussion Overview

The discussion revolves around a Fortran program intended to calculate the horizontal distance a ball travels when thrown. Participants address coding errors, variable declarations, and logical issues within the program's structure.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant reports errors related to the use of operators and variable types in their Fortran code, specifically mentioning the incorrect power operator and integer division.
  • Another participant suggests that declaring certain variables as INTEGER may not be appropriate, particularly for the gravitational constant g, which is set to a floating-point value.
  • A further comment questions the declaration of X(t) and Y(t) as character-type variables, indicating that this is not the correct approach for arrays in Fortran.
  • One participant notes that the program seems to stop executing after inputting the angle, prompting inquiries about potential causes.
  • Another participant identifies what they believe to be an infinite loop in the code and suggests that the logic may not align with the intended functionality, particularly regarding the use of array indexing and the need for a loop.
  • It is pointed out that the computed distance should be printed directly rather than read from user input, as it is already calculated within the program.

Areas of Agreement / Disagreement

Participants express various concerns and suggestions regarding the code, but there is no consensus on the overall structure or logic of the program. Multiple competing views on how to correct the issues remain present.

Contextual Notes

Limitations include unresolved issues with variable types, potential infinite loops, and the need for proper array handling in Fortran. The discussion does not resolve these issues definitively.

CCguru
Messages
2
Reaction score
0
Im writing a program to determine the horizontal distance of a ball but getting this error:

Y(t)=Y0+VY0*t+(1/2)*g*t^2
1
Error: Unclassifiable statement at (1)

Distance=(X(t))^2+(Y(t))^2
1
Error: Unclassifiable error at (1)



My code is as follows:

PROGRAM as_the_ball_is_thrown

IMPLICIT NONE

INTEGER::Y0, X0, V0, g, theta, t
CHARACTER::Distance, VY0, VX0, X(t), Y(t)


X0=0
Y0=0
V0=20
g=9.81


WRITE(*,*) "Please enter amount of time the ball traveled"
READ(*,*) t

WRITE(*,*) "Please enter the angle to which the ball was thrown"
READ(*,*) theta

DO
Y(t)=Y0+VY0*t+(1/2)*g*t^2
X(t)=X0+VX0*t
VX0=V0*COS(theta*3.14159/180)
VY0=V0*SIN(theta*3.14159/180)
Distance=(X(t))^2+(Y(t))^2
END DO


WRITE(*,*) "The horizontal distance the ball traveled is"
READ(*,*) Distance
WRITE(*,*) "meters"

END PROGRAM as_the_ball_is_thrown



Can anyone tell me why this is wrong?

Thanks!
 
Technology news on Phys.org


^ is not the Fortran operator for "raise to a power". It should be **.

Also (1/2) will be evaluated in integer arithmetic since 1 and 2 are both integers, and the integer division will give 0 which is not what you want. The best fix is to replace (1/2) by 0.5.

Declaring Y0, X0, V0, g, theta, t as INTEGER is probably not a good idea, especially since you then try to set g = 9.81 (which will actually set it to 9).
 


In addition to what AlephZero said, you have problems with your declarations for X(t) and Y(t). For one thing, this is not how you declare arrays. For another thing, why are these character-type variables? That doesn't make any sense.
 


Awesome thanks! That fixed all the errors. Now for some reason the program just stops and doesn't print anything after a person enters the angle. Do you guys know why?
 


There are a couple things wrong.
1) You have what I believe is an infinite loop below where you shouldn't be using a loop at all. OTOH, if you are trying to set the values of an array to certain values, maybe that's what you're trying to do. If that's the case, the following code won't work, because array indexes have to be integer values 1, 2, 3, and so on.

It's hard to tell what you're trying to do, though.
Code:
DO
 Y(t)=Y0+VY0*t+(1/2)*g*t^2
 X(t)=X0+VX0*t
 VX0=V0*COS(theta*3.14159/180)
 VY0=V0*SIN(theta*3.14159/180)
 Distance=(X(t))^2+(Y(t))^2 
END DO

2. Distance is computed, so you don't need to READ it, just WRITE it.
Code:
WRITE(*,*) "The horizontal distance the ball traveled is"
 READ(*,*) Distance 
WRITE(*,*) "meters"
 

Similar threads

  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 2 ·
Replies
2
Views
17K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 8 ·
Replies
8
Views
4K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 4 ·
Replies
4
Views
1K
  • · Replies 4 ·
Replies
4
Views
2K