Exam #1 Remarks and Observations
(Last Mod: 27 November 2010 21:38:41 )
Bookmarks:
Scores ranged from a 42 to a 99. There were four scores above 90 and four scores below 60. There was a significant gap in the scores - there was only a single score in the range 73 to 90. So people either did very well, or they did somewhere between "okay" to "need some work".
To put this exam in perspective, it only counts for 10% of your final grade. There is a reason for this. Many people completely tank Exam #1 and most of those people do much, much better on the later exams. Part of this is that you now fully realize how beneficial actually doing all of the Review Sheet problems really is. Part of it is that you now have a feel for the types of problems on the exams, and part of it is that an attitude shift usually occurs as people move away from just wanting to memorize a bunch of formulas to accepting that they need to understand the underlying concepts.
I do not presently see anyone in too much danger of failing the course, but I do recommend that people scoring below 50 or even 60 might want to come by and see me so that we can discuss the specific deficiencies and how to overcome them. The sooner the better. I don't see any compelling reason for anyone to drop the course - you've got to take it sometime and you are already past the roughest third. But you may need to re-evaluate your study methods.
The material on this exam is foundational. Do not simply throw the exam in a drawer (or the trash) on the assumption that you are past it. To discourage this, roughly one-third of Exam #2 will come from the problems on Exam #1 that caused people the most trouble. If you heed this and make sure that you fully understand how to work every problem on this exam, then that means that a third of the next exam will be a cakewalk.
Metric | Overall | Section 1 | Section 2 |
Mean | 71.4% | 72.8% | 66.5% |
Median | 70% | 70% | 64% |
Mode | 70% | 70% | NaN |
Keep in mind that the sections are so small, particularly the evening section, that the above statistics need to be taken with a rather large grain of salt. Having said that - and basing my conclusions far more on the actual distribution then the summary statistics in the table above - I can generally say that the results on this exam are not too far below what I had hoped for (something I have seldom been able to claim about Exam #1) although I fervently hope that a good portion of the class makes the effort to understand each of the problems they missed. I see some real holes in many people's comprehension of the fundamentals, but they are holes that appear to be pretty manageable to fill in if they are not left to fester.
Overall Performance (on multiple choice)
Metric | Overall | Section 1 | Section 2 |
Mean (% correct) | 76.5% | 76.4% | 76.7% |
Median (missed) | 7 | 7 | 7.5 |
Mode (missed) | 7 | 7 | NaN |
Number of people that had a given number of questions wrong
Missed | Count |
0 | - |
1 | - |
2 | 2 |
3 | - |
4 | 1 |
5 | 2 |
6 | - |
7 | 6 |
8 | 2 |
9 | - |
10 | 1 |
11 | 2 |
12 | 1 |
Number of people that missed a given question
The questions in brackets were missed by more than one-third of the students. You can count on these questions, or questions that address the same concept, being on a later exam.
Q | count | Q | count | Q | count |
1 | 2 | 11 | - | [21] | 6 |
[2] | 14 | [12] | 10 | 22 | 3 |
[3] | 6 | 13 | 2 | [23] | 8 |
4 | 3 | 14 | 3 | [24] | 8 |
5 | 3 | 15 | 3 | 25 | 1 |
6 | 5 | 16 | 2 | [26] | 8 |
[7] | 10 | 17 | - | 27 | 2 |
8 | 1 | 18 | 1 | [28] | 8 |
9 | - | 19 | 2 | 29 | 1 |
10 | 1 | 20 | - | [30] | 7 |
Q2:
Remember - as emphasized repeatedly in class - a value is considered FALSE if and only if it is exactly zero. If it is ANY THING ELSE it is true!
Q3:
Think of how you calculate the remainder when you do long division. And don't forget about integer division!
Q7:
Almost no one showed any work on this - which makes it (a) easy to make a mistake if you are tracking things in your head and (b) hard for me to guess where people made their mistakes. Historically, people miss this because they forget about the difference between integer division and floating point division. The result of (6/4) is 1 and (1>1) is FALSE.
Q12:
Again, few people showed any work. I would certainly have a hard time getting the correct result if I didn't write down the intermediate results, so I don't find it too surprising that you don't either. This factor aside, historically most people again ignore the impact of integer division.
Q21:
This is straight out of Module 1 - "A "nibble" (again reflecting some programmer's sense of humor) seems to be pretty universally agreed upon as being four bits, regardless of the size of the byte on a particular machine. This is probably because it requires four bits to represent all of the decimal digit values."
Q23:
Not only straight from Module 1 - but emphasized repeatedly in class: "To devise this representation, we draw upon two properties that we have discussed previously. First, the negative of a number is defined as being the additive inverse meaning that the addition of a number and its negative yields a result of zero. The second property is the overflow property of fixed-width integers whereby if the result of an addition operation yields 2N, where N is the number of bits, then normal overflow behavior will wrap around and yield a result of zero."
Q24:
It was pointed out several times that the number zero is represented by a pattern of all zeros regardless of whether we are talking about signed integer types, unsigned integer types, or floating point types.
Q26:
The desire to be able to represent zero exactly in a floating point representation only required that we have at least one exponent for which the mantissa was not normalized (i.e., did not have an assumed leading one). However, in doing so a gap is created and it is to avoid this gap that we have two exponent bit patterns that are interpreted as meaning the same exponent (with one having a normalized mantissa and the other a denormalized mantissa)
Q28:
Most people that missed this did so because they don't understand Little Endian and Big Endian. Just remember that the name is telling you which end of the number is stored at the base address. In a Little Endian format, the Least Significant Byte (the "little end") is stored at the base address. Also remember that, regardless of format, multi-byte values are stored beginning at the base address and progressing upwards. A couple of people missed the question because they added 4 to the base address. You only add three because the base address is one of those four bytes, so there are only three bytes beyond it. This type of mistake is very common mistake when constructing loop counters and similar things.
Q30:
Everyone that missed this said that the answer was 12 instead of 13. In almost all of those cases, I suspect that the problem is that people wanted to rely on memorizing a formula instead of understanding the concepts involved. A number of people that got it right did so by converting it to base-5 and counting the digits. That wasted a lot of time - probably because you are intimidated by working with logarithms. I think on the next exam I'll ask how many hexadecimal digits are required to represent the number of possible ways to order a standard deck of fifty-two cards - namely 52!.
Q31:
Many people didn't bother to indicate where the values were stored, even though this was explicitly asked for. A couple of people didn't indicate the actual values, even though this was explicitly asked for. A few people can't read the ASCII chart, at least not consistently. Quite a few people didn't bother to store the exclamation point (ASCII code 0x21) and even more forgot about the whole notion of null-terminated strings.
Q32:
Some people are clearly having problems understanding what a flow chart is or how to follow on, let along create one. Quite a number of people didn't indicate which path was to be followed for which outcome and frequently those same people struggled with the notion that ONLY a decision block can have multiple exit points. A couple of people apparently thought that once you executed the if_code that the entire program was over since they didn't indicate any exit point from there.
Q33:
This problem was getting at a single concept, although another concept tripped people up as well. The concept was whether or not you have paid attention to the many, many times I have talked about the risks of performing integer division. When you divide 25/10 you get 2 - not 2.5. So when you multiply the result by ten you get 20, not 25. A couple of people put 0 which would be the result if you mess up the order of operations and end up evaluating 25/(10*10) instead of (25/10)*10. But only on person showed any work to indicate that this is how they arrived at zero and the course policies clearly state that you must show work to expect to receive partial credit (and, in some cases, any credit at all).
Q34:
Another single concept question to get at whether you have been paying attention to any of the many times I have stressed that uninitialized variables are just that - they are not initialized. To ANY particular value. Most especially, they are not initialized to zero. They contain whatever happens to already be in memory at that address.
Q35:
You got one point for indicating that Card 10 received a value of 16 and a point for indicating that Card 1 received a value of 1. I did go back and give one point to the people that said that Card 16 received a value of 116 even though it has been pointed out (and used) repeatedly that each card can only store values from 00 to 99. Some people seem to think that the programmer has control over what card the carry result is written to. You don't. The carry result is written to Card #1. Period. I suspect that these same people will tend to be the ones that have difficulty understanding that RAND_MAX is telling you what the largest random number can be and that you, as the programmer, cannot change this by trying to change the value of RAND_MAX.
Q36:
I was very liberal in what I accepted here. If there was any notion of the "divide and conquer" concept you got you three of the four points. You had to give an indication that you understood that this process might need to be repeated and the sub-problems broken down even further to claim the fourth point. In a couple of cases, the response was sufficiently rambling and "shotgun" that I highly doubt the write really comprehended the concepts involved, but I gave credit if at least one of the pellets in the verbal blast had the right buzzwords.
Given that I indicated that comprehending this problem solving approach was the number one most important thing that I hoped you walked away from this class understanding and given that this was a question direct from the review sheet, I'm a bit concerned that a third of the students left it completely blank
Q37:
This was one of those questions from the review sheet that needed you to delve into the underlying principles a bit in order to be able to solve it on the exam in a reasonable amount of time. Upon spending some time to figure out how to determine which pattern is due to which representation, you should hopefully realize that (as was pointed out in class and in the module) the sign bit behaves the same way in signed binary as it does in two's complement and that the sign bit in offset binary is the opposite. Therefore you can look at the sign bits of the three values and determine immediately the representation that is in offset binary.
A few people got this much (which was the major thing I wanted you to get) but then couldn't covert an offset binary representation into the number it represents. Others wanted to blindly apply the the "invert then add" mantra to all three regardless of whether the value being represented was even known to be positive or negative. This is highly indicative of a "memorize formulas" approach to engineering which will not serve you well in the long run (or in the short run in this course).
Q38:
A few people showed no work and simply put down that the two values are swapped. Although I tend to question whether that indicates any actual understanding of what is going on verses a friend telling you that it reverses the numbers or seeing it on last semester's exam. However, I didn't ask you to show that it does what is claimed and therefore gave full credit for this answer. Over 40% of the class did not even attempt to answer the question - even though it was verbatim from the review sheet.
Q39:
This was intended to be an absolute "gimme" six points. It is verbatim off the review sheet and the base-16 math involved is very tame. For the most part this was the case although quite a few people completely ignored the "remainder" part of the answer and only gave the integer quotient.
Q40:
We walked through all six of these the class before the exam and I dropped a none-too-subtle hint that it would be on the exam. Most people took the hint, but a quarter of the class didn't and therefore didn't even attempt it. Those that did, did reasonably well.
#1: This question was worth 10 points. No other question was worth more than 6. You knew exactly what this question would be and how much it would be worth. I dropped a pretty strong hint that, if I were taking a test and knew that a specific question worth a full tenth of the points would be on the exam, I would walk in to the test and turn immediately to that problem knowing that I could answer it quickly and correctly and lock in those ten points. Yet less than half of the students even attempted this problem and only two people attempted all three parts.
#2: This was a question straight from the review sheet except using the exponential constant instead of pi. Originally this question was one of the Long Answer questions but I moved it as an additional extra credit problem to shorten the main part of the test since this question, even if you know exactly how to go about doing it, takes a while to crank through the math. I did not find it particularly surprising or telling that less than a quarter of the students attempted this problem. I did find it a bit troubling that only a single person's attempt actually showed any awareness of how floating point values are represented.