Professional Documents
Culture Documents
2.1
IF x < 10 THEN
IF x < 5 THEN
x = 5
ELSE
PRINT x
END IF
ELSE
DO
IF x < 50 EXIT
x = x - 5
END DO
END IF
2.2
Step 1: Start
Step 2: Initialize sum and count to zero
Step 3: Examine top card.
Step 4: If it says end of data proceed to step 9; otherwise, proceed to next step.
Step 5: Add value from top card to sum.
Step 6: Increase count by 1.
Step 7: Discard top card
Step 8: Return to Step 3.
Step 9: Is the count greater than zero?
If yes, proceed to step 10.
If no, proceed to step 11.
Step 10: Calculate average = sum/count
Step 11: End
2.3
start
sum = 0
count = 0
T
count > 0
INPUT
value
F
average = sum/count
value = T
end of data
F end
sum = sum + value
count = count + 1
2.4
Students could implement the subprogram in any number of languages. The following
Fortran 90 program is one example. It should be noted that the availability of complex
variables in Fortran 90, would allow this subroutine to be made even more concise.
However, we did not exploit this feature, in order to make the code more compatible with
Visual BASIC, MATLAB, etc.
PROGRAM Rootfind
IMPLICIT NONE
INTEGER::ier
REAL::a, b, c, r1, i1, r2, i2
DATA a,b,c/1.,5.,2./
CALL Roots(a, b, c, ier, r1, i1, r2, i2)
IF (ier .EQ. 0) THEN
PRINT *, r1,i1," i"
PRINT *, r2,i2," i"
ELSE
PRINT *, "No roots"
END IF
END
The answers for the 3 test cases are: (a) 0.438, -4.56; (b) 0.5; (c) 1.25 + 2.33i; 1.25
2.33i.
n 2i 1
x
(2i 1)!
i =1
where i = the order of the approximation. The following algorithm implements this
summation:
Step 1: Start
Step 2: Input value to be evaluated x and maximum order n
Step 3: Set order (i) equal to one
Step 4: Set accumulator for approximation (approx) to zero
Step 5: Set accumulator for factorial product (fact) equal to one
Step 6: Calculate true value of sin(x)
Step 7: If order is greater than n then proceed to step 13
Otherwise, proceed to next step
Step 8: Calculate the approximation with the formula
2i-1
x
approx = approx + ( 1) i-1
factor
Step 9: Determine the error
true approx
%error = 100%
true
Step 10: Increment the order by one
Step 11: Determine the factorial for the next iteration
factor = factor (2 i 2) (2 i 1)
Step 12: Return to step 7
Step 13: End
2.6
start
INPUT
x, n
i=1
true = sin(x)
approx = 0
factor = 1
T
i>n
x2 i - 1
approx = approx + ( - 1) i - 1
factor
true approx
error = 100%
true
OUTPUT
i,approx,error
i=i+1
factor=factor(2i-2)(2i-1)
end
Pseudocode:
SUBROUTINE Sincomp(n,x)
i = 1
true = SIN(x)
approx = 0
factor = 1
DO
IF i > n EXIT
approx = approx + (-1)i-1x2i-1 / factor
error = Abs(true - approx) / true) * 100
PRINT i, true, approx, error
i = i + 1
factor = factor(2i-2)(2i-1)
END DO
END
2.7 The following Fortran 90 code was developed based on the pseudocode from Prob. 2.6:
PROGRAM Series
IMPLICIT NONE
INTEGER::n
REAL::x
n = 15
x = 1.5
CALL Sincomp(n,x)
END
SUBROUTINE Sincomp(n,x)
IMPLICIT NONE
INTEGER::n,i,fac
REAL::x,tru,approx,er
i = 1
tru = SIN(x)
approx = 0.
fac = 1
PRINT *, " order true approx error"
DO
IF (i > n) EXIT
approx = approx + (-1) ** (i-1) * x ** (2*i - 1) / fac
er = ABS(tru - approx) / tru) * 100
PRINT *, i, tru, approx, er
i = i + 1
fac = fac * (2*i-2) * (2*i-1)
END DO
END
OUTPUT:
order true approx error
1 0.9974950 1.500000 -50.37669
2 0.9974950 0.9375000 6.014566
3 0.9974950 1.000781 -0.3294555
4 0.9974950 0.9973912 1.0403229E-02
5 0.9974950 0.9974971 -2.1511559E-04
6 0.9974950 0.9974950 0.0000000E+00
7 0.9974950 0.9974951 -1.1950866E-05
8 0.9974950 0.9974949 1.1950866E-05
9 0.9974950 0.9974915 3.5255053E-04
10 0.9974950 0.9974713 2.3782223E-03
11 0.9974950 0.9974671 2.7965026E-03
12 0.9974950 0.9974541 4.0991469E-03
13 0.9974950 0.9974663 2.8801586E-03
14 0.9974950 0.9974280 6.7163869E-03
15 0.9974950 0.9973251 1.7035959E-02
Press any key to continue
1.E+02
1.E+01 error
1.E+00
1.E-01
1.E-02
1.E-03
1.E-04
1.E-05
0 5 10 15
Interpretation: The absolute percent relative error drops until at n = 6, it actually yields a
perfect result (pure luck!). Beyond, n = 8, the errors starts to grow. This occurs because of
round-off error, which will be discussed in Chap. 3.
without final
30(88.4) + 30(91.33)
AG = = 89.8667
30 + 30
with final
30(88.4) + 30(91.33) + 40(91)
AG = = 90.32
30 + 30
The following pseudocode provides an algorithm to program this problem. Notice that the
input of the quizzes and homeworks is done with logical loops that terminate when the user
enters a negative grade:
2.9
n F
0 $100,000.00
1 $108,000.00
2 $116,640.00
3 $125,971.20
4 $136,048.90
5 $146,932.81
24 $634,118.07
25 $684,847.52
Bismarck = 10.842 t = 0 to 59
Yuma = 33.040 t = 180 to 242
2.11
n A
1 40,250.00
2 21,529.07
3 15,329.19
4 12,259.29
5 10,441.04
2.12
2.13
Fortran 90 VBA
Subroutine BubbleFor(n, b) Option Explicit
m = n - 1 m = n - 1
Do Do
switch = .False. switch = False
Do i = 1, m For i = 1 To m
If (b(i) > b(i + 1)) Then If b(i) > b(i + 1) Then
dum = b(i) dum = b(i)
b(i) = b(i + 1) b(i) = b(i + 1)
b(i + 1) = dum b(i + 1) = dum
switch = .True. switch = True
End If End If
End Do Next i
If (switch == .False.) Exit If switch = False Then Exit Do
m = m - 1 m = m - 1
End Do Loop
Function Vol(R, d)
pi = 3.141593
d<R
Vol = pi * d^3 / 3
d<3*R
V1 = pi * R^3 / 3
Vol = V2 = pi * R^2 (d R)
Overtop
Vol = V1 + V2
End Function
Option Explicit
Function Vol(R, d)
Dim V1 As Single, v2 As Single, pi As Single
pi = 4 * Atn(1)
If d < R Then
Vol = pi * d ^ 3 / 3
ElseIf d <= 3 * R Then
V1 = pi * R ^ 3 / 3
v2 = pi * R ^ 2 * (d - R)
Vol = V1 + v2
Else
Vol = "overtop"
End If
End Function
Function Polar(x, y)
= 3.141593
r = x2 + y 2
T
x<0
F T F T
y>0 y>0
F F T
T y
y<0 = y<0 = tan1 +
2 x
= y
=0 = = tan 1
2 x
180
Polar =
End Polar
Function Polar(x, y)
Dim th As Single, r As Single
Const pi As Single = 3.141593
r = Sqr(x ^ 2 + y ^ 2)
If x < 0 Then
If y > 0 Then
th = Atn(y / x) + pi
ElseIf y < 0 Then
th = Atn(y / x) - pi
Else
th = pi
End If
Else
If y > 0 Then
th = pi / 2
ElseIf y < 0 Then
th = -pi / 2
Else
th = 0
End If
End If
Polar = th * 180 / pi
End Function