~~TOC~~
\\
Corning Community College
C/C++ Programming
\\
Projects
\\
\\
======Objective======
To provide a list of programming projects to aid in the understanding of course concepts and gaining of valuable development experience.
======Project Lifecycle======
A core part of your work in the course will revolve around performing projects. This will offer you many opportunities to both learn and apply important concepts, and achieve a better mastery of material.
The method of undertaking a project will generally take the following form:
- Identify a project: Figure out what interests you and what you'd like to do
- Create a page on your portfolio on the wiki and create the proposal
- Justify your case for the project on the proposal
- Notify me of your project proposal (send me a URL to the proposal)
- Upon reading your proposal, I will communicate approval, disapproval, or suggestions to improve the proposal to work towards approval.
- Once receiving approval, you will commence on project implementation, extending the proposal document into a general project documentation page on your portfolio
- All development will utilize both the wiki and subversion -- only you (or your group) and I will have access to your project repository
- If you have any questions on the implementation of your project, this documentation should be able to assist debuggers in helping to diagnose any problems you encounter should you have questions/problems
- When completed, notify me so I can review your documentation (wiki) and code (subversion)
- I will offer feedback on the project along with final results (did you satisfactorily achieve the desired attributes, etc.)
The aim here is two-fold:
* To generate content for your portfolio (this is an investment that will only increase in value over time)
* To provide a "paper trail" so I know you are doing work, you have content that can be viewed/reflected upon, and you gain experience performing projects
======Project Proposal======
Before starting on a project, you must obtain approval from me regarding the following items:
* The project idea (what is it you are pursuing?)
* The project development environment (who all is working on it? Multi-person projects need good justification. Each group member needs to maintain a documentation page on their own portfolio page)
* The project documentation (where are you putting the documentation? Put all this proposal information on a portfolio page on the wiki and give me the URL)
* The project scope (how detailed are you going to get? This can be difficult to pinpoint exactly, but basically try to describe your anticipated approach)
* The project attributes (why do you feel your project is worthy of certain attributes? Make the case for each of them)
* The project deadline (how long are you anticipating working on the project?)
If desired, a sample [[fall2011/common/project_template|template]] is available here that you can copy and paste into an applicable portfolio page.
======Project Specifications======
All projects undertaken need to be documented on the wiki in your portfolio namespace. Specifically, you should set up a front page at:
* http://lab46.corning-cc.edu/user/username/portfolio
And link to projects within the namespace:
* http://lab46.corning-cc.edu/user/username/portfolio/oneofmyprojects
* http://lab46.corning-cc.edu/user/username/portfolio/anotherproject
Project documentation needs to have (at least) the following sections:
* Objective: state the purpose of this project. What is the point of this project? What do we hope to accomplish by undertaking it?
* Prerequisites: what items/ducks do you need to get in order before starting on the project?
* Background: an informative description of the purpose or nature of the project. Be sure to describe the core process being undertaken, any pertinent theories or concepts. Your program/project represents a solution to such concepts/theories. You'll want to give a general overview of what is going to be accomplished.
* Concept Attributes: an identification of the attributes this project possesses (you can claim at most 5 attributes per project, and attribute eligibility is approved by me before starting on the project)
* Scope: present on the project proposal- give some initial brainstorming/overviews of the steps you anticipate taking to accomplish the project.
* Procedure: For non-code specific projects- the actual steps taken to accomplish the project.
* Source Code: the actual source code of your project contained with wiki **
** blocks.
* Code must have the following identification information in a comment banner at the top of the code:
* author
* course
* semester
* project identification information/abstract
* compiling/build instructions
* execution instructions
* Code must have intuitive comments throughout, especially:
* clear identification of important/central processing tasks in the code
* description/purpose of any functions
* organization of code components (variables, preprocessor directives, etc.)
* Code must be indented, which means:
* usage of a consistent indentation pattern (single tab per level of scope, four spaces, etc.)
* recognition of blocks of scope (an if statement should not be at the same level as the function it resides within)
* easy visual comparison among peer blocks and parent/child blocks of scope
* code is organized and easy to read
* no intentional double spacing of code
* intuitive variable names
* intuitive function names
* Sample execution: within ** ** blocks (if textual, screenshots if otherwise), an appropriate sampling of your project's execution or output.
* Reflection: thoughts, observations, analyses, conclusions you made while performing the project.
* References: a list of (at least) 2 sources of information pertinent to the project.
* Any unused template items need to be removed; display only pertinent content to the project on the wiki page.
======Project Attributes======
The following are the programming attributes you must consider while undertaking a project for credit in this course:
^ Attribute ^ Qty needed ^ Description ^
| variables | 4 |data types, storage size, range are used within the project |
| pointers | 4 |indirection/dereferencing are demonstrated |
| selection | 4 |adjustment of program flow based on a logical/relational test is demonstrated |
| I/O | 4 |demonstration of STDIN and STDOUT/STDERR in your program |
| repetition | 4 |demonstration of repetition, be it by iteration, looping, or recursion |
| functions | 4 |utilization of self-created functions |
| arrays | 4 |proper utilization of arrays in code |
| structures/classes | 4 |demonstration of structures in C code, classes/objects in C++ code |
| inheritance | 2 |utilization of inheritance in C++ code |
| polymorphism | 1 |demonstration of polymorphism concepts in C++ code |
| templates | 1 |demonstration of templates in C++ code |
| file I/O | 2 |demonstration/utilization of file I/O in your code |
| libraries | 2 |utilization of non-core libc library that aids you in the solution |
There are a total of 40 items needed; with a maximum of 6 achievable per project, that makes for a minimum of 7 projects you must perform during the semester.
Note that where multiple quantities of attributes are concerned, only a single instance of an attribute can be achieved on any single project.
You need to keep an inventory of the total attributes you've achieved, displayed on your project portfolio page for this course.
======Projects======
The following are possible sources of projects you can undertake in this course. Note that while most of these can be solved by hand, and some have a single solution, your task is to implement a computer program to solve the problem, making use of the programming concepts and creating effective algorithms for accomplishing these tasks.
Projects here are listed in no particular order, please do not correlate difficulty with arrangement.
^ Project ^ Description ^ Potential Attributes |
^ [[fall2011/cprog/projects/primes|Primes]] | Calculate and display prime numbers | varies |
^ [[fall2011/cprog/projects/multable|Multiplication]] | Display a multiplication table | varies |
^ [[fall2011/cprog/projects/euler|Euler]] | Various mathematical/scientific problems | varies |
^ [[fall2011/cprog/projects/logic|Logic]] | Various logic/combinatorial problems | varies |
^ [[fall2011/cprog/projects/bases|Bases]] | Base Conversions | arrays, functions, repetition |
^ [[fall2011/cprog/projects/age|Age]] | Age Calculations | varies |
^ [[fall2011/cprog/projects/rockpaperscissors|Roshambo]] | Implement the classic "Rock, Paper, Scissors" game | varies |
^ [[fall2011/cprog/projects/farmerriver|Farmer and River]] | The Farmer's quandary transporting a Fox, Chicken, and Corn across a river | varies |
^ [[fall2011/cprog/projects/colorithmetic|Color Arithmetic]] | Fun with Colors | structures/classes, functions, pointers |
Again, these are not the only nor required projects, they are suggestions and worthwhile explorations. It is highly recommended you at least start with some of these projects, then as you find a particular direction or interest, pursue it.
======Project Programming Assumptions======
A couple things to keep in mind:
* be creative in your design and implementation of your project code.
* consistently indent your code so that it is readable!
* document your code so I know you know what you're doing
* and, weeks from now, so will you.
* Polish your output so it appears consistent to the end user(s).
======Project Submission======
In addition to posting the appropriate project documentation under your portfolio namespace, you must also attend to the following:
* placement of your code in your **~/src/cprog** directory (or subdirectory therein)
* addition/commit of source file(s) into your repository
* notify me of project submission