\\
Corning Community College
\\
Data Structures
\\
\\
End of Course Experience
\\
\\
~~TOC~~
=====Rules=====
Presented within will be various questions evaluating your knowledge and experience gained this semester. In places where you are able, the more you write and explain topics the better the chance you will have of receiving full credit (and alternatively, the more credit you will receive should something be incorrect). Note that I'm not just looking for answers; I'm looking for responses and solutions. Show me that you understand the problem and any particular outcome.
The questions on this experience are open resource with the exception of other individuals. In that respect, it is CLOSED PERSON. This means you are not to communicate with other people (either in the class or otherwise), in real life or electronically. Use your own knowledge, use your skills, and use your ability to access the allowed resources to aid you in coming up with your well thought out answers to each question.
You are allowed, and expected, to ask me questions, so that a problem can be better clarified.
You are to do **all** questions. Submission is to be in an organized and easy to read format in a plain text file, such as in an e-mail with attachments on Lab46, sent to (**wedge@lab46.corning-cc.edu** or **haas@corning-cc.edu**) and yourself.
You have until 11:59:59pm (that's 23:59:59 in 24-hour time) Friday, December 17th, 2010 to complete and submit this to me.
If desired, our scheduled finals week meeting time is: **Tuesday, December 14th, 2010** from **11:15am-2:15pm** in **C002** (our regular room).
Good luck!
=====0x0: Palindromes=====
A palindrome is a word that is spelled the same way forwards and backwards.
For example, words like **bob**, **mom**, **pop**, **radar**, and **racecar** are palindromes, for you can reverse them and end up with the exact same thing.
====Program Criteria====
Write me a program, utilizing libraries from our backgammon data structures code, that test whether or not a string (or array of char) input from the user is a valid palindrome. Be sure to include adequate comments and documentation of the process you are undertaking.
Of particular note- you must make use of a linked list-based stack (**libstack.a**) for palindrome testing, specifically utilizing the **push** and **pop** functionality inherent to stacks.
Be sure to display the word both "before" and "after", along with a message indicating its validity as a palindrome.
====Sample Output====
Some example output may be:
lab46:~/eoce/data$ ./palindrome
Enter string to check: bob
Before: bob
After: bob
"bob" is a palindrome!
lab46:~/eoce/data$ ./palindrome
Enter string to check: star
Before: star
After: rats
"star" is NOT a palindrome!
lab46:~/eoce/data$
====EoCE Program Submission Criteria====
Please submit, along with the rest of the materials to this End of Course Experience, your solution to this problem that meets the following criteria:
____ Source code organization
____ any function prototypes are grouped together
____ any function declarations are grouped together
____ all variables are declared at the top of function (or code if global)
____ standard preprocessor directives (includes, defines) are at top of code
____ Source code is neat and easy to read
____ indentation with tabs is used
____ all code is uniformly indented
____ there is no double spacing of code
____ no line of source spans longer than 80 characters
____ is in plain ASCII text format
____ UNIX-style line endings
____ variables are intuitively named
____ formatting spaces around all relational operators
____ Source code has an identifying comment block at the top
____ indication of source program name (include file extension)
____ brief synopsis (the purpose of the program/what it does)
____ author (I hope this has your name), and any version/date information
____ compiling instructions/command line to create executable
____ is at least 8 lines long, inclusive of blank commented lines
____ Source code has informative comments throughout
____ at least 8 occurrences of in-code comments
____ explanation of process undertaken as code progresses
____ explanation of any algorithms used or purpose of utilization
____ Program compiles and executes without error*
____ no warnings (unless I've pre-approved them)
____ no errors
____ using your own compiling instructions in code
____ no errors if used appropriately
____ can handle any appropriate combination of choices
____ no erratic output
____ no incorrect output
____ cleanly exits when the choice or condition is present
* assume proper user input always takes place
____ Program operation is informative to the user
____ useful information is presented to the user at each input
____ as appropriate, output is generated as a result of actions taken
____ there is no guess work on the part of the user
____ if there is a menu, it should be displayed before input
____ Documentation of known program flaws/implementation shortcomings
____ any known shortcomings adequately listed/documentated
____ suspected deviations are mentioned
____ include in a comment block at the bottom of your code for this
____ if no known flaws/deviations exist, say so
=====0x1: Debugging=====
Provide your response to the following questions:
* What importance can a debugger play in eliminating logical errors during program development?
* What are some of the debugging strategies you might use to flush out a nagging logic problem?
=====0x2: Universal Implications=====
Provide your response to the following question:
* If you were creating your own implementation of the universe, what data structure(s) would you use to store its structure?
Feel free to be philosophical. But certainly be verbose.
=====0x3: Prime Numbers=====
A prime number is a value which is evenly divisible by only 1 and itself.
A composite number is a value which has additional factors.
====Program Specifications====
Write a program that will calculate all the prime and composite numbers between 2 and a user-specified value (inclusive of 2 and the user-specified value), and stores all the discovered prime numbers in a **linked list**. All the composite numbers will be stored in their own separate list.
You are to use the linked list implementation from our class backgammon code (**liblist.a**).
====Sample Output====
lab46:~/eoce/data$ ./prime
Enter value to compute until (from 2 to): 18
Primes: 2 -> 3 -> 5 -> 7 -> 11 -> 13 -> 17
Composites: 4 -> 6 -> 8 -> 9 -> 10 -> 12 -> 14 -> 15 -> 16 -> 18
lab46:~/eoce/data$
====EoCE Program Submission Criteria====
Please submit, along with the rest of the materials to this End of Course Experience, your solution to this problem that meets the following criteria:
____ Source code organization
____ any function prototypes are grouped together
____ any function declarations are grouped together
____ all variables are declared at the top of function (or code if global)
____ standard preprocessor directives (includes, defines) are at top of code
____ Source code is neat and easy to read
____ indentation with tabs is used
____ all code is uniformly indented
____ there is no double spacing of code
____ no line of source spans longer than 80 characters
____ is in plain ASCII text format
____ UNIX-style line endings
____ variables are intuitively named
____ formatting spaces around all relational operators
____ Source code has an identifying comment block at the top
____ indication of source program name (include file extension)
____ brief synopsis (the purpose of the program/what it does)
____ author (I hope this has your name), and any version/date information
____ compiling instructions/command line to create executable
____ is at least 8 lines long, inclusive of blank commented lines
____ Source code has informative comments throughout
____ at least 8 occurrences of in-code comments
____ explanation of process undertaken as code progresses
____ explanation of any algorithms used or purpose of utilization
____ Program compiles and executes without error*
____ no warnings (unless I've pre-approved them)
____ no errors
____ using your own compiling instructions in code
____ no errors if used appropriately
____ can handle any appropriate combination of choices
____ no erratic output
____ no incorrect output
____ cleanly exits when the choice or condition is present
* assume proper user input always takes place
____ Program operation is informative to the user
____ useful information is presented to the user at each input
____ as appropriate, output is generated as a result of actions taken
____ there is no guess work on the part of the user
____ if there is a menu, it should be displayed before input
____ Documentation of known program flaws/implementation shortcomings
____ any known shortcomings adequately listed/documentated
____ suspected deviations are mentioned
____ include in a comment block at the bottom of your code for this
____ if no known flaws/deviations exist, say so
=====0x4: Letter Arranging=====
Your task for this question will be to arrange a set of letters into their alphabetically sorted order.
====Program Specifications====
Write a program that will prompt the user to enter letters (all in the same case).
Each entered letter will be inserted into a node-based binary search tree (sorted, no duplicates).
When done, traverse the tree to display its contents from lowest to highest values.
You should use your own binary search tree implementation for this program (you can use the backgammon code as reference).
====Sample Output====
lab46:~/eoce/data$ ./bstree
Enter letter (. to quit): g
Enter letter (. to quit): b
Enter letter (. to quit): k
Enter letter (. to quit): z
Enter letter (. to quit): a
Enter letter (. to quit): q
Tree Letters are: a b g k q z
lab46:~/eoce/data$
====EoCE Program Submission Criteria====
Please submit, along with the rest of the materials to this End of Course Experience, your solution to this problem that meets the following criteria:
____ Source code organization
____ any function prototypes are grouped together
____ any function declarations are grouped together
____ all variables are declared at the top of function (or code if global)
____ standard preprocessor directives (includes, defines) are at top of code
____ Source code is neat and easy to read
____ indentation with tabs is used
____ all code is uniformly indented
____ there is no double spacing of code
____ no line of source spans longer than 80 characters
____ is in plain ASCII text format
____ UNIX-style line endings
____ variables are intuitively named
____ formatting spaces around all relational operators
____ Source code has an identifying comment block at the top
____ indication of source program name (include file extension)
____ brief synopsis (the purpose of the program/what it does)
____ author (I hope this has your name), and any version/date information
____ compiling instructions/command line to create executable
____ is at least 8 lines long, inclusive of blank commented lines
____ Source code has informative comments throughout
____ at least 8 occurrences of in-code comments
____ explanation of process undertaken as code progresses
____ explanation of any algorithms used or purpose of utilization
____ Program compiles and executes without error*
____ no warnings (unless I've pre-approved them)
____ no errors
____ using your own compiling instructions in code
____ no errors if used appropriately
____ can handle any appropriate combination of choices
____ no erratic output
____ no incorrect output
____ cleanly exits when the choice or condition is present
* assume proper user input always takes place
____ Program operation is informative to the user
____ useful information is presented to the user at each input
____ as appropriate, output is generated as a result of actions taken
____ there is no guess work on the part of the user
____ if there is a menu, it should be displayed before input
____ Documentation of known program flaws/implementation shortcomings
____ any known shortcomings adequately listed/documentated
____ suspected deviations are mentioned
____ include in a comment block at the bottom of your code for this
____ if no known flaws/deviations exist, say so
=====0x5: Meaning=====
Of all the work you've done this semester in this course, identify something that was meaningful to you.
* What is it?
* Why does it stick out in your mind? Explain
=====0x6: Reflection=====
Answer me the following:
* How did you feel about the course?
* Was it useful/interesting to you?
* What was your least favorite aspect, and why?
* Any comments, suggestions?
=====0x7: Personal Assessment=====
After an exciting and intellectually challenging run, we're arriving at the end of this semester's journey. Some will be moving on, others sticking around for more. I make it a practice to listen to your thoughts and suggestions. The course, as we all experienced it, unfolds in a manner pertaining, in part, to how you respond to concepts and topics (do we need more time, can I crank it up a couple notches, etc.) so each semester and each class is entirely different from any other- because of each of you, and all of us, working together and learning together.
So, searching deep down within your soul- balancing reason with emotion, and considering attendance and timeliness; what grade do you feel you deserve for this course, and why? Justify your answer based on your own perceived performance to course ideals and content, not on need or desire.