This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
haas:fall2016:data:projects:dsi0 [2016/08/14 12:18] – [Errata] wedge | haas:fall2016:data:projects:dsi0 [2016/08/27 18:10] (current) – [Verify Your Program] wedge | ||
---|---|---|---|
Line 9: | Line 9: | ||
=====Errata===== | =====Errata===== | ||
- | This section will document any updates applied to the project since original release: | + | This section will document any updates applied to the project since original |
* __revision 1__: added some additional output specifications that need to be followed. There will probably be more as time goes by, so keep checking for updates (20160813) | * __revision 1__: added some additional output specifications that need to be followed. There will probably be more as time goes by, so keep checking for updates (20160813) | ||
* __revision 2__: nice to see people already getting started; I've had a few questions about project specifications I've clarified below, namely: your display function(s), | * __revision 2__: nice to see people already getting started; I've had a few questions about project specifications I've clarified below, namely: your display function(s), | ||
+ | * __revision 3__: clarification- all prompts should display to STDERR. Only produced output (such as displaying or showing the obtained value) should go to STDOUT (20160820) | ||
+ | * __revision 4__: added the " | ||
=====Objective===== | =====Objective===== | ||
In this project, we get started with some course initialization and review activities. | In this project, we get started with some course initialization and review activities. | ||
Line 34: | Line 36: | ||
* create your first week content | * create your first week content | ||
- | **NOTE:** Week 1 journal entry will be due before Monday, the remainder of the intro Journal content will be due by this project' | + | **NOTE:** Week 1 journal entry will be due before Monday |
====Mailing List==== | ====Mailing List==== | ||
Line 51: | Line 53: | ||
Ensure you can still (or if you are new to this, that you can successfully) log into lab46 via an ssh or mosh client. | 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: | + | Lab46 will be the primary and supported development environment for the course. While you are free to use your own systems |
- | * MUST be submitted via lab46 | + | * MUST be submitted via lab46 (typically via the **submit** tool) |
* MUST compile, run, and function as required ON lab46 | * MUST compile, run, and function as required ON lab46 | ||
Remember, during open LAIR times you can always come in and use the pods. | Remember, during open LAIR times you can always come in and use the pods. | ||
+ | NOTE that **many** of the projects in this class are heavily tied into Lab46, so you'll want to get used to using it as a development platform. | ||
====Personal/ | ====Personal/ | ||
To both aid you and help you develop better development skills, I'd like for you to make regular commits and pushes to your [[/ | To both aid you and help you develop better development skills, I'd like for you to make regular commits and pushes to your [[/ | ||
Line 67: | Line 70: | ||
====Program to Implement==== | ====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: | 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: | ||
+ | |||
+ | |||
+ | ===menu=== | ||
* Presents the user with a menu, having the listed features. | * Presents the user with a menu, having the listed features. | ||
Line 85: | Line 91: | ||
>>> | >>> | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===build list=== | ||
* build list | * build list | ||
- | * prompt the user to enter number after number, appending it to the list, until the user terminates the action by entering a -1 | + | * prompt the user to enter number after number, appending it to the list, until the user terminates the action by entering a -1. Prompt will display to STDERR. |
* We will check for the -1 in the array to signify the end of our list | * We will check for the -1 in the array to signify the end of our list | ||
+ | * if you're crafty about it, this doesn' | ||
<cli> | <cli> | ||
Line 98: | Line 108: | ||
enter value (-1 to finish): -1 | enter value (-1 to finish): -1 | ||
</ | </ | ||
+ | |||
+ | ===display list=== | ||
* display list forward | * display list forward | ||
* From the first (zero-th) element of the array clear through to the element containing the -1, | * 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. | * display the contained numbers, along with their array index. | ||
+ | * as output is a core necessity of displaying, your function displaying the list can and should perform output. | ||
+ | * I would like to see some sort of **display()** function; you can have a separate one for displaying forward (**displayf()**) and backward (**displayb()**), | ||
<cli> | <cli> | ||
Line 120: | Line 134: | ||
* From the last element (before the -1) to the beginning | * From the last element (before the -1) to the beginning | ||
* display the contained numbers, along with their array index. | * display the contained numbers, along with their array index. | ||
+ | * as output is a core necessity of displaying, your function displaying the list can and should perform output. | ||
<cli> | <cli> | ||
Line 134: | Line 149: | ||
[4] -1 -> [3] 8 -> [2] 6 -> [1] 4 -> [0] 2 | [4] -1 -> [3] 8 -> [2] 6 -> [1] 4 -> [0] 2 | ||
</ | </ | ||
+ | |||
+ | ===insert=== | ||
* insert into list | * insert into list | ||
- | * prompt for array index | + | * prompt for array index (prompt will display to STDERR) |
* accept new value from the user | * accept new value from the user | ||
* without destroying any array contents, place new value BEFORE specified array index | * without destroying any array contents, place new value BEFORE specified array index | ||
* this will likely involve shifting a bunch of data down an index | * this will likely involve shifting a bunch of data down an index | ||
+ | * this functionality should be encapsulated in a discrete **insert()** function | ||
+ | * avoid using global variables; pass and return necessary data | ||
<cli> | <cli> | ||
Line 157: | Line 176: | ||
If you were to display the list (forward) after doing this insert, you should have: 2 4 5 6 8 (we inserted the 5 before the current element 2 (containing the 6)). | If you were to display the list (forward) after doing this insert, you should have: 2 4 5 6 8 (we inserted the 5 before the current element 2 (containing the 6)). | ||
+ | |||
+ | ===append list=== | ||
* append into list | * append into list | ||
- | * prompt for array index | + | * prompt for array index (prompt will display to STDERR) |
* accept new value from the user | * accept new value from the user | ||
* without destroying any array contents, place new value AFTER specified array index | * without destroying any array contents, place new value AFTER specified array index | ||
* this will likely involve shifting a bunch of data down an index | * this will likely involve shifting a bunch of data down an index | ||
+ | * this functionality should be encapsulated in a discrete **append()** function | ||
+ | * avoid using global variables; pass and return necessary data | ||
<cli> | <cli> | ||
Line 190: | Line 213: | ||
[0] 2 -> [1] 4 -> [2] 5 -> [3] 6 -> [4] 7 -> [5] 8 -> [6] -1 | [0] 2 -> [1] 4 -> [2] 5 -> [3] 6 -> [4] 7 -> [5] 8 -> [6] -1 | ||
</ | </ | ||
+ | |||
+ | ===obtain=== | ||
* obtain from list | * obtain from list | ||
- | * prompt for array index | + | * prompt for array index (prompt will display to STDERR) |
* obtain value at array index and place it in a standalone variable (to be displayed to STDOUT) | * 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) | * adjust array contents to no longer include this obtained value (we've removed it from the list) | ||
+ | * this functionality should be encapsulated in a discrete **obtain()** function | ||
+ | * avoid using global variables; pass and return necessary data | ||
<cli> | <cli> | ||
Line 222: | Line 249: | ||
[0] 2 -> [1] 4 -> [2] 5 -> [3] 7 -> [4] 8 -> [5] -1 | [0] 2 -> [1] 4 -> [2] 5 -> [3] 7 -> [4] 8 -> [5] -1 | ||
</ | </ | ||
+ | |||
+ | ===clear list=== | ||
* clear list | * clear list | ||
* empty the array, leaving it in an initial state (-1 at the 0 index, more places if it messes up your reverse list display) | * empty the array, leaving it in an initial state (-1 at the 0 index, more places if it messes up your reverse list display) | ||
+ | * if you're crafty about it, this doesn' | ||
+ | |||
+ | ===quit=== | ||
* quit | * quit | ||
* Each menu item should correspond to a discrete activity you'll be performing on the list or program, and each item is implemented out in separate functions (with the exception of the quit option, although you can if you really want). | * Each menu item should correspond to a discrete activity you'll be performing on the list or program, and each item is implemented out in separate functions (with the exception of the quit option, although you can if you really want). | ||
+ | |||
* Additionally, | * Additionally, | ||
* basically, when appending, have a function that handles the actual append operation, but do the input and output in/around your menu code (so your append() function basically just manipulates the list). | * basically, when appending, have a function that handles the actual append operation, but do the input and output in/around your menu code (so your append() function basically just manipulates the list). | ||
Line 233: | Line 266: | ||
* What if you exceed the array? You exceed it... the program may crash and or infinitely loop or otherwise be unpredictable. This program is really just to start you practicing on the important operations of inserting, appending, and obtaining. | * What if you exceed the array? You exceed it... the program may crash and or infinitely loop or otherwise be unpredictable. This program is really just to start you practicing on the important operations of inserting, appending, and obtaining. | ||
* A " | * A " | ||
- | |||
====Further output requirements==== | ====Further output requirements==== | ||
The menu: | The menu: | ||
Line 272: | Line 304: | ||
* structs | * structs | ||
* pointers | * pointers | ||
+ | |||
+ | |||
+ | =====Verify Your Program===== | ||
+ | When your program is functional, you can test it for correctness by using the **projeval** tool on lab46. A series of tests will be run, and you will be able to see if you program is in spec (SUCCESS) or out of spec (MISMATCH). | ||
+ | |||
+ | An example of a fully compliant test run follows: | ||
+ | |||
+ | <cli> | ||
+ | lab46: | ||
+ | [projeval] Evaluating dsi0 for username | ||
+ | [test 0] display 4 element populated list forward ... | ||
+ | you have: [0] 2 -> [1] 4 -> [2] 6 -> [3] 8 -> [4] -1 | ||
+ | should be: [0] 2 -> [1] 4 -> [2] 6 -> [3] 8 -> [4] -1 | ||
+ | | ||
+ | |||
+ | [test 1] inserting into empty list ... | ||
+ | you have: [0] 7 -> [1] -1 | ||
+ | should be: [0] 7 -> [1] -1 | ||
+ | | ||
+ | |||
+ | [test 2] appending into empty list ... | ||
+ | you have: [0] 7 -> [1] -1 | ||
+ | should be: [0] 7 -> [1] -1 | ||
+ | | ||
+ | |||
+ | [test 3] obtaining from 1 entry list ... | ||
+ | you have: The value you obtained is: 7 | ||
+ | should be: The value you obtained is: 7 | ||
+ | | ||
+ | |||
+ | [test 4] obtaining first entry from 2 entry list ... | ||
+ | you have: The value you obtained is: 7 | ||
+ | should be: The value you obtained is: 7 | ||
+ | | ||
+ | |||
+ | [test 5] obtaining second entry from 2 entry list ... | ||
+ | you have: The value you obtained is: 8 | ||
+ | should be: The value you obtained is: 8 | ||
+ | | ||
+ | |||
+ | [test 6] inserting before first entry in list ... | ||
+ | you have: [0] 6 -> [1] 7 -> [2] -1 | ||
+ | should be: [0] 6 -> [1] 7 -> [2] -1 | ||
+ | | ||
+ | |||
+ | [test 7] inserting before second entry in list ... | ||
+ | you have: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 | ||
+ | should be: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 | ||
+ | | ||
+ | |||
+ | [test 8] appending after last entry in list ... | ||
+ | you have: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 | ||
+ | should be: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 | ||
+ | | ||
+ | |||
+ | [test 9] appending after second to last entry in list ... | ||
+ | you have: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 | ||
+ | should be: [0] 7 -> [1] 8 -> [2] 9 -> [3] -1 | ||
+ | | ||
+ | |||
+ | [test 10] clearing list then appending ... | ||
+ | you have: [0] 7 -> [1] -1 | ||
+ | should be: [0] 7 -> [1] -1 | ||
+ | | ||
+ | |||
+ | [test 11] obtaining second entry from 2 entry list (check list integrity) ... | ||
+ | you have: [0] 7 -> [1] -1 | ||
+ | should be: [0] 7 -> [1] -1 | ||
+ | | ||
+ | |||
+ | [test 12] obtaining first entry from 2 entry list (checking list integrity) ... | ||
+ | you have: [0] 8 -> [1] -1 | ||
+ | should be: [0] 8 -> [1] -1 | ||
+ | | ||
+ | |||
+ | [test 13] obtaining from 1 entry list (checking list integrity) ... | ||
+ | you have: [0] -1 | ||
+ | should be: [0] -1 | ||
+ | | ||
+ | |||
+ | lab46: | ||
+ | </ | ||
=====Submission Criteria===== | =====Submission Criteria===== | ||
Line 304: | Line 418: | ||
lab46: | lab46: | ||
</ | </ | ||
- |