The multiple choice midterm, which covers quizzes 4 - 8 (chapters 6 - 10), will be available in the testing center starting Monday, October 31st, and will close on Saturday, November 5th (the last test handed out on Saturday is at 3:00 PM). There is no late fee for taking it on November 5th. This is closed book and closed note. It will probably take you about twice as long as it took to do the first Multiple Choice midterm because there are twice as many questions. Note that we will again plan on only making 130 copies of the midterm, so you can't all take it on Saturday. Plan ahead. For more information on Testing Center Hours see http://testing.byu.edu/info/center_hours.php. There are 38 questions and they are very, very similar (wink, wink) to the questions from the quizzes.
For the second programming midterm we will have a timed programming exam (3 hours). We know that this will initially cause a great deal of anxiety for some of you, but stay calm! We are doing a number of things differently to ensure that you will be successful. Please read this entire page for further details.
The programming midterm will start Tuesday, November 1st at 12:30 PM and ends Saturday, November 5th. The procedure will be as follows:
The exam is modeled very closely after the Teams lab. It is not the same problem, but if you master the concepts in Teams lab, you will be perfectly prepared for the midterm exam and will likely be able to finish in well under 3 hours (we anticipate many will finish in under an hour). It is open book, open notes, and open internet. You may look at old source code.
The exam is designed so that you can quickly and easily earn partial credit. Just like the Teams lab, the pass-off requirements are set up in a linear fashion to guide you through solving the problem (see https://facwiki.cs.byu.edu/cs142fa11/index.php/Teams#Pass-off_procedure). For each step you complete, you will earn more points until the program is complete. This way not only do you feel better because you can see your score going up, but you also have a guide to where to go next at each stage of implementation. The requirements are very similar to the Teams lab requirements.
Because the Teams lab is crucial to your midterm preparation, we will be holding numerous help sessions both before, during, and after the Teams lab is due to go over the concepts in the Teams lab. Once the midterm starts (Tuesday, November 1st, at 12:30 PM) the TAs will no longer be able to discuss or give help on the Teams lab, so take the chance early to make sure you understand the lab. Here are a list of concepts that you will need on the midterm programming exam:
You will NOT need to do anything with string manipulation or character arrays.
Lastly, let me give you some encouragement. Our purpose here is not to intimidate you with a 3-hour time limit, but rather to provide you an experience to boost your confidence that you can succeed in a real-world programming scenario. We believe that you are fully capable of succeeding on this midterm. Our goal is to prepare you well before the midterm so that when you go in to take the midterm you will be confident that you can write the specified program in a 3-hour block of time. Practice, practice, practice ahead of time with the list of concepts given above. Ask questions and prepare well and “ye shall not fear”!
A prime frustration for students with programming assignments is that they think that when it comes to earning points, it's all or nothing: either the program works and you get all the points, or the program doesn't work and you get no points. This is not true and we have taken painstaking effort to set up the point breakdown so that you can start with an empty, functioning program and get points for each element of functionality that you add in to the program until you have it fully functioning and all the points. This is called incremental programming. An excellent article on this subject is found here http://johndirk.articlealley.com/incremental-programming-8557.html. You don't necessarily need to use functions as the author does (although it would be highly recommendable); incremental programming refers more to the idea of starting with something simple and functioning and then adding functionality a little at a time. “Incremental approach is more reliable, safe and easy to follow. For students and beginners this would be an ideal way to approach their programming problems with confidence.”
If you feel like your code is a “very Frankenstein-ish collection of code” (to quote a student), it may be beneficial to see how someone else solved the problem. For a number of reasons, we feel it detrimental to post an “ideal” solution because it is important to understand that there is no such thing as an “ideal” solution. If the program works, then it is a viable solution. If, however, you feel like your solution is unclear, or too difficult to reasonably follow, here are a few suggestions to help in this case:
In doing this approach, I use incremental programming. I add one line of code at a time, and then I compile/run my code to make sure that new added line of code works. For example, before I even try to create a class or create an object from that class, I make sure that I'm reading in the data from my file okay. Use print statements to make sure that you're program is working the way you expect it to work.
Also in the Computers Example, note how my test case file has different test case categories represented.