CSCI 241
Intermediate Programming in C++


Course Description

From the current Undergraduate Catalog:

241. INTERMEDIATE PROGRAMMING IN C++ (4). A second course in programming techniques with emphasis on design and implementation of data structures applied to large-scale projects. Topics include static and dynamic implementation of linear and nonlinear data structures, recursion, searching and sorting algorithms, and algorithmic complexity analysis. PRQ: CSCI 240 or consent of department.

General Policies and Procedures

Students are expected to read and observe the rules of this syllabus as well as the Other Academic Policies specified in the Undergraduate Catalog of Northern Illinois University.

Attendance Policy

Students are responsible for everything covered in class, including any modification of assignments or course requirements. If you should miss a class meeting, be sure to check the course notes linked on the Blackboard site for that week to see what you may have missed.


Recommended Materials

Note: This text book is recommended, but not required. You are welcome to use another book (or none at all) if you prefer.

Much of the content for the course can be found on the course web page. The Blackboard site will also have links to many of the course materials, organized on a week-by-week basis. Some material for the course, such as supplemental videos and the Grade-o-Matic auto-grader, will only be available through Blackboard.


Computing Account

Every student at Northern Illinois University has a computing account, generated when you first register at Northern Illinois University. It does not change. It is the letter 'z' followed by a six or seven digit number, and is usually referred to as a "z-number" or "z-ID".

If you know your z-ID from a previous semester, you can continue to use it. If you don't know your z-ID, you can call the IT Service Desk at 815-753-8100 for assistance.

If you have never used your account before, you can find the format of the initial default password posted on Blackboard.

You will need to know your z-ID by the end of the first week of classes.

A Password Reminder

All student account passwords for the NIU network are valid for only 365 days. (The z-ID remains unchanged.) If you have forgotten your password or it has expired and you have used up all of your grace logins, call the IT Service Desk at 815-753-8100.

Unix Computing Accounts

All students in this class should have a Unix computing account on one of the the machines called turing and hopper. Your login name for your Unix account is your z-ID (with a lower case 'z'). Note: The password on your Unix account is independent from the password on your standard NIU network account and must be changed separately. The default password for your Unix account can be found on Blackboard.

If you had an account in a previous semester, you should be able to log in normally. If you have not logged in before, you will need to create your Unix computing account. Details on how to do that can be found on the course website.


Grading Scheme

Your final grade will be based on the following: 20% for the programming assignments, 15% for lab / recitation projects, 15% for daily programming exercises, and 50% for exams (15% each for the two midterm exams and 20% for the final exam).

You must obtain a percentage of 60% overall on each of the programming assignment, lab / recitation project, daily programming exercise, and exam portions of the class in order to pass the course.

The grading scale used for this course is:

A B C D F
90-100% 80-90% 70-80% 60-70% 0-60%

Your final percentage will be rounded to two significant digits using standard rounding rules (for example, a grade of 89.5% will be rounded up to 90%).


Programming Assignments

There will be 18 programming assignments. Programs will be submitted to an automated grading system created by the Department of Computer Science that is accessible through Blackboard. This auto-grader (a.k.a. the "Grade-o-Matic") will perform all grading of your program's output. The source code and header files that you write will also need to be submitted on Blackboard so a TA can grade them for documentation and coding style.

Each assignment will have a certain number of software tests that it must pass in the Grade-o-Matic. The first test is always, "Did you submit the correct file(s) with the correct file names?" The second test is, "Did your code successfully build (i.e., compile and link)?" The remaining tests will run your code with various inputs and compare the output with the correct solution's output to see whether they match.

The score for the output portion of an assignment submission is typically computed as follows:

    output score = number of tests passed / number of tests for the project * number of possible output points

You may submit your code for output grading as many times as you like, up until the deadline. Your output score for the project will be the highest score achieved by any of your submissions.

The documentation and coding style portion of an assignment will be graded by one of the course teaching assistants. The TA will also provide feedback on those portions of the assignment grade in the Blackboard Grade Center. If, after reviewing the provided comments, you would like clarification about the feedback or grading please reach out by email to the TA who graded the assignment. If you feel an error was made in the grading of your assignment, you may email me and request a second evaluation of your work with the following guidelines: 1) Requests must be submitted within two class periods of having received your grade, and 2) Requests must be accompanied by a detailed explanation of why you feel the assigned grade does not accurately reflect the quality of your work.

All assignments are due at the date and time specified. The time a program was submitted is determined by when it is electronically received. Late assignments will not be accepted without prior permission from your instructor (and only due to extenuating circumstances) and will receive a grade of 0.

Once in the term, if needed, you may turn in an assignment up to 2 days (48 hours) late for full credit. In order to receive full credit on your assignment, you must notify me at least 24 hours prior to the original due date that you will be using your late-work-grace period. You do not need to provide a reason for using your grace period. You will also need to email me once you have actually submitted the assignment so that I can ensure that it is graded. This option will not be available on the final assignment, which is typically due on the last day of the semester.

If you feel you are unable to meet an assignment deadline due to extenuating circumstances, please contact me before the deadline.

Assignments are graded according to the following criteria: output 80%; documentation 10%; coding 10%. Output must be correct and in agreement with the specifications of the assignment. You will normally be required to match the solution output used by the Grade-o-Matic exactly, such that a comparison of your output and the correct output using the Unix diff command shows no differences (this is referred to as a "clean diff").

Coding is graded for completeness, correctness, and efficiency. Proper style is important, including blank lines and consistent use of indentation.

All source files and header files that you write for the programming assignments must be documented in accordance with the documentation standards linked to on the course web site. The documentation at the top of every source and header file you submit must contain the assignment name and your name and z-ID (as well as the name and z-ID of your programming partner, if you worked with one). Programs missing this information will be penalized points on the documentation portion of the assignment grade.

Pair Programming

Starting with Assignment 1, you and a partner of your choosing from the same section may work together to complete the programming assignments for the course.

Both partner names and z-numbers must be on every source code and header file that is submitted. Both people in the pair needs to submit the assignment to the auto-grader and on Blackboard. If one person submits the assignment late, they will not receive credit.

The idea behind allowing collaboration on assignments is to help you build programming skills along with another student/classmate. Don't try to just find someone to do your homework for you. This should be a give and take of ideas on how to go about coding a C++ program to solve the problems that are presented in the assignments. It should be a learning experience for both people in the pairing.

If you copy someone's code without their permission, you are engaging in plagiarism and there will be an appropriate penalty.

You may not collaborate in any way on the exams given in class. Likewise, you are expected to work on the daily programming exercises alone. If you do not do your own work on an exam or daily programming exercise, at a minimum, the penalty will be a zero on the exam or exercise and a reduction of your final letter grade by one letter. There is also the chance of other penalties as determined by the Student Conduct office.


Lab / Recitation Projects

Working as part of a team is a common requirement in the IT industry. It is also very common for interviewers to ask prospective employees about their experiences working in groups. To that end, this course attempts to provide you with some experience working together with other students to complete group lab projects.

CSCI 241 has weekly recitation meetings. At those weekly meetings, you will be asked to work as part of a small group (typically 2-4 people) to complete a short lab project. The lab project will be submitted to and graded entirely by the Grade-o-Matic. Documentation is not required for these lab projects.

The score for a submission is computed as follows:

    submission score = number of tests passed / number of tests for the project * 100

You may submit your code as many times as you like, up until the deadline. Your score for the project will be the highest score achieved by any of your submissions.

Your percentage for the lab project portion of the course is the sum of your project scores divided by the number of lab projects. As mentioned previously, you must obtain a percentage of at least 60% on the lab project portion of the course in order to pass the class.

Recitation attendance is mandatory. Put simply, if you did not attend a recitation, you did not get the group work experience that was intended. You are allowed two unexcused absences from recitation for the semester. After that, if you are absent from recitation without an excuse, you will not receive credit for that week's recitation project, regardless of whether or not you submitted it. If you have a genuine emergency that will prevent you from attending a lab recitation, please contact me so arrangements can be made that will not penalize your lab project percentage for missing the recitation.


Daily Programming Exercises

Another common feature of the IT industry is coding interviews. A typical coding interview will ask a candidate to solve a problem in a limited amount of time. Sometimes, the only resource that you will be allowed to use in solving the problem is a whiteboard and a marker.

In an effort to prepare students for this experience, you will be asked to complete 3 to 4 short daily programming exercises each week. These exercises resemble the kind of problems posed at coding interviews. The daily programming exercises are submitted and graded in a fashion similar to the lab projects (as described above). As with the lab projects, no documentation is required.

Your percentage for the daily programming exercise portion of the course is computed in the same fashion as described above for the lab projects. As mentioned previously, you must obtain a percentage of at least 60% on the daily programming exercise portion of the course in order to pass the class.

The daily programming exercises are an essential tool in developing each student's ability to program. As such, the daily programming exercises are to be completed by each student as an individual effort. Stated simply, take care to read each assignment and complete it exclusively on your own. Asking for assistance from the instructor or a TA is permitted. Evidence of collaborating with others, searching the internet, etc., however, will be considered academic misconduct and will be treated as such.

Daily programming exercises for a given week are typically released at the beginning of the week and due at the end of the week, in order to give students maximum flexibility in when they choose to work on them. There will be no extensions on the deadline. If you have an emergency that will prevent you from completing one or more of the daily programming exercises for the week, please contact me so arrangements can be made that will not penalize your percentage on that portion of the course.


Exams

There will be two midterm exams and a final exam. Exams may be administered in class or through Blackboard. Exams must be taken at the scheduled time unless other arrangements have been made with your instructor before the exam time.

Final Exam

There will be a final exam administered at the date and time specified in the Spring 2023 Standard Exams Schedule, based on the meeting time for your section. The date of the final exam for your section can also be found on the course website and will be posted on Blackboard in advance of the exam. No rescheduling of the final exam will be permitted except in accordance with University policy when a student has more than two exams on the same day. If you find yourself in such a situation, contact your instructor. Check your final exam schedule at the beginning of the semester.

If you are unable to make an exam due to illness or another emergency, you should make every effort to contact your instructor before the exam.


Getting Help

Your TA(s) and the professor are here to help you understand the course concepts. If you have problems understanding an assignment, questions about grading, etc. seek help.

We expect you to have tried to solve your own problems. Seeking help from a TA or instructor is much more effective if you can explain what you did that didn't work. Don't expect us to give you the complete solution to your problem. Often we will only tell you where to look to solve your own problem.

One of the best ways to help yourself is to start early on the assignments. Programming is not just typing, compiling, and running. Programming involves study of the problem and planning. Some of the most important steps in programming are off-line. The sooner you begin, the better.

Your TA(s) and instructor also take email inquiries. Typical response time is 24 hours, but this is not guaranteed (nights and weekends not counted). Students are encouraged to make use of scheduled office hours whenever possible and to ask questions ahead of assignment deadlines.


Accessibility Statement

If you need an accommodation for this class, please contact the Disability Resource Center as soon as possible. The DRC coordinates accommodations for students with disabilities. It is located in Suite 180 of the Campus Life Building, and can be reached at 815-753-1303 or drc@niu.edu.

Also, please contact me privately as soon as possible so we can discuss your accommodations. Please note that you will not be required to disclose your disability, only your accommodations. The sooner you let me know your needs, the sooner I can assist you in achieving your learning goals in this course. As per DRC policy, your accommodations will take effect after I have received the paperwork and you have discussed your accommodation with me.


Academic Integrity Statement

Good academic work must be based on honesty. The attempt of any student to present as their own work that which they have not produced is regarded by the faculty and administration as a serious offense. Students are considered to have cheated if they copy the work of another during an examination or turn in an assignment written, in whole or in part, by someone else. Students are guilty of plagiarism, intentional or not, if they copy material from books, magazines, or other sources without identifying and acknowledging those sources or if they paraphrase ideas from such sources without acknowledging them. Students guilty of, or assisting others in, either cheating or plagiarism on an assignment, quiz, or examination may receive a grade of F for the course involved and may be suspended or dismissed from the university.

Both "loaning" material to and "borrowing" material from a fellow student are considered cheating for certain portions of this course. Outside of your programming partner or members of a group working on a lab recitation project, any assistance needed should be sought from a CSCI 241 teaching assistant or instructor.

For purposes of this class, using AI software such as ChatGPT, Google Bard, Github Copilot, Cody AI, etc. to write some (or all) of your code is also considered cheating.

Likewise, willful and malicious attempts to sabotage program submission or automated grading systems will be considered academic misconduct and will be treated accordingly.

Academic misconduct most often occurs because students become overwhelmed and desperate. If you are concerned about how you are doing in this course, please speak with your instructor instead of considering academic misconduct. You are very capable of meeting the expectations for this course.