ICS-46: Data Structure Implementation and Analysis

In reverse-chronological order

#7: 10/16/17
Quiz #1 Graded
The TAs/Readers have graded (and I have recorded the grades for) Quiz #1. The class average was about 21 (or about 85%); the median was about 24 (or about 96%). There were about 59% As, 14% Bs, 10% Cs, and 18% Ds and Fs. Look at your returned work carefully; if your score was below 20 (which is 80%) you might want to review this quiz with me or a TA/Reader/Tutor. Material similar to this will be on the first written exam.

IMPORTANT: Always see a TA/Reader first for grading issues with Quizzes; only if the issue is unresolved should you contact me. This quarter Andrew Chio (email will be charge of running Googletests on quizzes and Programming Assignments. Contact him if there seems to be a problem. He will also be available in Common Labs 5 and 10 (Tuesday 10:00 am to 12:00pm; Wednesday 9:00 am - 11:00 am) in ICS2 100 (our common lab room). Bring your computer when you visit him and be prepared to download files he supplies and run them on your machine.

There are two files that you should download, unzip, and examine to understand you performance on this assignment and cumulative performance in this class. Each is sorted by Hashed ID (see Announcement #6 below).

  • The first file to examine stores the assignment grades, a zipped Excel file that details how each student was graded on this instrument: why points were deducted. Row 1 shows the number of points for each function. Each function has a GoogleTest, and the functions in Problem 1 have additional constraints (1a: 1 line, 1b: 2 lines). Rows 4 and beyond record the scores for students. Column C shows whether your code contained a compilation error: if we have to manually fix your code to compile it or complete its Googletest (e.g., infinite loop?) we will deduct points: here 1 point, with a comment describing the nature of the problem.
    There seemed to be about a dozen deductions for using constructs like std::atan2 instead of just atan2. Doing so forced Andrew's PC (running Clang C++; mine too) to fail compilation. I'm not sure whether this is a PC vs. Mac issue, or whether these students used a different compiler to work on their assignments and then never ensured their final code compiled/ran on Clang. If you had a deduction here, read the comment; if it related to this particular problem contact Andrew.

    Remember that in subsequent assignments, students using Macs should never access instance variables in deleted/deallocated objects. Although the Mac often allows such code to execute, the PC we use for grading most often terminates execution: C++ officially says this behavior is undefined.

    Columns D-L are blank if the function passed the GoogleTest and contain -1 if the function failed to pass the GoogleTest; for example, a -1 in column E deducts 2.5 (the value in Row 1 column E) points from the score. Columns M-N are blank if the function meets the constraint and contain -1 if the function did not meet the constraint. Columns O-Q contain the score, the score rounded to an integer (for entry into the gradebook file; see below), and the percentage of the recorded score.

  • The second file to examine is Grades(zipped .xlsm file) from the the index on the course web: it records all the grades for all the testing instruments that I assign over the quarter. It is sorted likewise by Hashed ID. You will notice that in the second spreadsheet all numbers are rounded up to integers: so receiving a 22.5 on the first spreadsheet will translate to a 23 on the second one. We will use this same process for recording all grades during the quarter.
Please download the Grades(zipped .xlsm file) from the course web and ensure that I have computed and entered your grade correctly (I'll be entering thousands of grades for students in my courses this quarter, so even if I'm 99% accurate, I'm likely to record some incorrect grades. Note that all grades are recorded as integral values: I always round up (e.g., a quiz score of 22.5 is recorded as 23).

If you believe that we recorded one or more answers incorrectly, please contact your TA/Reader first and tell him/her what you think the differences are. I recommend meeting person to person with the TA/Reader when they hold Common Lab hours: each holds 4 hours/week. Here are the grading assignments for this quiz. For correctness (Googletests: Columns C-L) contact Andrew. For line requirements (Columns K-L) use the following.

  • Last Names A-D: Charles
  • Last Names E-Li: Yu
  • Last Names Liu-P: Twaha
  • Last Names Q-U: Adrian
  • Last Names V-Z: Vikki
Such a discussion can have only positive outcomes: either he/she will agree with you that you deserve more credit (and, we do want you to receive all the credit that you are due), or you will come to understand the question, program, or solution better -and why it is incorrect. This is certainly a win-win situation.

Please read the solution and assignment grades spreadsheet carefully before contacting the TA/Reader and ensure you understand the correct answers. The TA/Reader will then re-examine issue, possibly asking you for more information if there is still confusion, or arranging to talk to you. If there is a difference, the TA/Reader will email me a revised summary about your program, and cc a copy to you. I will update the grades spreadsheet as appropriate (it might take a bit of time for all these events to cumulate in a changed grade). If you feel there is still a problem after talking to the TA/Reader, please contact me (but always contact the TA/Reader first). Also, because of the size of this class, if you have a grading issue, you must bring it to your TA's/Reader's attention within a week of when I return the materials.

If the average on any testing instrument is less than 75%, the column for that instrument will show the number of normalization points: the number of points that need to be added to each students score so that the instrument's average is 75%: these number of points are then added to the sum of the points for each student (in a later column) to compute their grade. This is the only curving I do in grading. On this testing instrument there were no normalization points, because the average was above 75%.

If you scored very low on this quiz, you should ask yourself whether you are properly prepared for this course (or whether it was lack or time, or some other issue that caused your poor performance). Possibly you barely passed ICS-45C, but really don't understand the material or how to program/debug as well as most of the other students; possibly you received credit through a Community College with a less rigorous C++ sequence; possibly it has been a long time since your last C++ course. I'm happy to talk to students who feel ill-prepared for this course and would like to explore their options.

#6: 9/28/17
ID Hashed
When we grade assignments, we often distribute/update various spreadsheets with the relevant grading information. These spreadsheets are indexed and sorted by each student's hashed ID. The course web-page has a Find ID Hashed (grade key) link, right below the Grades(zipped .xlsm file) link, which you can use to (or click Find ID Hashed). Use the result it shows when examining any spreadsheets of grades; I suggest that you find this number once, and write it down for future reference.

#5: 9/28/17
Submitting Code
without Losing Points
ICS-46 uses software that automatically grades most quizzes and programming assignments; it uses Googletest cases that we supply with the testing instruments that we distribute. You will learn about these tools in Programming Assignment #0. Here are a few hints to ensure that you will understand the grading process better and minimize your point loss.
  1. Ensure that you submit the code you wrote, not empty files nor the original files that you downloaded. Be very careful and double-check what you submit to avoid this mistake: if you are not sure that you submitted the correct code, resubmit it.

  2. If you are submitting with a partner, ensure that the Submitter and Partner lines of the program are correctly specified. The names must appear in the exact format required, with no misspellings nor punctuation errors. The student listed as Submitter must be the one who actually submits the code. See the Programming Assignments web page for the exact form required (and you must follow that exact form, with no misspelling nor punctuation errors).

  3. Ensure that you submit your code on time. We can, and mostly do, ignore work submitted after the deadline (even by a few minutes). It is a fairness issue for other students who do submit on time. The best strategy is to finish the work and submit it well before the deadline (and get extra credit points). To ensure that we will grade something, submit partially complete code ahead of the deadline; then, if you miss the deadline, we will still grade the partially complete code. Be warned: Checkmate can get bogged down if many students all try to submit a few minutes before the due time, so do not wait until the last minute to submit your code.

  4. Ensure that you test your code using the Googletests that we provide and use for grading. By using these self-checks, you will know when your code contains errors that will result in point deductions when we grade it.

  5. Ensure that your files...
    1. correctly: build without any compiler or linker errors using Clang C++.
    2. ...are "uncommented" (commented-out code will compile and link, but not run correctly).

    Any build errors, will cause all Googletests to fail during automatic grading. You must replace function/method bodies with code that compiles, even if it produces incorrect results when run.

After an assignment is graded automatically, the Announcement for it will contain a link to an Excel file that you can examine for detailed information about how your score was computed.

If this information does not match your expectations from running the assignment's self-checks while developing your code, contact your TA/Reader. It is best to meet with your TA/Reader during their common-lab hours: he/she can talk to you about your code and run it while you are present, to help resolve the difference. But, if we have to modify your code to grade it properly (see the typical source of problems above), we will deduct points. I hope that by students carefully writing/submitting their code, these grading anomalies and point deductions will be minimized during the quarter.

#4: 9/28/17
There are many ways to communicate with me (and other staff and students). Here is a quick overview.
  1. Email: If you send me email, please do it through your UCI email address. Include a well-thought Subject line. Also, please include your full name and the course (ICS-46). I teach many hundreds of students each quarter in multiple courses. Providing this information helps me quickly determine the context of your email, so I can better answer it. Finally, when I respond to your email, please do not send a "Thank you" acknowledgement. Such niceties are not necessary for work-related email. For me, it just increases the number of emails that I must read.

Note that for questions that are not specific to you -questions that are relevant to the entire class- it is best to ask them on the appropriate Message Board Forum.

  1. Message Board Forum: Post on the forum most closely related to your question. Include a well-thought Title line that clearly identifies the issue you are asking about; doing so helps me and other students who are deciding whether to read your message and the response(s). If you discover the solution to your own question, revisit the Forum and explain (without supplying code) any useful information that you learned that might help other students with the same problem. Avoid a post that says just, "Never mind: I figured it out myself."

  2. Course Email ( Mostly this is for me to use to communicate with all the students in the class. But, there are instances (very rarely) for students to use it: the best example is that if Checkmate appears to be down. Sending a Checkmate down email to this address tells me that it is down, and tells all the other students that (a) it is down and (b) I have been informed it is down. FYI, we rehosted Checkmate on a new computer a few quarters ago, and it is now much more reliable and rarely down.

#3: 9/28/17
Updated Software for
Fall 2017
The software that we are using this quarter (CLion and Clang C++) is being used for a third time in ICS-46. Over the break, I updated the documentation for downloading, installing, and using this software, and checked the courses libraries for it. Please bear with me as I correct any confusion/mistakes regarding this documentation and my course libraries; please let me know (the MessageBoard is best) about any problems you find.

#2: 9/28/17
Install Course Software
You may work on the assignments using any software development environment and C++ compiler, but the CLion IDE (using Clang C++) will be the official course software (and what the TAs will use to grade: your program must build (compile and link) and Run correctly using the Clang C++ compiler). You also have the option of using the command-line interface to use Clang C++. I recommend that you install and experiment with CLion/Clang C++ and become familiar with it during the first week of the quarter (see instructions below).

If you are using different software, you are responsible for ensuring that your system works with my download folders (for quizzes and programming assignments), course, library, and Googletest suites (see Programming Assignment #0), and that the programs you submit build and run correctly under Clang C++.

I suggest that all students download and install the Course Software on their machines: Cygwin (for PC users, to provide a Unix-like environment), CLion, and Clang C++ (along with the courselib and gtestlib libraries). All products are available for free on the internet. Students can view instructions for downloading and installing this software by following the Course Software link.

I expect students with computers to download and install their own software by the end of the first week of the quarter. If you are having difficulty with this task, the TAs and Lab Tutors will help you during the first Common Lab meeting (all students will be able to see staff at prearranged times, even though there is no formal lab to attend in this class), or beyond, if necessary: bring your computer to any of the common labs; if you have successfully downloaded and installed this software, please help other students do so too. Finally, you can also use the class MessageBoard Forums to ask questions about installing this software and help other students install it.

I strongly suggest that you BACKUP YOUR WORK daily: computers can malfunction, break, or be stolen.

#1: 9/28/17
First Message
Welcome to ICS-46. I am going to post and archive important messages about the class in this announcements web page: each entry will be numbered, dated, and labeled. The entries will appear in reverse chronological order. Whenever you follow the link to this page, scan its top for new announcements; scan downward for older announcements. This message will always appear at the bottom of this file. I will never remove a message from this page

I have already posted some important messages before the start of the quarter. Expect a few new messages to be posted here each week, mostly regarding returned and graded work.

Check this Announcements page, along with your email and the MessageBoard Forums, daily.