MID TERM EXAM 3
Screen 0 not modified
0 \ 13:36JWB02/16/86
1 \ Last change: Screen 002 11:21jwb10/22/87
2
3 MATHEMATICS 495
4
5
6 INTRODUCTION TO THE FORTH PROGRAMMING LANGUAGE
7
8
9 MID TERM EXAM
10
11 OCTOBER 26, 1987
12
13 TOTAL MARKS = 25
14
15
Screen 1 not modified
0 \ QUESTION 1 ( 5 MARKS ) 11:02jwb10/22/87
1 The following words are not part of the Forth 83 standard.
2 Write short colon definitions for them using only words from
3 your forth 83 reference sheet.
4
5 Example: 3DUP ( a b c a b c a b c )
6 Solution: : 3DUP 2 PICK 2 PICK 2 PICK ;
7 stack stack
8 word before after
9 ---- ------ -------
10 a) TUCK ( a b c a c b c )
11 b) -ROT ( a b c c a b )
12 c) 2OVER1 ( a b c a b c a b )
13 d) SPIN ( a b c c b a )
14 e) NIP ( a b c a c )
15
Screen 2 not modified
0 \ QUESTION 2 ( 5 MARKS ) 11:21jwb10/22/87
1 Design the FORTH word TRIANGLE that will draw the outline for
2 a triangle on the display using X's TRIANGLE uses and consumes
3 the top stack number to decide how many lines will be used to
4 make the isosceles triangle. See the sample output below left.
5 | Notes:
6 3 TRIANGLE | Your solution should illustrate
7 X | the concept of factoring ( more than one
8 XXX | word definition should be created).
9 XXXXX |
10 5 TRIANGLE | Your solution should illustrate either
11 X | the use of the DO .... LOOP construct
12 XXX | or the BEGIN .... UNTIL construct.
13 XXXXX |
14 XXXXXXX | Your word should work for values from
15 XXXXXXXXX | 1 thru 23. No action results for others.
Screen 3 not modified
0 \ QUESTION 3 ( 5 MARKS ) 16:15JWB02/16/86
1 A open rectangular tank has a square ends, b meters by b meters,
2 and is l meters long.
3 a) Write the word AREA that takes two stack inputs base, and
4 length and leaves the surface area, a= 2bb +3bh, on the stack
5 AREA ( b l a )
6 b) Write the word VOLUME that takes two stack inputs base, and
7 length and leaves the volume, v=bbh, on the stack.
8 VOLUME ( b l v )
9 c) Write the word TANK that takes two stack inputs base, and
10 length and uses the words AREA and VOLUME above to produce
11 a report. For example, 2 3 TANK should give the report below.
12 Square end of the tank is 2 meters.
13 Length of the tank is 3 meters.
14 The surface area of the tank is 26 square meters.
15 THe volume of the tank is 12 cubic meters.
Screen 4 not modified
0 \ QUESTION 4 ( 5 MARKS ) 16:49JWB10/27/85
1 a) Show how you would create a variable called VALVE-SETTING .
2 The VALVE-SETTING will be used to contain the percentage
3 that a valve is open ( 0 is closed, 100 full open).
4 b) Design the word VALVE-STATUS to display the current value of
5 this variable. Execution of VALVE-STATUS would display:
6 Valve is now XX percent open.
7 c) Write %VALVE-OPEN that sets variable VALVE-SETTING
8 to the top stack number. Issue a warning and do nothing
9 if an attempt is made to set it outside the range 0 - 100.
10 d) Write %VALVE-INC which increments VALVE-SETTING by top stack
11 number and %VALVE-DEC which decrements it by the top stack #.
12 e) Can the VALVE-SETTING ever become less than 0 or greater
13 than 100 using your words of (d). If so fix them so they
14 do nothing and issue a warning message if an attempt to
15 increment or decrement out of range is made.
Screen 5 not modified
0 \ QUESTION 5 ( 5 MARKS ) 16:19JWB02/16/86
1 a) Create an array called MARKS that will hold 5 16bit numbers.
2 b) Write a word called CLEAR-MARKS which initializes
3 each cell of the array MARKS to zero.
4 c) Write a word called SHOW-MARKS that displays and identifies
5 each value in the MARKS array in tabular format:
6 1 1st mark
7 2 2nd mark etc.
8 d) Write a word called TOTAL that computes the sum of all non
9 zero entries in the array MARKs and leaves the result in
10 the variable SUM . Save the non zero count in variable N .
11 e) Write a word called MARK-AVG that computes the average of
12 all non zero entries in the array MARKS and stores the
13 result in the variable AVERAGE and displays the result as:
14 Your current marks average is nnn
15 MARK-AVG should round correctly to the nearest integer.
Screen 8 not modified
0 \ 32 bit square root KS 4TH DIM V4N1P9
1
2 : EASY-BITS ( drem1 partial.root1 count drem2 partial.root2 )
3 0 DO >R D2* D2*
4 R@ - DUP 0<
5 IF R@ + R> 2* 1-
6 ELSE R> 2* 3 +
7 THEN LOOP ;
8
9 : 2'S-BIT ( drem2 proot2 drem3 proot3 ) \ get penultimate bit
10 >R D2* DUP 0<
11 IF D2* R@ - R> 1+
12 ELSE D2* R@ 2DUP U<
13 IF DROP R> 1-
14 ELSE - R> 1+
15 THEN THEN ;
Screen 9 not modified
0 \ 32 bit square root KS 4TH DIM V4N1P9
1 : 1'S-BIT ( drem3 proot3 fullroot ) \ remainder lost
2 >R DUP 0<
3 IF 2DROP R> 1+
4 ELSE D2* 32768 R@ DU< 0= R> THEN ;
5 \ 32-bit unsigned radicand to 16-bit unsigned square root
6 : SQRT ( ud u )
7 0 1 8 EASY-BITS ROT DROP 6 EASY-BITS
8 2'S-BIT 1'S-BIT ;
9 \ Display square root of 16-bit number with 3 decimal places.
10 : .SQRT ( n -- ) \ n must be < 4096
11 16 * 62500 UM*
12 SQRT 0 <# # # # ASCII . HOLD #S #>
13 TYPE SPACE ;
14 : TEST 100 0 DO CR I 5 .R SPACE I .SQRT LOOP ;
15
Screen 11 not modified
0 \ ANSWER TO QUESTION 5 ( 5 MARKS ) 20:25JWB02/17/86
1 a) TUCK ( a b c a c b c )
2 SWAP OVER ;
3
4 b) -ROT ( a b c c a b )
5 ROT ROT ;
6
7 c) 2OVER1 ( a b c a b c a b )
8 2 PICK 2 PICK ;
9
10 d) SPIN ( a b c c b a )
11 SWAP ROT ;
12
13 e) NIP ( a b c a c )
14 SWAP DROP ;
15
Screen 12 not modified
0 \ ANSWER TO QUESTION NUMBER 2 ( 5 MARKS ) 20:25JWB02/17/86
1 : X'S ( n -- )
2 0 ?DO ASCII X EMIT LOOP ;
3
4 : .ROW ( n r -- )
5 2DUP - SPACES 2 * 1- X'S DROP ;
6
7 : (TRIANGLE) ( n -- )
8 DUP 0 ?DO CR DUP I 1+ .ROW LOOP DROP ;
9
10 : TRIANGLE ( n -- )
11 DUP 1 < IF DROP ." Zero or negative not allowed"
12 ELSE DUP 23 <
13 IF (TRIANGLE)
14 ELSE DROP ." Larger than 23 not allowed"
15 THEN THEN ;
Screen 13 not modified
0 \ ANSWER TO QUESTION 3 ( 5 MARKS ) 18:04JWB02/16/86
1 : AREA ( b l a )
2 OVER DUP * 2 * ROT ROT * 3 * + ;
3 : VOLUME ( b l v )
4 OVER * * ;
5
6 : TANK ( b l -- )
7 CR OVER ." The square end of the tank is " . ." meters."
8 CR DUP ." The length of the tank is " . ." meters."
9 OVER OVER
10 CR ." The surface area of the tank is " AREA .
11 ." square meters."
12 CR ." The volume of the tank is " VOLUME .
13 ." cubic meters."
14 CR ;
15 2 3 TANK
Screen 14 not modified
0 \ ANSWER TO QUESTION 4 ( 5 MARKS) 20:22JWB02/17/86
1 ( a) VARIABLE VALVE-SETTING
2 ( b) : VALVE-STATUS ( -- -- ) CR ." Valve is now "
3 VALVE-SETTING @ . ." percent open." ;
4 ( c) : [IN] ( x a b f) 2 PICK < NOT ROT ROT < NOT AND ;
5 : WARN ( -- -- ) ." Invalid operation attempted. " ;
6 : %VALVE-OPEN ( n -- )
7 DUP 0 100 [IN] IF VALVE-SETTING ! ELSE DROP WARN THEN ;
8 ( d) : %VALVE-INC ( n -- ) VALVE-SETTING +! ;
9 : %VALVE-DEC ( n -- ) NEGATE VALVE-SETTING +! ;
10 ( e) : %VALVE-INC ( n -- )
11 VALVE-SETTING @ + DUP 0 100 [IN]
12 IF VALVE-SETTING ! ELSE DROP WARN THEN ;
13 : %VALVE-DEC ( n -- )
14 VALVE-SETTING @ SWAP - DUP 0 100 [IN]
15 IF VALVE-SETTING ! ELSE DROP WARN THEN ;
Screen 15 not modified
0 \ ANSWER TO QUESTION 5: ( 5 MARKS ) 18:36JWB02/16/86
1 ( a) CREATE MARKS 70 , 0 , 80 , 0 , 65 , \ average=72
2 ( b) : CLEAR-MARKS ( -- -- )
3 MARKS 10 0 FILL ;
4 VARIABLE N VARIABLE SUM VARIABLE AVERAGE
5 : MARKS@ ( i -- )
6 MARKS SWAP 2* + @ ;
7 ( c)
8 : SHOW-MARKS ( -- -- )
9 5 0 DO CR I 1+ . I MARKS@ 4 .R LOOP ;
10 ( d)
11 : TOTAL ( -- -- ) 0 SUM ! 0 N !
12 5 0 DO I MARKS@ ?DUP IF SUM +! 1 N +! THEN LOOP ;
13 ( e) : MARKS-AVG ( -- -- )
14 TOTAL SUM @ 2 * N @ / 1+ 2 / AVERAGE !
15 CR ." Your current marks average is " AVERAGE @ . ;
Screen 16 not modified
0 \ Used for testing solution. 18:34JWB02/16/86
1
2 : #IN QUERY INTERPRET ;
3 : ENTER-MARKS ( -- -- )
4 CLEAR-MARKS 5 0 DO
5 CR I 1+ . ASCII > EMIT #IN
6 I 2* MARKS + ! LOOP ;
7
8
9
10
11
12
13
14
15