Corning Community College
CSCS1320 C/C++ Programming
Assignments, Documents, Information, and Projects
======Projects======
* [[/haas/spring2017/cprog/projects/cci0|cci0]] (due 20170125)
* [[/haas/spring2017/cprog/projects/sof0|sof0]] (due 20170201)
* [[/haas/spring2017/cprog/projects/dow0|dow0]] (due 20170208)
* [[/haas/spring2017/cprog/projects/mbe0|mbe0]] (due 20170215)
* [[/haas/spring2017/cprog/projects/pnc0|pnc0]] (due 20170301)
* [[/haas/spring2017/cprog/projects/pnc1|pnc1]] (due 20170308)
* [[/haas/spring2017/cprog/projects/mbe1|mbe1]] (due 20170317)
* [[/haas/spring2017/cprog/projects/pnc2|pnc2 (bonus)]] (complete by 20170322)
* [[/haas/spring2017/cprog/projects/cos0|cos0]] (due 20170324)
* [[/haas/spring2017/cprog/projects/gfo0|gfo0]] (due 20170412)
======Class Stats======
* [[/haas/spring2017/cprog/projects/status|status]] (updated as of mbe1)
======Week 12======
* IPKA is now available
* FYI: this coming Tuesday (April 25th), I will be away at a conference.
======Week 11======
* Unveiled EoCE
* Started talking about object-oriented programming
======Week 10======
* tinkered on gd, worked on gfo0
======Week 9======
* More playing with the **gd** library- polygons and other things
* The next project, **gfo0** has you utilizing your looping, array, and file access skills as you write a program to calculate your current grade in the class.
* We may have hit the high water mark for the semester... upon evaluating **mbe1** there was a sharp decline in trends. Clearly the most troublesome project of the semester. But largely due to pure non-submits. We almost had a 50-50 split of submits vs. non-submits, and those who have consistently been following along, putting in effort, experimenting and exploring: they just did fine. In fact from them I probably fielded the least number of questions all semester. And of the questions I got, there was clear comprehension of concepts. They have demonstrated they understand, and I am most pleased with them. As for the others-- a lot are still fighting with themselves, at some level still believing the class brute force tactics of assignment completion will still somehow work (or just ignoring it and hoping it will just go away). Remember: computing is the fine art of **thinking**. Abstract, conceptual thinking. Not copying/pasting. Not following a recipe. Understanding a process and how one would like to arrange a solution.
======Week 8======
* For those who have missed class, or those who want a copy of any code we worked on in class, I have rigged up a "grabit" for the in-class examples. To obtain it, do the following:
* change into the directory where you've been placing your cprog code (**~/src/cprog**, perhaps)
* run the following (**grabit cprog examples**)
* you will now have an **examples/** directory
* in there will be the in-class programs we've worked on
* there is a **CHANGELOG** file that attempts to summarize what files have been added on what date (**cat CHANGELOG**)
* you can build all the code by typing '**make**'
* you can update your copy of the in-class examples by running that **grabit** line again, from within the **examples** directory.
* Next project has us rendering graphics with the gd image library. You'll be generating a circle made of squares (**cos0**), the perfect synchronization of math and programming!
======Week 7======
* **pnc0** has been evaluated. It tended to prove super-easy or super-hard, depending on the individual. If it was a challenge, I highly suggest seeking out some tutoring. Please.
* **mbe1** is the next project, where we revisit our previous multiply by 11 implementation and optimize it with loops and arrays.
* structs and unions are on the docket for this week. Probably touch on File I/O some as well.
* For those interested in taking the prime number programs to the next level, I have released **pnc2**, which will be a **BONUS** project. Note that there may not be early submission bonus points awarded as this is already a bonus project.
* as a bonus project, this can only help you; it cannot hurt you.
======Week 6======
* Our explorations of C and its concepts is growing by the week. At this point we've covered many of the basics, recently touching on two powerful optimizing concepts- loops and arrays. We continue this week with functions, and then structures.
* The next project is a continuation of the prime number theme; **pnc1** has us exploring additional optimizations and algorithms within the prime number space, helping us get an even better understanding of algorithms and the importance of their design and efficiency.
======Break 1======
* As I process through the knowledge assessment results, a few general observations:
* just because you CAN use a thing, doesn't mean you should
* I found that many people jumped straight to trying to use a loop, without properly understanding the underlying problem. Loops do not solve the problem, they can only improve upon an existing solution. No solution, the loop isn't going to help you.
* Working out stuff by hand before you start to write any code is an effective problem solving technique. If you wonder why you may be struggling, staring at a screenful of broken code that isn't solving a problem you yourself have yet to work through to understand, I really think you should make a more conscious effort to do this. I've seen various individuals waste a considerable amount of time (all the while I am suggesting to "work it out my hand", having my suggestions be ignored almost to the bitter end). Again, code doesn't solve problems, computers don't solve problems... WE solve problems. These other things are just tools to optimize our solutions.
======Week 5======
* Knowledge assessment on Thursday!
* Your next project is ready: **pnc0**
* We'll likely play with arrays this week, and how they can be used with loops to really optimize your algorithms.
======Week 4======
* If people are having problems, it generally seems to be related to bad habits of automatically reading between the lines (assuming certain things are obvious to the computer and that it will just take care of them), or they themselves have not worked out the logic to have a clear idea of the problem to solve.
* It is critically important that you work out the process **BY HAND**, on a sheet of paper, trying out enough examples so that:
- you can successfully work through the problem on your own
- you can understand the details that will need to be taken into consideration
- you can get a feel for some of the outer bounds that will need to be taken into account (2-digit, 3-digit, with/without carry)
* If you are getting something you aren't expecting:
* work it out by hand
* if it still doesn't make sense, try some debugging.
* An **fprintf()** to display the value of variables at key locations in your code can be most beneficial.
* It is important for you to develop such debugging skills to further improve your abilities
* Adjusting program flow: repetition, iteration
* the loops:
* for loop
* while loop
* do while loop
* starting values
* looping conditions
* step value
* I am thinking of having a knowledge assessment, next week (week 5), covering anything we've learned up to this point.
======Week 3======
* Adjusting program flow
* Selection statements!
* if, if/else, if/else if, if/else if/else
* switch/case
* ternary operator
* Relational operators
* is equal to (==)
* is not equal to (!=)
* is less than (<)
* is greater than (>)
* is less than or equal to (<=)
* is greater than or equal to (>=)
* Logical connectors
* AND (&&)
* OR (||)
* Used switch and if() in an in-class example pulling file metadata and extracting both file types and file octal permissions.
* used logic shifting operators
* used bitwise ANDing
* Signs of a bad programmer (avoid these to avoid becoming one):
* You never try new things when they are asked for (algorithm, technique, software, libraries, coding style, languages). Always doing the comfortable and familiar is stagnation at best, and quickly declines from there.
* You are OK with the first solution that works.
* You use the phrase "I don't know how to do that" and never try to learn how to do "that".
* Of course you will struggle with new things, everyone struggles, just don't give up and continue plugging along.
======Week 2======
* Tuesday, January 24th: SNOW DAY! No class today, see you Thursday.
* For those interested, the next project (**sof0**) is ready to begin on, for those completed with **cci0** and wanting something to do. Submission window opens at 2:30pm (for those seeking maximum bonus points).
* We continue down the C programming rabbit hole some more- last week we had an introduction to variables, their types, and various syntax explorations.
* This week we will look to explore input and output statements, specifically **fscanf()** and **fprintf()**.
* We also looked at the basic mathematical and logical operators we can use in expressions.
* The next project has been released, **[[/haas/spring2017/cprog/projects/sof0|sof0]]**
======Week 1======
* Welcome! I've wrapped all the initial activities into one project, **[[/haas/spring2017/cprog/projects/cci0|cci0]]**, that I'd like you to perform by the given deadline (by 11:59:59pm / 23:59:59).
* Get familiar with logging into the pod systems, and once there:
* open up a terminal
* log that terminal onto Lab46 for class work and participation.
* If you've never used a UNIX system before, I'd recommend reading **{{:haas:ufbm.pdf|UNIX for the Beginning Mage}}**; it is short, and likely one of the best reads you'll ever have.
* Get familiar with how to log onto Lab46, and once on:
* change to your **src/** subdirectory
* create/edit .c files (such as **hello.c**), and learn how to save/exit
* compile the C program (.c file(s)) into an executable with **gcc**
* execute the compiled C program (the executable) by specifying a path: **./program_name**