Be sure you have read (or at least skimmed) the assigned readings from chapter 8 (not including the material on searching and sorting).
Please include with each part of the assignment the Honor Code pledge or just the word ``pledged'', plus one or more of the following about collaboration and help (as many as apply).1Text in italics is explanatory or something for you to fill in. For written assignments, it should go right after your name and the assignment number; for programming assignments, it should go in comments at the start of your program.
Do the following programming problems. You will end up with at least one code file per problem. Submit your program source (and any other needed files) by sending mail to bmassing@cs.trinity.edu with each file as an attachment. Please use a subject line that mentions the course and the assignment (e.g., ``csci 1312 hw 6'' or ``CS1 hw 6''). You can develop your programs on any system that provides the needed functionality, but I will test them on one of the department's Linux machines, so you should probably make sure they work in that environment before turning them in.
Your mission for this problem is to complete a C program that, given a ``seed'' , a number of samples , and a number of ``bins'' , generates a sequence of ``random'' numbers (using as described below), uses both methods to map each generated number to a number between 0 and inclusive, and shows the distribution of results as in the sample output below. To help you (I hope!) I'm providing a starter program, link below, which you should use as your starting point.
Your program should use to ``seed'' the random sequence: By default rand() always starts with the same value (and produces the same sequence). You can make it produce different results by first calling srand() with an integer ``seed'' ( here).
Sample execution:
[bmassing@diasw04]$ ./a.out seed? 5 how many samples? 1000 how many bins? 6 counts using remainder method: (0) 154 (1) 188 (2) 171 (3) 161 (4) 155 (5) 171 counts using quotient method: (0) 172 (1) 175 (2) 183 (3) 150 (4) 168 (5) 152If you feel a bit more ambitious you could also have the program print maximum and minimum counts and the difference between them, as a crude measure of how uniform the distribution is:
[bmassing@diasw04]$ ./a.out seed? 5 how many samples? 1000 how many bins? 6 counts using remainder method: (0) 154 (1) 188 (2) 171 (3) 161 (4) 155 (5) 171 min = 154, max = 188, difference 34 counts using quotient method: (0) 172 (1) 175 (2) 183 (3) 150 (4) 168 (5) 152 min = 150, max = 183, difference 33(You will get an extra-credit point for doing this.)
Here is a starter program that prompts for the seed, generates a few ``random'' numbers, and illustrates the two methods of mapping to a specified range: rands.c.
Of course, your program should check to make sure all the inputs are positive integers. (Yes, error checking is a pain, but it's an incentive to get better at copy-and-paste?)
which index? computing fibonacci(46) iterative version: result 2971215073 (time 0.00000000) recursive version: result 2971215073 (time 46.40543509, count 5942430145) memoized recursive version: result 2971215073 (time 0.00000095, count 91)Your mission is to fill in the blanks in this starter program so that it performs the desired computation. (Look for comments with the word FIXME.) For the iterative and simple recursive approaches, you can get the code from the course ``sample programs'' page; you will just need to change some data types from int to long long.
For the memoized recursive approach, a simple way to use this technique is to have an array for saving previously-computed results, with the n-th element of the Fibonacci sequence stored as the n-th element of the array, and a value of 0 meaning ``has not been previously computed''. This array could be an additional argument for the function, or it could be a global variable. (Usually global variables are discouraged, but for this problem they might make sense.) The program should do something reasonable if this array is not big enough, perhaps just rejecting any input that would overflow it.
The only changes you should need to make in the starter program are: