1.1  Write a program to print the phrase 1989 COMPUTER CONTEST on 
each line of the screen such that each successive phrase is 
indented one extra space.  Example: 
              1989 COMPUTER CONTEST 
               1989 COMPUTER CONTEST 
1.2  A database is a collection of data, or information 
representing abstract entities.  Databases require much storage 
space.  Most businesses measure their databases in terms of 
gigabytes of data.  A gigabyte is equivalent to 1024 or 2^10 
megabytes (a megabyte is approximately a million bytes).  Write a 
program to represent a gigabyte value (a gigabyte is approximately 
a billion bytes) in its equivalent number of megabytes.  Input 
will consist of a positive integer less than 30.  Example:

     INPUT: Enter number of gigabytes: 14 
1.3  Write a program to display a word in a backward-L format.  
The given word is to be displayed vertically and horizontally so 
that they share the same last letter.  Example: 

     INPUT: Enter word: EXAMPLE

    OUTPUT:       E 

1.4  Write a program to produce the following pattern for an input 
integer, N, with N between 1 and 9 inclusive: 
              1               Example:    INPUT: Enter N: 4 
             2 2                         OUTPUT:     1 
            3   3                                   2 2 
           .     .                                 3   3 
          .        .                              4     4 
         N          N

1.5  Anno Domini is Latin for "in the year of our Lord" and is 
abbreviated as A.D..  In 525 A.D., Pope John I asked the monk 
Dionysius Exiguus to begin a Christian system of dating events, 
starting with the year Dionysius believed Christ was born.  The 
years before the birth of Christ are termed B.C., while the years 
after the birth of Christ are termed A.D.  The following is the 
order of years:  ... 2 B.C., 1 B.C., 1 A.D., 2 A.D., ...  with 
Christ's birth being in the year 1 A.D.  Today, we know that the 
monk was in error.  Even though we continue to use his dating 
system, biblical scholars currently believe that Christ was born 
four years earlier than what the monk thought.  Write a program 
that corrects modern dates to account for this change.  Examples: 

         INPUT: Enter date: 4 
                Enter A.D. or B.C.: B.C. 
        OUTPUT: 1 A.D. 

         INPUT: Enter date: 1 
                Enter A.D. or B.C.: A.D. 
        OUTPUT: 5 A.D. 
         INPUT: Enter date: 5 
                Enter A.D. or B.C: B.C. 
        OUTPUT: 1 B.C. 

1.6  Many computer systems require a user to enter a password to 
ensure that the appropriate person is accessing his/her files of 
information.  Write a program to prompt a user for a password with 
the words "ENTER PASSWORD: ".  For this program the user's 
password is ITSME.  The user has up to 3 chances to enter the 
correct password.  If it is correct then display the message "YOU 
HAVE ACCESS".  For the first two tries, if an incorrect password 
is entered, display "INVALID PASSWORD:" and prompt for another 
password.  After 3 incorrect entries, display "YOU ARE 
TRESPASSING" and exit.  Example: 



1.7  Write a program to determine the "best" Data Base Management 
System (DBMS) to use.  A DBMS is a set of programs that access a 
collection of interrelated data, called a database.  A DBMS is 
"good" if it provides an environment that is both convenient and 
efficient to use in retrieving data from the database and in 
storing data into the database. 
     First, N will be input as the number of DBMS to consider.  
Next, N names pertaining to the DBMS will be entered, each 
followed by it's respective convenience rank and efficiency rank 
(both between 1 and 10 inclusive).  The "best" DBMS is determined 
by the highest total rank for convenience and efficiency.  Display 
the name of the best DBMS that "IS BEST".  In the example below, 
Amy is best because (3+9) is larger than (10+1) which is larger 
than (3+4).  Example: 

     INPUT:  Enter N: 3 
             Enter DBMS name: DOUG 
             Enter convenience, efficiency: 3, 4 
             Enter DBMS name: AMY 
             Enter convenience, efficiency: 3, 9 
             Enter DBMS name: CRAIG 
             Enter convenience, efficiency: 10, 1 

1.8  Write a program to display the elements of a list of 
integers, without repetition, in the order of their appearance in 
the list, separated by one space.  One number at a time will be 
input.  Termination of the list will be designated by the input of 
-999.  Example: 

     INPUT: Enter #: 2 
            Enter #: 3 
            Enter #: -1 
            Enter #: 3 
            Enter #: 2 
            Enter #: -5 
            Enter #: -999 

    OUTPUT: 2 3 -1 -5 

1.9  Often statisticians compute such large probabilities that 
they are difficult for the average person to comprehend.  To help 
illustrate such a number, a real life model is used.  Write a 
program to illustrate the probability of "1 out of N", where N is 
a large real number given in scientific "E" notation.  Output will 
consist of the nearest integer of FEET DEEP of silver dollars that 
the state of Texas needs to be covered to be equivalent to the 
number N.  Output will be less than 1000. 
     Assume that Texas has 262,134 square miles of land, while a 
silver dollar is 1 1/2 inches in diameter and 3/32 inch in 
thickness.  Assume that the silver dollars will be piled in rows 
and columns.  Examples: 
                                                | silver dollars 
     INPUT: Enter probability: 1E17             | are piled like:
    OUTPUT: 2 FEET DEEP                         | OOOOOOOOOO
                                                | OOOOOOOOOO
     INPUT: Enter probability: 2.6E18           | OOOOOOOOOO
    OUTPUT: 43 FEET DEEP                        | OOOOOOOOOO

1.10  Memory is a large array of bytes, each with its own address. 
Each program in a computer system deals with particular logical 
addresses.  The memory mapping hardware converts logical addresses 
into physical addresses.  Logical addresses are in the range of 0 
to Max.  The corresponding Physical addresses are in the range of 
R+0 to R+Max, where the value R is the lower bound. 
     Write a program to map a given logical address and segment to 
the corresponding physical address.  Each segment starts at a 
specific physical address (base) and has a given length.  The 
physical address can be determined using the data in the table 
below by adding the base (smallest physical address in a specified 
segment) to the given logical address.  If the logical address 
specified is greater than the length of the segment, display 
ADDRESSING ERROR.  Input will be the segment number followed by 
the logical address to convert.  Output will be an error message 
(ADDRESSING ERROR) or the physical address.  Repeat input until a 
segment number greater than 4 is entered. 

     Data:  Segment  Base  Length 
               0      219    600 
               1     2300     14 
               2       90    100 
               3     1327    580 
               4     1952     96 

     INPUT: Enter Seg#, Address: 1, 11 
    OUTPUT: 2311 
     INPUT: Enter Seg#, Address: 3, 600 
     INPUT: Enter Seg#, Address: 2, 95 
    OUTPUT: 185 
     INPUT: Enter Seg#, Address: 5, 0 
    OUTPUT: (program terminates)

2.1  Write a program to display the value of F(x), given x as an 
input positive integer between 1 and 10 inclusive, and given: 

                     F(1) = F(2) = F(3) = 1, and   

            F(x+1) = -------------   for x greater than 3 

Output must be of the form "F(x)=" F(x), where the first x is 
substituted by the input value of x, and the second F(x) is the 
actual value of the function.  Examples: 

     INPUT: Enter x: 4              INPUT: Enter x: 6 
    OUTPUT: F(4)= 3                OUTPUT: F(6)= 17 

2.2  Write a program to print out the prime factorization equation 
for a given positive integer.  The prime numbers must be in 
increasing order and separated by an "X".  Examples: 

     INPUT: Enter #: 90              INPUT: Enter #: 17 
    OUTPUT: 2 X 3 X 3 X 5           OUTPUT: 17 

2.3  Write a program to display a word without its vowels: 
a,e,i,o,u, and exclude y.  Example: 

     INPUT: Enter word: CONTEST

     INPUT: Enter word: ANSWER

2.4  In order to write a program, a programmer must choose 
appropriate names for variables, constants, procedures, etc. Each 
identifier should have a name that correctly identifies its 
purpose and function in the program.  However, if a name is too 
long, then it is burdensome to write and read in a program and may 
occupy more space on a line than is necessary.  Good short names 
that properly describe an object's function are better than long 
     For the sake of brevity, write a program to produce the 
shortest possible names for a set of 6 identifiers in a program so 
that each one is distinguishable using the following method.  If 
two or more identifiers start with the same character(s) compare 
each identifier character by character until they are 
distinguishable.  Truncate the remainder of the identifier after 
the distinguishable character (see MINIMUM, MAXIMUM, and MAXNUM in 
example).  Assume that the language can distinguish identifiers 
with any amount of letters, if they differ.  Example: 
     INPUT: Enter name: AVERAGE           OUTPUT: A 
            Enter name: MINIMUM                   MI 
            Enter name: MAXIMUM                   MAX 
            Enter name: MAXNUM                    MAXN 
            Enter name: POSITION                  POS 
            Enter name: POINTER                   POI 

2.5  Write a program to display the number of distinguishable 
permutations of letters of a given word.  The mathematical formula 
for calculating such a number is given as the factorial, (!), of 
the number of letters in the word divided by the product of 
factorials of the number of times a letter appears.  Examples: 

     INPUT: Enter word: WITTICISM 
    OUTPUT: 30240 

(there are 9 letters, 3 I's, and 2 T's, 9! / (3! x 2!) = 30240) 

     INPUT: Enter word: ELEMENT 
    OUTPUT: 840 

(there are 7 letters, 3 E's,  7! / 3! = 840) 

NOTE: A factorial is the product of all the integers from 1 to the 
number.  (e.g. 5!=5x4x3x2x1 = 120)  Since 1! = 1, letters that 
appear only once are not relevant. 

2.6  Write a program to simulate a word processor that underlines 
text between two asterisks.  Underlining mode begins at the first 
asterisk and ends at the next asterisk.  Many different segments 
of a line may be underlined.  The line of text will contain no 
more than 40 characters.  The program is to accept a line of text, 
clear the screen, display the line, skip a line, display the line 
without it's embedded asterisks, then underline (with hyphens on 
the next line) the words between the first and second asterisks, 
the third and fourth, and so on.  Example: 

    OUTPUT: (Screen is cleared) 
              ------            ----------- 
2.7  Write a program to compute an integer expression involving 
two positive integers separated by one of the following: +, -, *, 
or /.  Each integer will contain no more than 4 digits and the 
result is guaranteed to be an integer between -30,000 and 30,000. 
     INPUT: 80/5         INPUT: 543*21         INPUT: 999-5556 
    OUTPUT: 16          OUTPUT: 11403         OUTPUT: -4557 

2.8  Game theory is a mathematical theory formally dealing with 
competitive situations.  Emphasis is placed on the decision-making 
processes of the adversaries.  In a two-person game, a player may 
use a two dimensional matrix of numbers to represent a payoff 
table.  Each number represents an amount of win or loss.  Each 
player tries to minimize his maximum losses.  If there exists an 
element in the table that is both the minimum in its row and the 
maximum in its column, then it is called a saddle point.  When a 
saddle point exists, neither player has an advantage over his 
     Write a program to determine the saddle point element (each 
set of data will have a saddle point) and its row position and 
column position.  The program is to first accept the number of 
rows and columns in the table.  Then, the program accepts the 
elements of the table starting with each column element in row 1, 
then each column element of row 2, etc.  The output must be of the 
form, SADDLE POINT = # AT ROW # COL #.  Example: 

     INPUT: Enter # Rows, # Cols: 3, 3 
            Enter Row1 Col1: -3 
            Enter Row1 Col2: -2 
            Enter Row1 Col3: 6 
            Enter Row2 Col1: 2 
            Enter Row2 Col2: 0 
            Enter Row2 Col3: 2 
            Enter Row3 Col1: 5 
            Enter Row3 Col2: -2 
            Enter Row3 Col3: -4 

2.9  Write a program to sort a set of dates entered.  First, 
accept the number of dates to sort.  Next, accept each date by 
first accepting the entire name of the month, then the day, then 
the year as integers.  Display the dates in order in the form:
MONTH DAY YEAR.  Example: 

     INPUT: Enter # of dates: 3 
            Enter month: JANUARY 
            Enter day:   1 
            Enter year:  1978 

            Enter month: FEBRUARY 
            Enter day:   20 
            Enter year:  1977 

            Enter month: JANUARY 
            Enter day:   27 
            Enter year:  1978 

    OUTPUT: FEBRUARY 20 1977 
            JANUARY 1 1978 
            JANUARY 27 1978 

2.10  Because Ms. Heindel is such a nice music teacher, she is 
allowing her students to retake quiz 4, since her class did rather 
poorly.  Write a program to display the table of names and grades 
(with column headings) as shown below, then accept the 5 new 
grades for the students for quiz 4, in their order of listing.  
Then clear the screen and display the final report with averages 
for each person and for each quiz and for the overall class.  
Averages must be accurate to 2 decimal places and be aligned in 
the proper column.  The headings in the final report must be 
centered, as shown below.  With the exception of spacing, the 
content must look as follows: 


       OUTPUT:    NAME      Q1     Q2     Q3     Q4 

               D. WOOLY    100     92     90     90 
               M. SMITH     55     75     70     65 
               C. BROWN     94     70     62     70 
               R. GREEN     90     74     80     85 
               T. STONE     85     98    100     70 

       INPUT: Enter 5 grades for quiz 4: 98, 70, 75, 90, 80 
      OUTPUT: (Screen is cleared)  
                          MS. HEINDEL'S MUSIC CLASS 
                                 FINAL GRADES 
                                 SPRING 1989 

                 NAME       Q1     Q2     Q3     Q4  AVERAGE 

               D. WOOLY    100     92     90     98   95.00 
               M. SMITH     55     75     70     70   67.50 
               C. BROWN     94     70     62     75   75.25 
               R. GREEN     90     74     80     90   83.50 
               T. STONE     85     98    100     80   90.75 
               AVERAGE:  84.80  81.80  80.40  82.60 
               CLASS AVERAGE: 82.40

3.1  Write a program to simulate a mini spell checker.  Given a 
word, determine if it is CORRECT or MISSPELLED.  A word is 
misspelled if it violates any of the following spelling rules:

  - 'E' does not appear before the suffixes 'ING', 'IBLE', 'ABLE'
  - 'I' before 'E' except after 'C'
  - A letter may appear no more than twice consecutively


      INPUT: Enter word: PIE        OUTPUT: CORRECT
      INPUT: Enter word: EATING     OUTPUT: CORRECT

3.2  Write a program to calculate the positive amount of (V)olume 
for a given (P)ressure according to the following thermo-dynamics 

P*V*V*V*14.14 - P*V*9062.599 - 23511.9*V*V + 988686.1*V =400943.0

The program will first simulate the values of V for the following 
values of P: 0.05, 0.70, 10.00, 70.00.  Next, a positive value of 
P (less than 100) is entered and the value of V is computed and 
displayed.  Values of V must be rounded to the nearest 
ten-thousandth (0.0001).  Display both the value of P and V, as 
shown below, where ? represents the computed value for V.  


    OUTPUT: P =  0.05  V = 0.4097
            P =  0.70  V = ?
            P = 10.00  V = ?
            P = 70.00  V = 1.2263
     INPUT: Enter value for P: 30.00
    OUTPUT: P = 30.00  V = 0.5699

3.3  Write a program to magnify an input positive integer.  Each 
digit must be displayed in block format (made of *) with 
dimensions determined by its magnification (1, 2, or 3).  At most 
4 digits will be input for magnification of 1; At most 3 digits 
for magnification of 2, and at most 2 digits for magnification of 
3.  The dimensions of a block number are as follows:

       Magnification   Dimensions           Space Between Digits
             1         5 rows by 4  columns (2 space separation)
             2         9 rows by 8  columns (4 space separation)
             3        13 rows by 12 columns (6 space separation)


     INPUT: Enter number: 3124
            Enter magnification: 1

    OUTPUT: ****     *  ****  *  *        (note: digit 1 is in
               *     *     *  *  *         right most column of
            ****     *  ****  ****         block format)
               *     *  *        *
            ****     *  ****     *

    INPUT: Enter number: 567
           Enter magnification: 2

   OUTPUT: ********    ********    ********
           *           *                  *
           *           *                  *
           *           *                  *
           ********    ********           *
                  *    *      *           *
                  *    *      *           *
                  *    *      *           *
           ********    ********           *

    INPUT: Enter number: 89
           Enter magnification: 3

   OUTPUT: ************      ************
           *          *      *          *
           *          *      *          *
           *          *      *          *
           *          *      *          *
           *          *      *          *
           ************      ************
           *          *                 *
           *          *                 *
           *          *                 *
           *          *                 *
           *          *                 * 
           ************                 *

3.4  Write a program to produce a calendar for an input month of a 
year.  The month will be any number between 1 and 12 inclusive, 
and the year will be between 1901 and 1999 inclusive.  Every year 
(in this century) divisible by 4 is a leap year.  January 1, 1901 
was a Tuesday.  Each heading of the month and year will be 
centered above the calendar.  The rest of the calendar should 
appear exactly as shown below.  Sunday's column has a 2 space 
margin; all the other days have a 4 space margin in which the 
numbers are right justified.  Examples:

      INPUT: Enter month, year: 1, 1901
     OUTPUT:          JANUARY 1901
                S   M   T   W   T   F   S
                        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

      INPUT: Enter month, year: 2, 1988
     OUTPUT:         FEBRUARY 1988     
                S   M   T   W   T   F   S
                    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

3.5  Write a program to determine all the possible ways to 
position 5 queens on a 5x5 chess board so that none of them can 
attack another.  A queen can attack another queen if the other 
queen is in the same row or column or diagonal.  For each 
solution, display the column the queen is in pertaining to the 
row.  Output display must be of the format shown below, with each 
column number in row 1 non-decreasing for each solution.  If 2 
solutions have the same column number in row 1, put the solution 
with the smallest column number in row 2 first.

    OUTPUT:  ROWS =  1 2 3 4 5
                     1 3 5 2 4
                     : : : : :
                     : : : : :
                     5 3 1 4 2

The first solution has queens in (row 1, col 1), (row 2, col 3), 
(row 3, col 5), (row 4, col 2), (row 5, col 4).  The last solution 
has queens in (row 1, col 5), (row 2, col 3), (row 3, col 1), (row 
4, col 4), (row 5, col 2).

3.6  Write a program to display the product of two large integers 
in a given base.  Integers will be at most 30 digits in length, 
and the base will be between 2 and 10 inclusive (both the input 
integers and output integers will be in the given base).  

     INPUT: Enter base: 8
            Enter first integer: -12345670123456701234567
            Enter second integer: 7654321076543210
    OUTPUT: -121705336146616716573067044023333510470

     INPUT: Enter base: 10
            Enter first integer:  1234567890
            Enter second integer: 9999999999
    OUTPUT: 12345678898765432110

3.7  Write a program to determine the most efficient way to 
represent change.  Input will consist of the COST, the given 
AMOUNT, and the COIN that is unavailable for making change.  
Pennies, nickels, dimes, and quarters are available for making 
change, with the exception of the COIN input as missing.  The most 
efficient change is defined as the combination that requires the 
fewest number of coins.
     Output must display the change returned, starting with the 
smallest denomination, and not including the missing coin.  Next, 
the total change returned is displayed.  Change returned will not 
exceed 99 cents.  If only one coin of a denomination is used, then 
the singular form of the name must be used (as in PENNY).  
Otherwise, the plural form is used (as in PENNIES).  Examples:

     INPUT: Enter cost, amount: 14.41, 15.00
            Enter missing coin: NICKEL
            3 DIMES
            1 QUARTER

     INPUT: Enter cost, amount: 4.40, 5.00
            Enter missing coin: DIME
            2 NICKELS
            2 QUARTERS

3.8  Write a program to find the corner coordinates of rectangles 
consisting of 1's in a two dimensional table of binary numbers.  
The table consists of 6 rows by 7 columns.  Six numbers in base 10 
(each less than 128) are entered for each row.  These numbers are 
converted into base 2 and padded with 0's on the left (if 
necessary) to fit into the 7 columns of that row.  The program 
will display this table.  Next, the computer finds all rectangles 
filled with 1's and displays the coordinates of the upper left 
corner and the bottom right corner of each rectangle.  A rectangle 
must have dimensions of at least 2.  No rectangles will overlap 
(i.e., in cases where rectangle is contained in another rectangle, 
give the coordinates of the larger rectangle).  Display each set 
of coordinates on a separate line with parenthesis and commas, as 
shown below.  Example:

      INPUT: Enter number: 127        OUTPUT: 1111111
             Enter number: 123                1111011
             Enter number: 23                 0010111
             Enter number: 99                 1100011
             Enter number: 88                 1011000
             Enter number: 57                 0111001


     (Note: 3 lines of coordinates may appear in any order)

3.9  Write a program to determine the five word combination that 
gives the greatest point value according to the following rules.  
Two sets of five words each (shown below in the first output) are 
given as data.  The words in each set are placed on top of each 
other in such a way that BINGO is spelled in the first column of 
the first set of words and the second column of the second set of 
words.  Each word has a numerical value as determined by summing 
the values of each letter as shown below:

      A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P
      9 14  1 16 20  5 10  2 21 17  6 25 12  3 22 18

      Q  R  S  T  U  V  W  X  Y  Z
     24  7 13 26 15 11 19  4 23  8

The sum of the letters in each word is displayed to the right of 
the word and a total of all the word sums is placed beneath the 
five word sums.  The set of five words with the greatest total has 
3 asterisks placed underneath its total.
     The program will start with the 10 given words displaying the 
numerical sums.  Next, the program will accept any number of new 
five letter words to replace those words in the original two sets. 
 For a new word to replace another word currently in the set, its 
total must be larger than the total of the word it is replacing (a 
new word may be used in either or both lists).  Also, the entire 
set of words must still spell BINGO in the first or second columns 
as it did previously.  Pressing the  or  key will 
end the input of words and display the new word list and sums 
(with the larger total sum underlined with three asterisks).  The 
program then accepts more words, or it may quit if the word QUIT 
is entered.  The second set of five words (with BINGO down the 
second column) must be placed to the right of the first set of 
words, as shown below.  Example:
    OUTPUT: BIBLE  94   OBESE  89
            IDYLL 110   TITHE  95
            NOISE  79   INLET  95
            GULLY  98   IGLOO 100
            OBESE  89   TOWER  94
                  470         473
     INPUT: Enter word: NOTED
            Enter word: BOOST
            Enter word: OLIVE
            Enter word: ONION
            Enter word: (Enter key pressed)
    OUTPUT: BOOST  97   OBESE  89
            IDYLL 110   TITHE  95
            NOTED  87   INLET  95
            GULLY  98   IGLOO 100
            OLIVE  99   BOOST  97
                  491         476
       INPUT: Enter word: QUIT
      OUTPUT: (program terminates)

3.10 Write a program to determine the number of distinguishable 
ways to place and orient a cube with a solid color on each of its 
six sides.  The program will ask for the one letter color symbol 
for each of the sides in the following order: TOP, FRONT, BOTTOM, 
BACK, RIGHT, LEFT.  Output will be a statement declaring the 
NUMBER OF DISTINGUISHABLE CUBES--different ways to position and 
orient the cube.  Examples:

     INPUT: Enter TOP side:    Y
            Enter FRONT side:  Y
            Enter BOTTOM side: Y
            Enter BACK side:   Y
            Enter RIGHT side:  Y
            Enter LEFT side:   Y

     INPUT: Enter TOP side:    G
            Enter FRONT side:  G
            Enter BOTTOM side: G
            Enter BACK side:   G
            Enter RIGHT side:  G
            Enter LEFT side:   Y

     INPUT: Enter TOP side:    B
            Enter FRONT side:  B
            Enter BOTTOM side: O
            Enter BACK side:   Y
            Enter RIGHT side:  G
            Enter LEFT side:   R