1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
| ! ----------------------------------------------------------
! Programmer: Jonathan Landrum
! Date: 11 December 2011
! Class: CSC 204
! ----------------------------------------------------------
! Program: driver.exe
! Purpose: Performs complex arithmetic using modules.
! Assumptions: Module "functions" is in the same directory.
! ----------------------------------------------------------
PROGRAM driver
USE functions
IMPLICIT NONE
CHARACTER :: response = 'y', kind
INTEGER :: a, b, x, y, n
WRITE (*,*) '*******************************************'
WRITE (*,*) '* *'
WRITE (*,*) '* FORTRAN COMPLEX ARITHMETIC CALCULATOR *'
WRITE (*,*) '* *'
WRITE (*,*) '*******************************************'
WRITE (*,*)
WRITE (*,*) 'PURPOSE:'
WRITE (*,*) 'Performs complex arithmetic using modules.'
WRITE (*,*)
WRITE (*,*) 'Copyright (c) 2011 Jonathan Landrum'
WRITE (*,*)
WRITE (*,*) '-------------------------------------------'
WRITE (*,*)
! Any response beginning with the letter "y" will work.
WHILE (response == 'y' .OR. response == 'Y') DO
WRITE (*,*) 'What kind of arithmetic would you like to do?'
WRITE (*,*)
WRITE (*,*) 'Addition.............[A]'
WRITE (*,*) 'Subtraction..........[S]'
WRITE (*,*) 'Multiplication.......[M]'
WRITE (*,*) 'Division.............[D]'
WRITE (*,*) 'Exponentiation.......[E]'
WRITE (*,*)
WRITE (*,*) 'EXIT.................[X]'
WRITE (*,*)
READ (*,*) kind
WRITE (*,*)
! Addition
IF (kind == 'a' .OR. kind == 'A') THEN
WRITE (*,*) 'Complex addition takes the form:'
WRITE (*,*) '(a + bi) + (x + yi) = (a + x) + (b + y)i'
WRITE (*,*) 'Enter a value for a:'
READ (*,*) a
WRITE (*,*) 'Enter a value for b:'
READ (*,*) b
WRITE (*,*) 'Enter a value for x:'
READ (*,*) x
WRITE (*,*) 'Enter a value for y:'
READ (*,*) y
WRITE (*,*) '(',addReal(a, b, x, y),' + ',addImaginary(a, b, x, y),'i)'
END IF
! Subtraction
IF (kind == 's' .OR. kind == 'S') THEN
WRITE (*,*) 'Complex subtraction takes the form:'
WRITE (*,*) '(a + bi) - (x + yi) = (a - x) + (b - y)i'
WRITE (*,*) 'Enter a value for a:'
READ (*,*) a
WRITE (*,*) 'Enter a value for b:'
READ (*,*) b
WRITE (*,*) 'Enter a value for x:'
READ (*,*) x
WRITE (*,*) 'Enter a value for y:'
READ (*,*) y
WRITE (*,*) '(',subtractReal(a, b, x, y),' - ',subtractImaginary(a, b, x, y),'i)'
END IF
! Multiplication
IF (kind == 'm' .OR. kind == 'M') THEN
WRITE (*,*) 'Complex multiplication takes the form:'
WRITE (*,*) '(a + bi) * (x + yi) = (a * x - b * y) + (a * y + b * x)i'
WRITE (*,*) 'Enter a value for a:'
READ (*,*) a
WRITE (*,*) 'Enter a value for b:'
READ (*,*) b
WRITE (*,*) 'Enter a value for x:'
READ (*,*) x
WRITE (*,*) 'Enter a value for y:'
READ (*,*) y
WRITE (*,*) '(',multiplyReal(a, b, x, y),' + ',multiplyImaginary(a, b, x, y),'i)'
END IF
! Division
IF (kind == 'd' .OR. kind == 'D') THEN
WRITE (*,*) 'Complex division takes the form:'
WRITE (*,*) '(a + bi) (a + bi) * (x - yi)'
WRITE (*,*) '-------- = -------------------'
WRITE (*,*) '(x + yi) x^2 + y^2'
WRITE (*,*) 'Enter a value for a:'
READ (*,*) a
WRITE (*,*) 'Enter a value for b:'
READ (*,*) b
WRITE (*,*) 'Enter a value for x:'
READ (*,*) x
WRITE (*,*) 'Enter a value for y:'
READ (*,*) y
WRITE (*,*) '(',divideReal(a, b, x, y),' * ',divideImaginary(a, b, x, y),'i)'
WRITE (*,*) '------------------------------'
WRITE (*,*) ' ',x * x + y * y
END IF
! Exponentiation
IF (kind == 'e' .OR. kind == 'E') THEN
WRITE (*,*) 'Complex exponentiation takes the form:'
WRITE (*,*) '(a + bi)^n = (a + bi) * (a + bi) * (a + bi)...'
WRITE (*,*) 'Enter a value for a:'
READ (*,*) a
WRITE (*,*) 'Enter a value for b:'
READ (*,*) b
WRITE (*,*) 'Enter a power to raise this complex number to:'
READ (*,*) n
WRITE (*,*) '(',exponentReal(a, b, n),' + ',exponentImaginary(a, b, n),'i)'
END IF
! EXIT
IF (kind == 'x' .OR. kind == 'X') THEN
EXIT
END IF
WRITE (*,*)
WRITE (*,*) 'Would you like to continue? [Y/N]'
WRITE (*,*)
READ (*,*) response
WRITE (*,*)
END DO ! Continue loop
WRITE (*,*) '\\//_ Live long and prosper.'
END PROGRAM driver |