Vector: Difference between revisions
Content added Content deleted
m (→{{header|Ol}}) |
(Added solution for Fortran) |
||
Line 463: | Line 463: | ||
VEC{ 5 7 } 2 v/ = VEC{ 2+1/2 3+1/2 } |
VEC{ 5 7 } 2 v/ = VEC{ 2+1/2 3+1/2 } |
||
VEC{ 5 2 } 1.3 v* = VEC{ 6.5 2.6 } |
VEC{ 5 2 } 1.3 v* = VEC{ 6.5 2.6 } |
||
</pre> |
|||
=={{header|Fortran}}== |
|||
<lang FORTRAN>MODULE ROSETTA_VECTOR |
|||
IMPLICIT NONE |
|||
TYPE VECTOR |
|||
REAL :: X, Y |
|||
END TYPE VECTOR |
|||
INTERFACE OPERATOR(+) |
|||
MODULE PROCEDURE VECTOR_ADD |
|||
END INTERFACE |
|||
INTERFACE OPERATOR(-) |
|||
MODULE PROCEDURE VECTOR_SUB |
|||
END INTERFACE |
|||
INTERFACE OPERATOR(/) |
|||
MODULE PROCEDURE VECTOR_DIV |
|||
END INTERFACE |
|||
INTERFACE OPERATOR(*) |
|||
MODULE PROCEDURE VECTOR_MULT |
|||
END INTERFACE |
|||
CONTAINS |
|||
FUNCTION VECTOR_ADD(VECTOR_1, VECTOR_2) |
|||
TYPE(VECTOR), INTENT(IN) :: VECTOR_1, VECTOR_2 |
|||
TYPE(VECTOR) :: VECTOR_ADD |
|||
VECTOR_ADD%X = VECTOR_1%X+VECTOR_2%X |
|||
VECTOR_ADD%Y = VECTOR_1%Y+VECTOR_2%Y |
|||
END FUNCTION VECTOR_ADD |
|||
FUNCTION VECTOR_SUB(VECTOR_1, VECTOR_2) |
|||
TYPE(VECTOR), INTENT(IN) :: VECTOR_1, VECTOR_2 |
|||
TYPE(VECTOR) :: VECTOR_SUB |
|||
VECTOR_SUB%X = VECTOR_1%X-VECTOR_2%X |
|||
VECTOR_SUB%Y = VECTOR_1%Y-VECTOR_2%Y |
|||
END FUNCTION VECTOR_SUB |
|||
FUNCTION VECTOR_DIV(VEC, SCALAR) |
|||
TYPE(VECTOR), INTENT(IN) :: VEC |
|||
REAL, INTENT(IN) :: SCALAR |
|||
TYPE(VECTOR) :: VECTOR_DIV |
|||
VECTOR_DIV%X = VEC%X/SCALAR |
|||
VECTOR_DIV%Y = VEC%Y/SCALAR |
|||
END FUNCTION VECTOR_DIV |
|||
FUNCTION VECTOR_MULT(VEC, SCALAR) |
|||
TYPE(VECTOR), INTENT(IN) :: VEC |
|||
REAL, INTENT(IN) :: SCALAR |
|||
TYPE(VECTOR) :: VECTOR_MULT |
|||
VECTOR_MULT%X = VEC%X*SCALAR |
|||
VECTOR_MULT%Y = VEC%Y*SCALAR |
|||
END FUNCTION VECTOR_MULT |
|||
FUNCTION FROM_RTHETA(R, THETA) |
|||
REAL :: R, THETA |
|||
TYPE(VECTOR) :: FROM_RTHETA |
|||
FROM_RTHETA%X = R*SIN(THETA) |
|||
FROM_RTHETA%Y = R*COS(THETA) |
|||
END FUNCTION FROM_RTHETA |
|||
FUNCTION FROM_XY(X, Y) |
|||
REAL :: X, Y |
|||
TYPE(VECTOR) :: FROM_XY |
|||
FROM_XY%X = X |
|||
FROM_XY%Y = Y |
|||
END FUNCTION FROM_XY |
|||
FUNCTION PRETTY_PRINT(VEC) |
|||
TYPE(VECTOR), INTENT(IN) :: VEC |
|||
CHARACTER(LEN=100) PRETTY_PRINT |
|||
WRITE(PRETTY_PRINT,"(A, F0.5, A, F0.5, A)") "[", VEC%X, ", ", VEC%Y, "]" |
|||
END FUNCTION PRETTY_PRINT |
|||
END MODULE ROSETTA_VECTOR |
|||
PROGRAM VECTOR_DEMO |
|||
USE ROSETTA_VECTOR |
|||
IMPLICIT NONE |
|||
TYPE(VECTOR) :: VECTOR_1, VECTOR_2 |
|||
REAL, PARAMETER :: PI = 4*ATAN(1.0) |
|||
REAL :: SCALAR |
|||
SCALAR = 2.0 |
|||
VECTOR_1 = FROM_XY(2.0, 3.0) |
|||
VECTOR_2 = FROM_RTHETA(2.0, PI/6.0) |
|||
WRITE(*,*) "VECTOR_1 (X: 2.0, Y: 3.0) : ", PRETTY_PRINT(VECTOR_1) |
|||
WRITE(*,*) "VECTOR_2 (R: 2.0, THETA: PI/6) : ", PRETTY_PRINT(VECTOR_2) |
|||
WRITE(*,*) NEW_LINE('A') |
|||
WRITE(*,*) "VECTOR_1 + VECTOR_2 = ", PRETTY_PRINT(VECTOR_1+VECTOR_2) |
|||
WRITE(*,*) "VECTOR_1 - VECTOR_2 = ", PRETTY_PRINT(VECTOR_1-VECTOR_2) |
|||
WRITE(*,*) "VECTOR_1 / 2.0 = ", PRETTY_PRINT(VECTOR_1/SCALAR) |
|||
WRITE(*,*) "VECTOR_1 * 2.0 = ", PRETTY_PRINT(VECTOR_1*SCALAR) |
|||
END PROGRAM VECTOR_DEMO</lang> |
|||
{{out}} |
|||
<pre> VECTOR_1 (X: 2.0, Y: 3.0) : [2.00000, 3.00000] |
|||
VECTOR_2 (R: 2.0, THETA: PI/6) : [1.00000, 1.73205] |
|||
VECTOR_1 + VECTOR_2 = [3.00000, 4.73205] |
|||
VECTOR_1 - VECTOR_2 = [1.00000, 1.26795] |
|||
VECTOR_1 / 2.0 = [1.00000, 1.50000] |
|||
VECTOR_1 * 2.0 = [4.00000, 6.00000] |
|||
</pre> |
</pre> |
||