Corning Community College CSCS2320 Data Structures ~~TOC~~ ======Project: DSI0====== =====Errata===== This section will document any updates applied to the project since original release: * __revision #__: (DATESTAMP) =====Objective===== In this project, we get started with some course initialization and review activities. =====Project Overview===== ====Course Homepage==== You're reading this, so you've likely already found your way to the course homepage. It consists of the syllabus plus additional course resources. Please familiarize yourself with it, bookmarking important resources as appropriate, so that you can refer back when needed. I'd recommend knowing how to get to the projects page (where you found the link for this project), as new content will be posted there. ====Syllabus==== Be sure to read through and over the syllabus, ensuring there are no questions on the material and organization of the course. Note that this IS an internet course, and as such, there is no formal scheduled class meeting time. That does not mean I am not expecting to ever see you. In fact, many people, already aware of the rigors and intensity of this course, are already planning informal gatherings in the LAIR so as to keep on top of things. This course WILL be intense, please do not think you have to go it alone. ====Opus Intro==== Familiarize yourself with your Opus, and once there: * customize it (title/subtitle) * add an introduction * create your first week content **NOTE:** Week 1 opus entry will be due before Tuesday, the remainder of the intro Opus content will be due by this project's deadline. ====Mailing List==== Using the resources found on the course homepage (or the lab46 website in general), locate and subscribe a preferred and frequently checked e-mail address to the class mailing list (known as **DATA**). We will use this for class discussions (along with irc, the notes wiki page, your Opus, etc.) and to disseminate announcements and other information. Once subscribed, please send a message to the list introducing yourself (also so I can know to associate a particular e-mail address with you). ====Class Chat (IRC)==== Using the [[/haas/spring2015/common/class_chat|tutorial]], set up a screen session and join the **#csci** channel on irc. This has proven useful for more interactive (debugging!) conversations. Additionally, the C/C++ Programming students will be on this channel, so you could further review your C skills by helping them out. ====Lab46 Shell==== Ensure you can still (or if you are new to this, that you can successfully) log into lab46 via an ssh or mosh client. Lab46 will be the primary and supported development environment for the course. While you are free to use your own systems, any assigned projects: * MUST be submitted via lab46 * MUST compile, run, and function as required ON lab46 Remember, during open LAIR times you can always come in and use the pods. ====Personal/Per-User Lab46 Mercurial Repository==== To both aid you and help you develop better development skills, I'd like for you to make regular commits and pushes to your [[/haas/spring2015/common/repo|Lab46 mercurial repository]]. This way, you can have a regular snapshot of your work as you go along, plus have the ability to grab an older copy should something go wrong. Like the Opus, I will be looking for a minimal amount of repository-related activity PER WEEK (for example, I will be looking for AT LEAST 1 commit in relation to your program for week 1). ====Program to Implement==== As a means of simultaneous review, along with starting to acclimate ourselves to new concepts that we'll be encountering on a regular basis, I'd like for you to implement a program (in C) that does the following: * Presents the user with a menu, having the following features: * build list * prompt the user to enter number after number, adding (appending?) it to the list, until the user terminates the action by entering a -1 * We will check for the -1 in the array to signify the end of our list * display list * From the first (zero-th) element of the array clear through to the element containing the -1, * display the contained numbers, along with their array index. * insert into list * prompt for array index * accept new value from the user * without destroying any array contents, place new value BEFORE specified array index * this will likely involve shifting a bunch of data down an index * append into list * prompt for array index * accept new value from the user * without destroying any array contents, place new value AFTER specified array index * this will likely involve shifting a bunch of data down an index * obtain from list * prompt for array index * obtain value at array index and place it in a standalone variable (to be displayed to STDOUT) * adjust array contents to no longer include this obtained value (we've removed it from the list) * clear list * empty the array, leaving it in an initial state (-1 at the 0 index) * quit * Each menu item should correspond to a discrete activity you'll be performing on the list or program, and it is **highly recommended** that you break functionality out into separate functions. * Additionally, with the exception of displaying, you should perform no I/O within any of these functions (do it all in main(), or where-ever your core menu logic is located). * This list, for now, will be housed within a statically declared integer array (of, say, 20 elements). You are to perform whatever manipulations are needed on that array. * A "list" is, for all intents and purposes, a sequence of values located together. They do not have to be sorted, merely considered part of a group or category. Here, we will use the containing features of the array to accomplish that (while simultaneously reviewing C!) ====Review C==== In addition to writing this program, please be sure you brush up on (at least) the following: * functions (prototypes, definitions, calling, parameters, return types) * structs * pointers =====Submission Criteria===== To be successful in this project, the following criteria must be met: * Project must be submit on time, by the posted deadline. * Late submissions will lose 25% credit per day, with the submission window closing on the 4th day following the deadline. * All code must compile cleanly (no warnings or errors) * all requested functions must be implemented in the related library or program * all requested functionality must conform to stated requirements (either on this project page or in comment banner in source code files themselves). * Executed programs must display in a manner similar to provided output * output formatted, where applicable, must match that of project requirements * Processing must be correct based on input given and output requested * Output, if applicable, must be correct based on values input * Code must be nicely and consistently indented (you may use the **indent** tool) * Code must be commented * Any "to be implemented" comments **MUST** be removed * these "to be implemented" comments, if still present at evaluation time, will result in points being deducted. * Sufficient comments explaining the point of provided logic **MUST** be present * Track/version the source code in your lab46 repository * Submit a copy of your source code to me using the **submit** tool (**make submit** will do this) by the deadline. ====Submit Tool Usage==== Let's say you have completed work on the project, and are ready to submit, you would do the following (assuming you have a program called arraylist.c): lab46:~/src/data/dsi0$ submit data dsi0 arraylist.c Submitting data project "dsi0": -> arraylist.c(OK) SUCCESSFULLY SUBMITTED lab46:~/src/data/dsi0$