YOUR LAST NAME ______________________________
YOUR FIRST NAME ______________________________
YOUR MUSICB CODE HC_________________________
YOUR STUDENT NUMBER ________________________
YOUR ENGINEERING DEPARTMENT_______________
McGill University
Faculty of Engineering
COMPUTERS in ENGINEERING
308-208A
Final Examination
Examiners:
Prof. G. Ratzer Date: Monday 18 December 1995.
S. Spiller Time: 9.00 - 12.00
noon
This examination consists of
19 questions and is worth 50% (or 70% - depending on your mid-term)
of the final course grade.
Questions 1 - 15 multiple choice 30 marks
Questions 16 0 (Yes, zero!)
Questions 17 6
Question 18 7
Question 19 7
Total 50 marks
Answer questions 1 to 16 on the IBM sheet provided using an HB pencil.
Select the BEST answer from the five given.
REMEMBER to put your student
number on the IBM sheets both as numeric digits and by filling
in the circles below each digit.
Answer questions 17, 18 and 19
in the space provided on this paper.
Do rough work on the backs of
pages.
No CALCULATORS allowed.
Use space below on this page
to bring any apparent ambiguities to the notice of the examiners.
MAKE SURE YOU WRITE YOUR NAME AND STUDENT NUMBER ON BOTH THE
COMPUTER SCORE SHEET AND THIS
EXAMINATION PAPER.
QUESTION 1:
What is the output of this FORTRAN
90 program:
program question1
implicit none
!
integer :: I,J,K
real :: A,B,C
!
A = 2.1E1 + 4
B = 37/7
C = 37.0/7.0
I = 2.2 + MOD(78,5)
J = 89/4*4+2-1*2
K = C
PRINT *,I,J,K,A,B,C
!
stop
end program question1
1) 6 5 5.0000 25.0000 5 5
2) 5 88 5 25.0000 5.00000 5.28571
3) 6 5 5.0000 25.0000 5 5.28571
4) 5 5 5 6.10000 5.00000 5.28571
5) 6 88 5 25.0000 5.00000 5.28571
QUESTION 2:
What is the output of this FORTRAN
90 program:
program question2
implicit none
!
integer :: i,j,k
real :: a,b,c,d
!
a = 1384E+03
b = 1384E03
c = 1384.
d = 1384E-03
i = 1384.
j = 1384+3
k = 138.4E01
PRINT *,i,j,k,a,b,c,d
stop
end program question2
1) 1384 1387 138 1.38400E+06 1.38400E+06 1384.00 1.38400
2) 1384.00 1387.00 13840.00 1.38400E+06 1.38400E+03 1384.00 1.38400
3) 1384 1387 1384 1.38400E+06 1.38400E+06 1384.00 1.38400
4) 1384 1387 138 1.38400E+06 1.38400E+03 1384.00 1.38400
5) 1384.00 1387.00 138.00 1.38400E+06
1.38400E+06 1384.00 1.38400
QUESTION 3.
program question3
implicit none
!
integer :: i, j(1000), k(1000), n
integer :: x, y
!
read *, n ! ------------------------
do i=1, n ! Input data is:-
read *, j(i) ! 5
end do ! 5
! 3
do i=1, n ! 2
read *, k(i) ! 1
end do ! 4
! 11
do i=1, n-2 ! 12
x=k(j(i)) ! 13
y=k(j(i+1)) ! 8
print *, (n-i), (y-x) ! 9
end do
stop
end program question3
The output of the above program
is:
1) 2) 3) 4) 5)
4 4 4 -4 2 -4 2 -4 4 -1
3 -1 3 1 3 1 3 -1 3 -1
2 -1 2 1 4 1 4 -1 2 -4
QUESTION 4.
PROGRAM QUESTION4
IMPLICIT NONE ! Input data is:-
! ! 12.0 11.0 0.0 7.5
INTEGER :: I, J, K ! 10.0 1.0 2.50 0.0
REAL :: M1(3,4), M2(4,1), M3(3,2) ! 1.0 0.0 25.0 0.0
! ! 2.0
DO I=1,3 ! 5.0
READ 10,(M1(I,J),J=1,4) ! 1.0
END DO ! 0.0
10 FORMAT(8(F5.2))
!
DO I=1,4
READ 10,(M2(I,J),J=1,1)
END DO
M3=0.0
DO K=1,1
DO I=1,4
DO J=1,3
M3(J,K) = M3(J,K) + M1(J,I) * M2(I,K)
END DO
END DO
END DO
DO I=3,1,-1
PRINT *, M3(I,1)
END DO
STOP
END PROGRAM QUESTION4
The output of the above program
is:
1) 2) 3) 4) 5)
7.00000 7 79.0000 7.50000 7.10000
27.0000 27 27.5000 27.1000 27.5000
QUESTION 5.
program question5
implicit none
!
integer :: I, J
!
do I=29, 18, -7
do J=5, 1, -2
if (mod(I*3,J*2) < (I+1)/4) then
if (mod(I,2) >= mod(J*7,2)) then
print *, 'NHL'
else
print *, 'SUPERBALL'
end if
else
print *, 'NBA'
end if
end do
end do
!
stop
end program question5
What will the above program produce
as output?
1) 2) 3) 4) 5)
NBA NHL NBA NBA NBA
NHL NHL NHL NBA NHL
NHL NHL NBA NBA NHL
NBA NHL SUPERBALL NHL SUPERBALL
SUPERBALL SUPERBALL NHL NBA NHL
SUPERBALL NHL NBA NBA NHL
QUESTION 6.
#include <stdio.h>
main()
{
int c;
c=3;
if (c=4)
c++;
else
c--;
printf("%d\\n",c);
}
What will the above program ouput?
1) 2
2) 4
3) 3
4) 6
QUESTION 7
#include <stdio.h>
#include <math.h>
main()
{
float a , b ;
int c ,d ;
a = 3.0 ;
b = 2.0 ;
c = 8 ;
d = 6 ;
if ( a > b) d/=a ; else d/=b ;
c -= c - d * d;
if ( c > d*d ) a-=c ; else a+=d ;
b += a*a*1/5 - b ;
printf (" %1f , %1f , %d , %d\\n",a,b,c,d);
}
What will this program print
?
1) 5 , 5 , 4 , 2
2) 6 , 7.2, 9 , 3
3) -1, 0.2, 4, 2
4) 5, 25, 4, 8
QUESTION 8
#include <stdio.h>
int t = 0;
void funny ( int x, int y , int
*z );
main()
{
int i;
int j;
int *k ;
i = 4.0 ;
j = ++i ;
*k = i++ ;
funny(i,j,k);
funny(*k,j,&i);
printf("%d , %d , %d , %d\\n",i,j,*k,t);
}
void funny ( int x, int y, int
*z )
{
t += x ;
{ int t ;
t = x ;
x = y - *z ;
*z = t - y ;
}
}
What will this program print
?
1) -4 , 3 , -1, 0
2) 5 , 6 , 0 , 0
3) 3 , -3 , 5 , 7
4) -4 , 5 , 1 , 7
QUESTION 9
#include <stdio.h>
int main(void)
{
int i=0,test=1;
while(i++ <= 4.9)
printf("%6d",test *= 2);
printf("\\n");
return 0;
}
What will the above program output?
1) 2 4 6 8
2) 2 4 6 10 16
3) 2 4 6 8 10
4) 2 4 8 16
QUESTION 10
#include <stdio.h>
#define SIZE 10
void DeathHand ( char *, char
*); /* prototype for DeathHand */
main()
{
char String1[SIZE+1] = "HI THERE!!" ;
char String2[SIZE+1] = "BONJOUR!!!"
;
printf("%s %s",String1,String2);
DeathHand(String1,String2);
printf("%s %s\\n",String1,String2);
}
void DeathHand ( char *first, char *second)
{
char Temp[SIZE+1] ;
int i ;
for (i=0 ; i <= SIZE ; i++)
Temp[i] = first[i] ;
for (i=0 ; i < SIZE ; i++)
first[i] = second[SIZE-i-1];
first[SIZE]=0 ;
for (i=0 ; i < SIZE ; i++)
second[i] = Temp[SIZE-i-1];
second[SIZE]= 0;
}
What will this program Print
?
1) HI THERE!!BONJOUR!!!!!EREHT IH!!!RUOJNOB
2) HI THERE!!BONJOUR!!!!!!RUOJNOB!!EREHT IH
3) HI THERE!!BONJOUR!!!BONJOUR!!!HI THERE!!
4) HI THERE!!BONJOUR!!!HI THERE!!BONJOUR!!!
QUESTION 11.
Using the Newton-Raphson method
to find the approximation to the root of a function F(x), if the
initial value of x is -4 and F(x) = 3(x*x*x)+10(x*x)-96, what
is the value of x after 1 iteration?
1) x = -10
2) x = -128
3) x = -2
4) x = -3
QUESTION 12.
Using Selection Sort to sort
the following array in ascending order:
25 57 48 37 12 92 86 33
After two passes the array would
be:
1) 25 57 33 37 12 92 86 48
2) 25 12 33 92 37 48 86 57
3) 12 25 48 37 57 92 86 33
4) 12 25 33 37 48 57 86 92
5) None of the above
.
QUESTION 13.
Which of the following triangularized matrices represent a
solution of this system of linear
equations?
4 x + 2 y + 5 z = 13
3 x - 5 y + 2 z = -5
9 x + y - 4 z = 7
1) 1 0 0 2
0 1 0 0
0 0 1 1
2) 1 0 1 1
0 1 0 2
0 0 1 1
3) 1 0 0 3
0 1 0 4
0 0 1 3
4) 1 0 0 1
0 1 0 2
0 0 1 1
5) 1 0 0 1
0 1 1 2
0 0 1 1
QUESTION 14.
Which of the following Statements
are true.
a) The trapezoidal rule uses n+1 evaluations of f(x) where n is the
number of panels used in the
approximation
b) The pseudocode evaluates the integral from XMin to XMax using the
midpoint rule
PanelWidth = (XMax - XMin) / NumberPanels
Sum = (F(XMin) + F(XMax))/2.0
X = X_Min + PanelWidth
For k = 1 , NumberPanels-1
Sum = Sum + F(x)
x = x + h
end of for loop
Estimate = PanelWidth*Sum
c) Simpson's rule is usually
a much better approximation that the Trapezoidal and Midpoint
rule.
d) For a convex f(x) (i.e where
f''(x) < 0) the midpoint rule overestimates the integral and
the trapezoidal rule underestimates it.
Select the "best" answer.
1) a, c and d
2) a, b and c
3) b, c and d
4) a, b and d
QUESTION 15.
If we approximate the integral
of the function f(x) = x*x - x + 1 from 0 to 2 with h=0.5 to be
equal to 2.75, which numerical integration approximation was used?
1) Midpoint rule
2) Left endpoint rule
3) Right endpoint rule
4) Trapezoidal rule
QUESTION 16.
On your IBM computer marked sheet
fill in circle ONE = 1
(This is to prove that you are
still awake and got this far in the exam!!)
QUESTION 17.
Consider the following method
which finds the maximum and minimum of a group of N numbers, located
in N slots (like an N element array).
Partition the N numbers into N/2 adjacent pairs.
Compare the two numbers in each pair (which will be in an odd/even slot) with each other.
Perform a swap, if needed, so that the smaller one is in the odd slot.
Find the maximum of the N/2 numbers (in the even slots) which turned out to be larger.
Find the minimum of the N/2 numbers (in the odd slots) that turned out to be smaller.
An example with N=6 would be starting with --> 9 7 8 3 4 6
Step 1. 7 9 3 8 4 6 Swap adjacent pairs if needed.
Step 2. Minimum of ODD slots is 3
Step 3. Maximum of EVEN slots
is 9
Assume that n is an even number
for simplicity.
a) What is the estimated running
time of this algorithm, in general ?
b) Outline a sorting algorithm
that uses the above idea to sort a list of n numbers by continuously
finding the maximum and minimum. You may use C or Fortran or PseudoCode.
c) Find the running time of your
algorithm. Compare it to another sorting mechanism (use Insertion
sort or Selection sort). Does your algorithm outperform these
algorithms ?
QUESTION 18.
The Gaussian error function,
Erf(y), is defined by the integral from x = 0 to x = y of the
expression Exp(-x**2)*2/Sqrt(Pi).
STEP A: State the formula for
the Trapezoidal Rule for numerical integration of a function f(x)
in terms of lower and upper limits a and b, number of panels n,
and step size h.
STEP B: Write a C function to
evaluate the integrand for Erf. That is, a function F(x) which
encodes the above expression for a value of x accepted as an input
parameter.
STEP C: Write a general purpose
C function that uses the Trapezoidal Rule to estimate the integral
of f(x) between a and b. Your function should accept as parameters
values for a, b, and n, and return the area.
STEP D: Write a C main program
which reads input data for Y and tolerance Delta.
The program must then compute
Erf(Y) by calling the Trapezoidal Rule function with n = 2, 4,
8, 16,... until two successive estimates of the have an absolute
difference less than Delta.
Finally, the program must print
out values for Y, Erf(Y), and a count of the number of times the
Trapezoidal Rule function was called.
QUESTION 19.
Write a FORTRAN 90 program to
find a root of a given polynomial using the Newton-Raphson Method.
The data to be read in will be
the coefficients of a polynomial of degree of at most 5, i.e.
6 real coefficients will always be given. For example the polynomial
f(x) = 3 + 2x -3x**2 + x**5 would be read as 3.0 2.0 -3.0 0.0
0.0 1.0.
You also have to read the limits
a,b of the interval in which you try to find a root together with
the accuracy of the computation.
Given the polynomial function,
you have to evaluate one of its root with 5 different initial
guesses of x for the root. You should cover the whole interval
[a,b] with the initial guesses.
Your output should look like
this:
Initial guess Root f(Root)
------------------------------------------
(your results go here...)
You should also output a message
if no root can be found within the specified interval [a,b].
Write a function that will return
the value of the polynomial f(x) for a given x. You can assume
that there exists a function deriv(f,x) that returns the derivative
of the polynomial f(x) evaluated at x.
BONUS : Write the function deriv(f,x)
Write your program neatly here
- use the reverse side if needed.