Download C++ Sheet (2)

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Addition wikipedia , lookup

Location arithmetic wikipedia , lookup

Elementary arithmetic wikipedia , lookup

Proofs of Fermat's little theorem wikipedia , lookup

Elementary mathematics wikipedia , lookup

Transcript
Data Structures - C++ Sheet
Q1: (Cryptography) A company wants to transmit data over the telephone, but is
concerned that its phones could be tapped. All of the data are transmitted as four-digit
integers. The company has asked you to write a program that encrypts the data so that
it can be transmitted more securely. Your program should read a four-digit integer and
encrypt it as follows: Replace each digit by (the sum of that digit plus 7) modulus 10.
Then, swap the first digit with the third, swap the second digit with the fourth and
print the encrypted integer. Write a separate program that inputs an encrypted
fourdigit integer and decrypts it to form the original number.
Q2: Write a program that estimates the value of the mathematical constant e by using
the formula:
Prompt the user for the desired accuracy of e (i.e., the number of terms in the
summation).
Q3: A mail order house sells five different products whose retail prices are: product 1
$2.98, product 2$4.50, product 3$9.98, product 4$4.49 and product 5$6.87. Write a
program that reads a series of pairs of numbers as follows:
a. product number
b. quantity sold
Your program should use a switch statement to determine the retail price for each
product. Your program should calculate and display the total retail value of all
products sold. Use a sentinel-controlled loop to determine when the program should
stop looping and display the final results.
Q4: Calculate the value of p from the infinite series
Print a table that shows the approximate value of p after each of the first 1,000 terms
of this series.
Q5: A company pays its employees as managers (who receive a fixed weekly salary), hourly
workers (who receive a fixed hourly wage for up to the first 40 hours they work and "timeand-a-half"1.5 times their hourly wage for overtime hours worked), commission workers
(who receive $250 plus 5.7 percent of their gross weekly sales), or pieceworkers (who receive
a fixed amount of money per item for each of the items they produce each pieceworker in this
company works on only one type of item). Write a program to compute the weekly pay for
each employee. You do not know the number of employees in advance. Each type of
employee has its own pay code: Managers have code 1, hourly workers have code 2,
commission workers have code 3 and pieceworkers have code 4. Use a switch to compute
each employee's pay according to that employee's paycode. Within the switch, prompt the user
(i.e., the payroll clerk) to enter the appropriate facts your program needs to calculate each
employee's pay according to that employee's paycode.
Q6: A parking garage charges a $2.00 minimum fee to park for up to three hours. The
garage charges an additional $0.50 per hour for each hour or part thereof in excess of
Page 1
three hours. The maximum charge for any given 24-hour period is $10.00. Assume
that no car parks for longer than 24 hours at a time. Write a program that calculates
and prints the parking charges for each of three customers who parked their cars in
this garage yesterday. You should enter the hours parked for each customer. Your
program should print the results in a neat tabular format and should calculate and print
the total of yesterday's receipts. The program should use the function calculateCharges
to determine the charge for each customer. Your outputs should appear in the
following format:
Car
1
2
3
TOTAL
Hours
1.5
4.0
24.0
29.5
Charge
2.00
2.50
10.00
14.50
Q7: Write a function integerPower (base, exp ) that returns the value of base exp
For example, integerPower( 3, 4 ) = 3 * 3 * 3 * 3. Assume that exponent is a positive,
nonzero integer and that base is an integer. The function integerPower should use for
or while to control the calculation. Do not use any math library functions.
Q8: (Perfect Numbers) An integer is said to be a perfect number if the sum of its
factors, including 1 (but not the number itself), is equal to the number. For example, 6
is a perfect number, because 6 = 1 + 2 + 3. Write a function perfect that determines
whether parameter number is a perfect number. Use this function in a program that
determines and prints all the perfect numbers between 1 and 1000. Print the factors of
each perfect number to confirm that the number is indeed perfect. Challenge the
power of your computer by testing numbers much larger than 1000.
Q9: (PrimeNumbers) An integer is said to be prime if it is divisible by only 1 and
itself. For example, 2, 3, 5 and 7 are prime, but 4, 6, 8 and 9 are not.
a. Write a function that determines whether a number is prime.
b. Use this function in a program that determines and prints all the prime
numbers between 2 and 10,000. How many of these numbers do you really
have to test before being sure that you have found all the primes?
c. Initially, you might think that n/2 is the upper limit for which you must test to
see whether a number is prime, but you need only go as high as the square root
of n. Why? Rewrite the program, and run it both ways. Estimate the
performance improvement.
Q10: The greatest common divisor (GCD) of two integers is the largest integer that
evenly divides each of the numbers. Write a function gcd that returns the greatest
common divisor of two integers.
Q11: (Recursive Greatest Common Divisor) The greatest common divisor of integers
x and y is the largest integer that evenly divides both x and y. Write a recursive
function gcd that returns the greatest common divisor of x and y, defined recursively as
follows: If y is equal to 0, then gcd( x, y ) is x; otherwise, gcd( x, y ) is gcd( y, x % y ),
where % is the modulus operator. [Note: For this algorithm, x must be larger than y.]
Page 2
Q12: (Fibonacci Series) The Fibonacci series {0, 1, 1, 2, 3, 5, 8, 13, 21, ...} begins
with the terms 0 and 1 and has the property that each succeeding term is the sum of
the two preceding terms. (a) Write a nonrecursive function fibonacci(n) that calculates
the nth Fibonacci number.
Q13: (Airline Reservations System) A small airline has just purchased a computer for
its new automated reservations system. You have been asked to program the new
system. You are to write a program to assign seats on each flight of the airline's only
plane (capacity: 10 seats).
Your program should display the following menu of alternativesPlease type 1 for "First
Class" and Please type 2 for "Economy" . If the person types 1, your program should assign
a seat in the first class section (seats 1-5). If the person types 2, your program should
assign a seat in the economy section (seats 6-10). Your program should print a
boarding pass indicating the person's seat number and whether it is in the first class or
economy section of the plane.
Use a one-dimensional array to represent the seating chart of the plane. Initialize all
the elements of the array to 0 to indicate that all seats are empty. As each seat is
assigned, set the corresponding elements of the array to 1 to indicate that the seat is no
longer available.
Your program should, of course, never assign a seat that has already been assigned.
When the first class section is full, your program should ask the person if it is
acceptable to be placed in the economy section (and vice versa). If yes, then make the
appropriate seat assignment. If no, then print the message "Next flight leaves in 3 hours".
Q14: Use a two-dimensional array to solve the following problem. A company has
four salespeople (1 to 4) who sell five different products (1 to 5). Once a day, each
salesperson passes in a slip for each different type of product sold. Each slip contains
the following:
a. The salesperson number
b. The product number
c. The total dollar value of that product sold that day
Thus, each salesperson passes in between 0 and 5 sales slips per day. Assume that the
information from all of the slips for last month is available. Write a program that will
read all this information for last month's sales and summarize the total sales by
salesperson by product. All totals should be stored in the two-dimensional array sales.
After processing all the information for last month, print the results in tabular format
with each of the columns representing a particular salesperson and each of the rows
representing a particular product. Cross total each row to get the total sales of each
product for last month; cross total each column to get the total sales by salesperson for
last month. Your tabular printout should include these cross totals to the right of the
totaled rows and to the bottom of the totaled columns.
Q15: (The Sieve of Eratosthenes) A prime integer is any integer that is evenly
divisible only by itself and 1. The Sieve of Eratosthenes is a method of finding prime
numbers. It operates as follows:
a. Create an array with all elements initialized to 1 (true). Array elements with
prime subscripts will remain 1. All other array elements will eventually be set
to zero. You will ignore elements 0 and 1 in this exercise.
Page 3
b. Starting with array subscript 2, every time an array element is found whose
value is 1, loop through the remainder of the array and set to zero every
element whose subscript is a multiple of the subscript for the element with
value 1. For array subscript 2, all elements beyond 2 in the array that are
multiples of 2 will be set to zero (subscripts 4, 6, 8, 10, etc.); for array
subscript 3, all elements beyond 3 in the array that are multiples of 3 will be
set to zero (subscripts 6, 9, 12, 15, etc.); and so on.
When this process is complete, the array elements that are still set to one indicate that
the subscript is a prime number. These subscripts can then be printed. Write a
program that uses an array of 1000 elements to determine and print the prime numbers
between 2 and 999. Ignore element 0 of the array.
Q16: (Bucket Sort) A bucket sort begins with a one-dimensional array of positive
integers to be sorted and a two-dimensional array of integers with rows subscripted
from 0 to 9 and columns subscripted from 0 to n1, where n is the number of values in
the array to be sorted. Each row of the two-dimensional array is referred to as a
bucket. Write a function bucketSort that takes an integer array and the array size as
arguments and performs as follows:
a. Place each value of the one-dimensional array into a row of the bucket array
based on the value's ones digit. For example, 97 is placed in row 7, 3 is placed
in row 3 and 100 is placed in row 0. This is called a "distribution pass."
b. Loop through the bucket array row by row, and copy the values back to the
original array. This is called a "gathering pass." The new order of the
preceding values in the one-dimensional array is 100, 3 and 97.
c. Repeat this process for each subsequent digit position (tens, hundreds,
thousands, etc.).
On the second pass, 100 is placed in row 0, 3 is placed in row 0 (because 3 has no tens
digit) and 97 is placed in row 9. After the gathering pass, the order of the values in the
one-dimensional array is 100, 3 and 97. On the third pass, 100 is placed in row 1, 3 is
placed in row zero and 97 is placed in row zero (after the 3). After the last gathering
pass, the original array is now in sorted order.
Note that the two-dimensional array of buckets is 10 times the size of the integer array
being sorted. This sorting technique provides better performance than a insertion sort,
but requires much more memory. The insertion sort requires space for only one
additional element of data. This is an example of the spacetime trade-off: The bucket
sort uses more memory than the insertion sort, but performs better. This version of the
bucket sort requires copying all the data back to the original array on each pass.
Another possibility is to create a second two-dimensional bucket array and repeatedly
swap the data between the two bucket arrays.
Q17: (Towers of Hanoi) Every budding computer scientist must grapple with certain
classic problems, and the Towers of Hanoi (as in the following figure) is one of the
most famous. Legend has it that in a temple in the Far East, priests are attempting to
move a stack of disks from one peg to another. The initial stack has 64 disks threaded
onto one peg and arranged from bottom to top by decreasing size. The priests are
attempting to move the stack from this peg to a second peg under the constraints that
exactly one disk is moved at a time and at no time may a larger disk be placed above a
smaller disk. A third peg is available for temporarily holding disks. Supposedly, the
world will end when the priests complete their task, so there is little incentive for us to
facilitate their efforts.
Page 4
Let us assume that the priests are attempting to move the disks from peg 1 to peg 3.
We wish to develop an algorithm that will print the precise sequence of peg-to-peg
disk transfers.
If we were to approach this problem with conventional methods, we would rapidly
find ourselves hopelessly knotted up in managing the disks. Instead, if we attack the
problem with recursion in mind, it immediately becomes tractable. Moving n disks
can be viewed in terms of moving only n 1 disks (hence the recursion) as follows:
a. Move n-1 disks from peg 1 to peg 2, using peg 3 as a temporary holding area.
b. Move the last disk (the largest) from peg 1 to peg 3.
c. Move the n-1 disks from peg 2 to peg 3, using peg 1 as a temporary holding
area.
The process ends when the last task involves moving n = 1 disk (i.e., the base case).
This task is accomplished by simply moving the disk, without the need for a
temporary holding area.
Write an application to solve the Towers of Hanoi problem. Allow the user to enter
the number of disks. Use a recursive Tower method with four parameters:
a. The number of disks to be moved,
b. The peg on which these disks are initially threaded,
c. The peg to which this stack of disks is to be moved, and
d. The peg to be used as a temporary holding area.
Your application should display the precise instructions it will take to move the disks
from the starting peg to the destination peg. For example, to move a stack of three
disks from peg 1 to peg 3, your application should print the following series of moves:
1 --> 3
1 --> 2
3 --> 2
1 --> 3
2 --> 1
2 --> 3
1 --> 3
(This notation means "Move one disk from peg 1 to peg 3.")
Page 5