diff --git a/php/academic_integrity.php b/php/academic_integrity.php new file mode 100755 index 0000000..e390b3e --- /dev/null +++ b/php/academic_integrity.php @@ -0,0 +1,297 @@ + + + + + + + +

+ +Important: Please read the following statement thoroughly. +
+If you +have any questions, contact the instructor or the TAs immediately. +
+

+ +

+ + Complete the short online quiz about the + +Syllabus and Collaboration Policy'; + } else { + print 'Syllabus and Collaboration Policy'; + } +?> +
before starting the first homework. +
+

+ + +

Collaboration Policy & Academic Integrity

+ +

Lecture Participation Polls

+ +

+Responses to lecture participation polls will be used to earn incentives +for the Data Structures course. Discussion of collaborative lecture participation polls +with those seated around you is encouraged. +However, if we find anyone submitting answers for or using the account of +another individual, we will zero the lecture participation points of all involved students +and report the incident to the Dean of Students. +

+ + +

Academic Integrity for Tests and Final Exam

+ +

+The tests and final exam for this course will be completed +individually. Copying, communicating, or using disallowed materials +during a test is cheating, of course. Students caught cheating on a +test will receive an F in the course and will be reported to the Dean +of Students for further disciplinary action. +

+ +

Collaboration Policy for Programming Labs

+ +

+Collaboration is encouraged during the weekly programming labs. +Students are allowed to talk through and assist each other with these +programming exercises. Students may ask for help from each other, the +graduate lab TA, and undergraduate programming mentors. But each +student must write up and debug their own lab solutions on their own +laptop and be prepared to individually present and discuss this work +with the TA to receive credit for each checkpoint. +

+ +

+As a general guideline, students may look over each other's shoulders +at their labmate's laptop screen during lab — this is the best +way to learn about IDEs, code development strategies, testing, and +debugging. However, looking should not lead to line-by-line copying. +Furthermore, each student should retain control of their own keyboard. +While being assisted by a classmate or a TA, the student should remain +fully engaged on problem solving and ask plenty of questions. +Finally, other than the specific files provided by the instructor, +electronic files or file excerpts should not be shared or copied (by +email, text, Dropbox, GitHub, or any other means). +

+ + +

Homework Collaboration Policy

+ +

+Academic integrity is a complicated issue for individual programming +assignments, but one we take very seriously. Students naturally want +to work together, and it is clear they learn a great deal by doing so. +Getting help is often the best way to interpret error messages and +find bugs, even for experienced programmers. Furthermore, in-depth +discussions about problem solving, algorithms, and code efficiency are +invaluable and make us all better software engineers. In response to +this, the following rules will be enforced for programming +assignments: +

+ + + + + +

Homework Plagiarism Detection and Academic Dishonesty Penalty

+ +

+We use an automatic code comparison tool to help spot homework +assignments that have been submitted in violation of these rules. The +tool takes all assignments from all sections and all prior terms and +compares them, highlighting regions of the code that are similar. The +plagiarism tool looks at core code structure and is not fooled by +variable and function name changes or addition of comments and +whitespace. +

+ +

+The instructor checks flagged pairs of assignments very carefully, to +determine which students may have violated the rules of collaboration +and academic integrity on programming assignments. When the +instructor believes that an incident of academic dishonesty has +occurred, the involved students are contacted and a meeting is +scheduled. All students caught cheating on a programming assignment +(both the copier and the provider) will be punished. For +undergraduate students, the standard punishment for the first offense +is a 0 on the assignment and a full letter grade reduction on the +final semester grade. Furthermore, students with academic integrity +violations will lose all late days and may not earn additional late +days or early submission assignment extension incentives for future +assignments. Students whose violations are more flagrant will +receive a higher penalty. Undergraduate students caught a second time +will receive an immediate F in the course, regardless of +circumstances. Each incident will be reported to the Dean of +Students. +

+ +

+ +Graduate students found to be in violation of the academic integrity +policy for homework assignments on the first offense will receive an F +in the course and will be reported both to the Dean of Students and to +the chair of their home department with the strong advisement that +they be ineligible to serve as a teaching assistant for any other +course at RPI. +

+ +

+You are not allowed to publicly post or privately share your Data +Structures code even after you complete the course. If code from +students is ever found in a public repository (e.g., GitHub) or other +online source or if that code matches the code submission of another +student in a later term, all involved students will be reported to the +Dean of Students and the Computer Science Department Head -- even if +they are not currently registered for Data Structures, or not +currently enrolled at RPI, or have graduated from RPI. The instructor +may file a retroactive change of semester grade with the registrar for +the Data Structures course. The instructor may also submit a takedown +notice and violation of terms of service or copyright to the website +host of the public repository. The students will also forfeit any +opportunity for a positive reference or recommendation letter from the +instructor. +

+ + +

Academic Dishonesty in the Student Handbook

+ +

+ Refer to the + + The Rensselaer Handbook of Student Rights and Responsibilities +for further discussion of academic dishonesty. Note that: "Students +found in violation of the academic dishonesty policy are prohibited +from dropping the course in order to avoid the academic penalty." +

+ +

Number of Students Found in Violation of the Policy

+ +

+Historically, 5-10% of students are found to be in violation of the +academic dishonesty policy each semester. Many of these students +immediately admit to falling behind with the coursework and violating +one or more of the rules above and if it is a minor first-time offense +may receive a reduced penalty. +

+ + diff --git a/php/advice_F11.php b/php/advice_F11.php new file mode 100755 index 0000000..0ea9fb3 --- /dev/null +++ b/php/advice_F11.php @@ -0,0 +1,230 @@ + + + + + + + + + +
+ + + +

+ +On the Fall 2011 Course Evaluations we asked:

+"What advice would you give a friend who +is considering taking this class?
+What are the necessary +prerequisites, co-requisites, or prior experience?
+What should you do +to succeed?"
+
+

+
+ + + + + diff --git a/php/advice_S14.php b/php/advice_S14.php new file mode 100755 index 0000000..1bedaab --- /dev/null +++ b/php/advice_S14.php @@ -0,0 +1,293 @@ + + + + + + + + + +
+ + +

Prior programming experience, knowing C++

+ + + +

Who should take this course

+ + + +

Time commitment

+ + + +

General advice

+ + + +

Lecture advice

+ + + +

Lab advice

+ + + +

Homework advice, starting early

+ + + +

Homework advice, late days

+ + + +

General homework advice

+ + + +

Office hours/ALAC

+ + + +

Test preparation

+ + + + +

What resources did you find most helpful in learning the course material? (130 total responses)

+ + + +

 

+ +

+See also:
+ +Advice from Fall 2011 CSCI 1200 Data Structures students +

+ + + + + diff --git a/php/advice_TAs.php b/php/advice_TAs.php new file mode 100755 index 0000000..73ba7ef --- /dev/null +++ b/php/advice_TAs.php @@ -0,0 +1,128 @@ + + + + + + + + + +
+ + + + + + +

+ + + + diff --git a/php/calendar_data.php b/php/calendar_data.php new file mode 100755 index 0000000..8fe213e --- /dev/null +++ b/php/calendar_data.php @@ -0,0 +1,1069 @@ + "2023 01 05 00 00") return TRUE; + if ($which == 2 && $current_day > "2023 01 12 12 00") return TRUE; + if ($which == 3 && $current_day > "2023 01 16 12 00") return TRUE; + if ($which == 4 && $current_day > "2023 01 19 11 00") return TRUE; + if ($which == 5 && $current_day > "2023 01 23 11 00") return TRUE; + if ($which == 6 && $current_day > "2023 01 26 11 00") return TRUE; + if ($which == 7 && $current_day > "2023 01 30 11 00") return TRUE; + if ($which == 8 && $current_day > "2023 02 02 11 00") return TRUE; + if ($which == 9 && $current_day > "2023 02 06 11 00") return TRUE; + if ($which == 10 && $current_day > "2023 02 09 11 00") return TRUE; + if ($which == 11 && $current_day > "2023 02 13 11 00") return TRUE; + if ($which == 12 && $current_day > "2023 02 16 11 00") return TRUE; + if ($which == 13 && $current_day > "2023 02 23 11 00") return TRUE; + if ($which == 14 && $current_day > "2023 02 27 11 00") return TRUE; +/* +Probably cancel Problem Solving 2, which will make Operators lec 14, and then +leaves us free to not hold lecture on March 3rd (Friday before spring break). +Students like this (good for semester performance review), and lets us grade +Exam 2 a little more quickly, which is good since we're up against the drop +deadline. If we DON'T do this, need to add a new statement + if ($which == 15 && $current_day > "2023 03 02 12 00") return TRUE; +and renumber everything below 16....28 +*/ + if ($which == 15 && $current_day > "2023 03 13 11 00") return TRUE; + if ($which == 16 && $current_day > "2023 03 16 11 00") return TRUE; + if ($which == 17 && $current_day > "2023 03 20 11 00") return TRUE; + if ($which == 18 && $current_day > "2023 03 23 11 00") return TRUE; + if ($which == 19 && $current_day > "2023 03 27 11 00") return TRUE; + if ($which == 20 && $current_day > "2023 03 30 11 00") return TRUE; + if ($which == 21 && $current_day > "2023 04 03 11 00") return TRUE; + if ($which == 22 && $current_day > "2023 04 06 11 00") return TRUE; + if ($which == 23 && $current_day > "2023 04 10 11 00") return TRUE; + if ($which == 24 && $current_day > "2023 04 13 11 00") return TRUE; + if ($which == 25 && $current_day > "2023 04 17 11 00") return TRUE; + if ($which == 26 && $current_day > "2023 04 20 11 00") return TRUE; + if ($which == 27 && $current_day > "2023 04 24 11 00") return TRUE; + //if ($which == 26 && $current_day > "2022 04 29 12 00") return TRUE; + return FALSE; +} + +function lecturenotesreleased($which) +{ + + // ------------------------------------- + // END OF TERM, REMOVE ALL ADDITIONAL LECTURE MATERIALS +// return false; + // ------------------------------------- + + //if ($which <= 28) return TRUE; return FALSE; + return lecturereleased($which); +} + + +function labreleased($which) +{ + + // ------------------------------------- + // END OF TERM, LEAVE ALL LAB MATERIALS + // ------------------------------------- + + $current_day = date('Y m d H i'); + // YYYY MM DD HH minutes + if ($which == 1 && $current_day > "2023 01 10 16 00") return TRUE; + if ($which == 2 && $current_day > "2023 01 17 16 00") return TRUE; + if ($which == 3 && $current_day > "2023 01 24 16 00") return TRUE; + if ($which == 4 && $current_day > "2023 01 31 16 00") return TRUE; + if ($which == 5 && $current_day > "2023 02 07 16 00") return TRUE; + if ($which == 6 && $current_day > "2023 02 14 16 00") return TRUE; + if ($which == 7 && $current_day > "2023 02 21 16 00") return TRUE; + if ($which == 8 && $current_day > "2023 02 28 16 00") return TRUE; + if ($which == 9 && $current_day > "2023 03 14 16 00") return TRUE; + if ($which == 10 && $current_day > "2023 03 28 16 00") return TRUE; + if ($which == 11 && $current_day > "2023 04 04 16 00") return TRUE; + if ($which == 12 && $current_day > "2023 04 11 16 00") return TRUE; + if ($which == 13 && $current_day > "2023 04 17 16 00") return TRUE; + if ($which == 14 && $current_day > "2023 04 25 16 00") return TRUE; + return FALSE; +} + +function labsolutionsreleased($which) +{ + // ------------------------------------- + // END OF TERM, REMOVE ALL LAB SOLUTIONS + return false; + // ------------------------------------- + + if ($which <= 0) return TRUE; + return FALSE; +} + + +function homeworkreleased($which) +{ + + // ------------------------------------- + // END OF TERM, LEAVE ALL HOMEWORK ASSIGNMENTS + // ------------------------------------- + + $current_day = date('Y m d H i'); +// print "THING ".$which." ".$current_day; + + if ($which == 1 && $current_day > "2023 01 13 10 00") return TRUE; + if ($which == 2 && $current_day > "2023 01 20 10 00") return TRUE; + if ($which == 3 && $current_day > "2023 02 03 10 00") return TRUE; + if ($which == 4 && $current_day > "2023 02 10 10 00") return TRUE; + if ($which == 5 && $current_day > "2023 02 17 10 00") return TRUE; + if ($which == 6 && $current_day > "2023 03 03 10 00") return TRUE; + if ($which == 7 && $current_day > "2023 03 17 10 00") return TRUE; + if ($which == 8 && $current_day > "2023 03 24 10 00") return TRUE; + if ($which == 9 && $current_day > "2023 04 07 10 00") return TRUE; + if ($which == 10 && $current_day > "2023 04 14 10 00") return TRUE; + + return false; + +} + +function homeworksolutionsreleased($which) +{ + + if ($which <= 0) return TRUE; + return FALSE; +} + + +function reviewproblemsreleased($which) +{ + + // ------------------------------------- + // END OF TERM, REMOVE ALL TEST REVIEW MATERIALS +// return false; + // ------------------------------------- + + $current_day = date('Y m d H i'); +// print "THING ".$which." ".$current_day; + + if ($which == 1 && $current_day > "2023 01 27 10 00") return TRUE; + if ($which == 2 && $current_day > "2023 02 24 10 00") return TRUE; + if ($which == 3 && $current_day > "2023 03 31 10 00") return TRUE; + if ($which == 4 && $current_day > "2023 04 21 10 00") return TRUE; + +// if ($which <= 4) return TRUE; return FALSE; + return false; +} + + +/* +We don't usually make use of this anymore, because we just post the review +solutions on Submitty under Course Materials. +*/ +function reviewsolutionsreleased($which) +{ + + // ------------------------------------- + // END OF TERM, REMOVE ALL TEST REVIEW MATERIALS + return false; + // ------------------------------------- + + if ($which <= 4) return TRUE; + return FALSE; +} + +/* +We don't usually make use of this anymore, because we just post the test +solutions on Submitty under Course Materials. +*/ +function testsolutionsreleased($which) +{ + + // ------------------------------------- + // END OF TERM, REMOVE ALL TEST REVIEW MATERIALS + return false; + // ------------------------------------- + + if ($which <= 3) return TRUE; + return FALSE; +} + + +/*****************************************************************/ + +function makelink($directory, $file, $text = "", $note = "") +{ + if (isset($text) && $text != "") { + if (isset($note)) { + print '' . $text . ' ' . $note . '
'; + } else { + print '' . $text . '
'; + } + } else if (isset($text) && $text == "") { + if (isset($note)) { + print '' . $file . ' ' . $note . '
'; + } else { + print '' . $file . '
'; + } + } else { + print '' . $file . '
'; + } +} + + +function makelink2($link, $text) +{ + print '' . $text . '
'; +} + +function video($link, $text) +{ + print ""; + /*if ($link == "") { + print '
live ' . $text . '
'; + } else { + print '
 ' . $text . '
'; + }*/ +} + +function old_video($link, $text) +{ + //print ""; + print '
 2020 ' . $text . ''; +} + +/*****************************************************************/ +/*****************************************************************/ +/*****************************************************************/ + + +function lecturename($which) +{ + //if ($which == 1) return "Introduction to C++"; //
& Install Fest"; + if ($which == 1) return "Introduction to C++ & Strings"; + else if ($which == 2) return "Strings & Vectors"; + else if ($which == 3) return "C++ Classes, part 1"; + else if ($which == 4) return "C++ Classes, part 2"; + else if ($which == 5) return "Pointers and Arrays"; + else if ($which == 6) return "Dynamic Memory"; + else if ($which == 7) return "Big O Notation & Basic Recursion"; + else if ($which == 8) return "Vector Implementation"; + else if ($which == 9) return "Iterators & STL Lists"; + else if ($which == 10) return "Iterators & Linked Lists"; + else if ($which == 11) return "Doubly Linked Lists & List Implementation"; + else if ($which == 12) return "Advanced Recursion"; + else if ($which == 13) return "Problem Solving, part 1"; + //else if ($which == 14) return "Problem Solving, part 2"; + else if ($which == 14) return "Operators"; + else if ($which == 15) return "Associative Containers, part 1"; + else if ($which == 16) return "Associative Containers, part 2"; + else if ($which == 17) return "Trees, part 1"; + else if ($which == 18) return "Trees, part 2"; + else if ($which == 19) return "Trees, part 3"; + //else if ($which == 21) return "Trees, part 4"; + else if ($which == 20) return "Hash Tables, part 1"; + else if ($which == 21) return "Hash Tables, part 2"; + else if ($which == 22) return "Priority Queues"; + else if ($which == 23) return "Hybrid / Variant Data Structures"; + else if ($which == 24) return "C++ Exceptions"; + else if ($which == 25) return "Garbage Collection & Smart Pointers"; + else if ($which == 26) return "Inheritance & Polymorphism"; + else if ($which == 27) return "Concurrency & Asynchronous Computing"; + else return "UNKNOWN LECTURE " . $which; +} + + +function lectureurl($which) +{ + if ($which == 1) return "lectures/01_introduction.pdf"; + else if ($which == 2) return "lectures/02_strings_vectors.pdf"; + else if ($which == 3) return "lectures/03_classes_I.pdf"; + else if ($which == 4) return "lectures/04_classes_II.pdf"; + else if ($which == 5) return "lectures/05_pointers.pdf"; + else if ($which == 6) return "lectures/06_memory.pdf"; + else if ($which == 7) return "lectures/07_order_notation_recursion.pdf"; + else if ($which == 8) return "lectures/08_vector_implementation.pdf"; + else if ($which == 9) return "lectures/09_lists_and_iterators.pdf"; + else if ($which == 10) return "lectures/10_linked_lists.pdf"; + else if ($which == 11) return "lectures/11_list_implementation.pdf"; + else if ($which == 12) return "lectures/12_advanced_recursion.pdf"; + else if ($which == 13) return "lectures/13_problem_solving_I.pdf"; + //else if ($which == 14) return "lectures/14_problem_solving_II.pdf"; + else if ($which == 14) return "lectures/14_operators.pdf"; + else if ($which == 15) return "lectures/15_maps_I.pdf"; + else if ($which == 16) return "lectures/16_maps_II.pdf"; + else if ($which == 17) return "lectures/17_trees_I.pdf"; + else if ($which == 18) return "lectures/18_trees_II.pdf"; + else if ($which == 19) return "lectures/19_trees_III.pdf"; + //else if ($which == 21) return "lectures/21_trees_IV.pdf"; + else if ($which == 20) return "lectures/20_hash_tables_I.pdf"; + else if ($which == 21) return "lectures/21_hash_tables_II_priority_queues_I.pdf"; + else if ($which == 22) return "lectures/22_priority_queues_II.pdf"; + else if ($which == 23) return "lectures/23_hybrid_data_structures.pdf"; + else if ($which == 24) return "lectures/24_exceptions.pdf"; + else if ($which == 25) return "lectures/25_garbage_collection.pdf"; + else if ($which == 26) return "lectures/26_inheritance.pdf"; + else if ($which == 27) return "lectures/27_concurrency.pdf"; + + else return "UNKNOWN LECTURE " . $which; +} + + +function makelecturehelper($which) +{ + if (lecturereleased($which)) { + print ''; + } + print 'Lecture ' . $which . ':
' . lecturename($which); + if (lecturereleased($which)) { + print '
'; + } + + if (lecturenotesreleased($which)) { + print '

'; + if ($which == 1) { + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/2c4c8d17c3044705aed620191c14a7741d", "Lecture 1 (Covers our Lec 1 & 2)"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/2b0f98a358ba4b3493b7af1c07ed72ad1d", "FALL 2020 (be careful!) Syllabus Q&A"); + } else if ($which == 2) { + makelink("lectures/", "framed_diagonal.cpp"); + } else if ($which == 3) { + makelink("lectures/", "date_main.cpp"); + makelink("lectures/", "date.h"); + makelink("lectures/", "date.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/0a852d9f558b4996ae68e3a1a13301b01d", "Lecture 2 (Our Lec 3)"); + //old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/392d5e6aacdc4634a7122775e6dfcb3e1d", "Fall 2020 FAQ and Q&A"); + } else if ($which == 4) { + makelink("lectures/", "students.txt"); + makelink("lectures/", "student.h"); + makelink("lectures/", "student.cpp"); + makelink("lectures/", "student_main.cpp"); + makelink("lectures/", "stats.h"); + makelink("lectures/", "stats.cpp"); + makelink("lectures/", "name.h", ""); + makelink("lectures/", "name.cpp", ""); + makelink("lectures/", "name_main.cpp"); + makelink("lectures/", "assert_demo.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/0e7d75f3f21f4385a8933a0c3617bb071d", "Lecture 3 (Our Lec 4)"); + + } else if ($which == 5) { + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/842f2171ae6f4e72930f9caca7a5b6a41d", "Lecture 4A: Pointers"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/9033565fcc2c4cf387d17efe51894ad41d", "Lecture 4B: Pointer Arithmetic & Arrays"); + } else if ($which == 6) { + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/7f650508d4274b8db1f114f3e8e4afe01d", "Lecture 5A: Dynamic Memory Intro"); + old_video("https://mediasite.mms.rpi.edu/mediasite/Channel/rpi_csci_1200_data_structures/watch/f1e2518ed2b0473b992550a01643cc141d", "Lecture 5B: Dynamic Memory Examples"); + print("
"); + makelink("lectures/", "f23_scrap.cpp", "DCC 308 notes"); + } else if ($which == 7) { + //makelink("lectures/", "buggy.cpp"); + + //After lecture + /* + makelink("lectures/", "binsearch.cpp"); + */ + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/80abdcccee834d0ba4a5ed6af952325a1d", "Lecture 7A: Algorithm Analysis Introduction"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/ec256d8a7750496ca66db24002df08681d", "Lecture 7B: Basic Recursion (we may finish in Lecture 12)"); + } else if ($which == 8) { + makelink("lectures/", "vec.h"); + makelink("lectures/", "vec_xiao.h"); + makelink("lectures/", "vec_main.cpp"); + //After lecture + //makelink("lectures/", "vec_sol.h"); //Includes erase(), but we aren't writing erase() during lab 5 anyway. + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/2374e7449a5542ffb05ee2fad637c8251d", "Lecture 6A: Vec Implementation"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/9996be03deef4425a70bb551207b1a9c1d", "Lecture 6B: Vec Implementation"); + + } else if ($which == 9) { + makelink("lectures/", "classlist_ORIGINAL.cpp"); + makelink("lectures/", "data.txt"); + //After lecture + //makelink("lectures/", "classlist_ITER.cpp"); + //makelink("lectures/", "classlist_LIST.cpp"); + //makelink("lectures/","lec_9_notes.cpp"); // Uncomment after Lec 10 release + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/6087b00fdd544f3aab2872837841021e1d", "Lecture 8A: Iterator & STL List"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/44411e37d1314b6ba8c78652b84871481d", "Lecture 8B: Example of List & Iterator"); + + } else if ($which == 10) { + //makelink("lectures/", "lec10_ex.cpp"); + //After lecture + /* + makelink("lectures/", "lec10_ex_more.cpp"); + */ + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/49b8d53093394e079da084f5aaf577851d", "Lecture 9A: Iterators continued"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/4af59ddcde814a16bb6263758df1b4251d", "Lecture 9B: Singly-Linked Lists"); + + } else if ($which == 11) { + makelink("lectures/", "dslist_handout.h"); + //After lecture + + makelink("lectures/", "list.h"); + makelink("lectures/", "list_main.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/839a5040044148f29f1028835826f2b91d", "Lecture 10A: doubly-linked lists"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/a3dbd287b2f74f6785aae622726a4e671d", "Lecture 10B: dslist implementation"); + } else if ($which == 12) { + makelink("lectures/", "letters.txt"); + //After lecture + //makelink("lectures/", "binsearch.cpp", "", "Same as Lecture 7 version"); + makelink("lectures/", "binsearch.cpp"); + makelink("lectures/", "merge_sol.cpp"); + makelink("lectures/", "word_search_sol.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/0e73374e45c64b06867335f09518683b1d", "Lecture 11: Advanced Recursion"); + } else if ($which == 13) { + //makelink2("https://www.cs.rpi.edu/academics/courses/fall20/csci1200/lectures/13_problem_solving_II.pdf","Fall 2020 Problem Solving Part 2 PDF"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/33f5f84ee8e946e49cce016a491105941d","Lecture 12: Problem Solving I"); + //old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/de9be8276d864731a8cc7ac8b65262741d","Lecture 13: Problem Solving II"); + } else if ($which == 14) { + makelink("lectures/", "complex_lec.cpp"); + makelink("lectures/", "complex_lec.h"); + //After lecture + makelink("lectures/","concatenation_array.cpp"); + //makelink("lectures/","merge_intervals.cpp"); + makelink("lectures/","boomerang.cpp"); + makelink("lectures/","square.cpp"); + //makelink("lectures/","complex_soln.cpp"); + //makelink("lectures/","complex_soln.h"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/e1d3346022214c908bcd0302ce5c085d1d", "Lecture 14: Operators & Friends"); + } else if ($which == 15) { + makelink("lectures/", "word_count.cpp"); + + //After lecture + makelink("lectures/","search_demo.cpp"); + //makelink("lectures/","word_count_sol.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/7e617cf2376840fcb08b1baaab5ff8d11d", "Lecture 15: Maps, part 1"); + } else if ($which == 16) { + makelink("lectures/","stl_sets.pdf","stl_sets.pdf","For HW7"); + //After lecture + makelink("lectures/","two_sum.cpp"); + makelink("lectures/","word_pattern.cpp"); + //makelink("lectures/","odd_count.cpp"); + makelink("lectures/","coursegrades.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/f6640d49157046eea1b391e4d16f364f1d", "Lecture 16: Maps, part 2"); + } else if ($which == 17) { + makelink("lectures/", "ds_set_starter.h"); ///Before lecture + //After lecture + makelink("lectures/","ds_set_lec17.h"); ///After lecture + makelink("lectures/","lec17_exercises.cpp"); ///After lecture + makelink("lectures/","unique_occurences.cpp"); ///After lecture + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/c90d9578adc54db0b93f914275c7af4a1d", "Lecture 17: Trees, part 1"); + + //print("

(Optional) Old Bonus Lecture
"); + //makelink2("https://www.cs.rpi.edu/academics/courses/fall21/csci1200/lectures/drmemoryuncovered.pdf", "Dr Memory Slides"); + //old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/efe35ac83339417a9a49126b9528b0061d", "Dr. Memory Uncovered"); + } else if ($which == 18) { + makelink("lectures/", "ds_set_lec18_starter.h"); ///Before lecture + makelink("lectures/","ds_set_lec18_moresoln.h"); //After lecture + makelink("lectures/","bst_search.cpp"); //After lecture + makelink("lectures/","bst_insert.cpp"); //After lecture + //makelink("lectures/","lec18_split_solutions.pdf"); //After lecture + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/3105f1fe8fc6402b8a95e959a17c61511d", "Lecture 18: Trees, part 2 (Our Lec 18)"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/bfeaa816db6c40f29b5938b1fe68b0791d", "Lecture 19: Trees, part 3 (also Our Lec 18)"); + print("
"); + print("
"); + makelink("", "https://mediasite.mms.rpi.edu/mediasite/Play/e159b3c64b8047618fdefa9c4d489fd81d", "HW8 Meeting Recording"); + } else if ($which == 19) { + //After lecture + makelink("lectures/","ds_set_soln.h"); ///After lecture + makelink("lectures/","breadth_first_search.cpp"); ///After lecture + makelink("lectures/","erase_node.cpp"); ///After lecture + makelink("lectures/","height.cpp"); ///After lecture + makelink("lectures/","shortest_path.cpp"); ///After lecture + //makelink("lectures/","ds_set_soln.h"); ///After lecture + //makelink("lectures/","lec19_ex1.cpp"); ///After lecture + //makelink("lectures/","lec19_ex2.cpp"); ///After lecture + //makelink("lectures/","bfs_code.cpp"); ///After lecture + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/65124520994a41e288a3eb23e214f8791d", "Lecture 20: Trees, part 4 (Our Lec 19)"); + } else if ($which == 20) { + makelink("lectures/", "google_interview.txt"); + makelink("lectures/", "ds_hashset_start.h"); + //After lecture + makelink("lectures/","hash_phonebook_code.cpp"); + makelink("lectures/","two_sum_hash_table.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/39372c0a188d4d34a1419e596deaa57a1d", "Lecture 22: Hash Tables, part 1 (Our Lec 20)"); + } else if ($which == 21) { + //makelink("lectures/","stacksnqueues.cpp"); + //makelink("lectures/","ds_hashset_soln.h","","Added after Lab 11"); //After lec only if we're not doing this in lab, otherwise pop this up after lab on hash tables + print("
"); + //After lecture + makelink("lectures/","most_freq_subtree_sum.cpp"); + makelink("lectures/","max_average_subarray.cpp"); + makelink("lectures/","rearrange_words_in_a_sentence.cpp"); + makelink("lectures/","good_substrings_of_size_3.cpp"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/0a0f7d9e12444b548cdf7de38d9b77c51d", "Lecture 23: Hash Tables, part 2 (Our Lec 21"); + } else if ($which == 22) { + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/63c91484d96646b2bc6fd1cfa2dc93d61d", "Lecture 25: Priority Queues (Our Lec 22)"); + } else if ($which == 23) { + makelink("lectures/","queue_using_stacks.cpp"); + makelink("lectures/","stack_using_queues.cpp"); + makelink("lectures/","trie.cpp"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/af0ad643f4e84862ad689d84306f4e211d", "Lecture 21: Hybrid / Variant Data Structures (Our Lec 23)"); + } else if ($which == 24) { + makelink("lectures/","longest_common_prefix.cpp"); + makelink("lectures/","reverse_integer.cpp"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/4538503dbe074122b17f0637995f69ec1d", "Lecture 26: Exceptions"); + } else if ($which == 25) { + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/7c619d2b57e44f4d8d7b311bdbcc25711d", "Lecture 27: Garbage Collection & Smart Pointers"); + } else if ($which == 26) { + makelink("lectures/", "virtual_inheritance_nesting_dolls.pdf"); + print("
"); + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/ae92bf4c25804db894df18676159d4661d", "Lecture 24: (not our) HW9 Discussion & Inheritance"); + } else if ($which == 27) { + old_video("https://mediasite.mms.rpi.edu/Mediasite5/Channel/rpi_csci_1200_data_structures/watch/22ee6f5d2b2d4fa9a63b2bacc7696b291d", "Lecture 28: Concurrency & Asynchronous Computing"); + } /*else if ($which == 28) { + }*/ + + + //print '
'; + } + /*if ($which == 0) { + print '
Location:DCC 308
Time: 6-7:50pm
'; + }*/ +} + +/*****************************************************************/ +/*****************************************************************/ +/*****************************************************************/ + +function labname($which) +{ + if ($which == 1) return "C++ Development, & Strings"; + else if ($which == 2) return "Classes"; + else if ($which == 3) return "Debugging with the Command Line Debugger"; + //else if ($which == 4) return "Vector Implementation & Memory Debugging"; + else if ($which == 4) return "Memory Diagramming and Debugging"; + else if ($which == 5) return "Vector Implementation"; + else if ($which == 6) return "Reversing Data: STL Vectors vs. STL Lists"; + else if ($which == 7) return "List Implementation"; + else if ($which == 8) return "Recursion"; + //else if ($which == 8) return "Operators"; + else if ($which == 9) return "Maps"; + //else if ($which == 9) return "Binary Search Trees &
Tree Implementation, part 1"; + //else if ($which == 10) return "Tree Implementation, part 2"; + else if ($which == 10) return "Tree Implementation"; + else if ($which == 11) return "Hash Tables"; + //else if ($which == 11) return "Operators"; + //else if ($which == 13) return "Big O Notation & Performance"; + else if ($which == 12) return "Priority Queues"; + else if ($which == 13) return "Garbage Collection & Smart Pointers"; + else if ($which == 14) return "Multiple Inheritance & Exceptions"; + else return "UNKNOWN LAB " . $which; +} + +function laburl($which) +{ + if ($which == 1) return "labs/01_getting_started/"; + else if ($which == 2) return "labs/02_classes/"; + else if ($which == 3) return "labs/03_debugging/"; + else if ($which == 4) return "labs/04_memory_debugging/"; + else if ($which == 5) return "labs/05_vectors/"; + else if ($which == 6) return "labs/06_lists_iterators/"; + else if ($which == 7) return "labs/07_list_implementation/"; + else if ($which == 8) return "labs/08_recursion/"; + //else if ($which == 8) return "labs/08_operators/"; + else if ($which == 9) return "labs/09_maps/"; + //else if ($which == 9) return "labs/09_trees_I/"; + else if ($which == 10) return "labs/10_trees_I/"; + //else if ($which == 10) return "labs/10_trees_II/"; + //else if ($which == 11) return "labs/11_operators/"; + else if ($which == 11) return "labs/11_hash_tables/"; + //else if ($which == 13) return "labs/13_big_o_notation/"; + else if ($which == 12) return "labs/12_priority_queues/"; + else if ($which == 13) return "labs/13_smart_memory/"; + else if ($which == 14) return "labs/14_exceptions_inheritance/"; + else return "UNKNOWN LAB " . $which; +} + +function makelabhelper($which) +{ + if (labreleased($which)) { + print ''; + } + //if (labreleased($which) && $which != 9) { print ''; } + //if (labreleased($which) && $which == 9) { print ''; } + print 'Lab ' . $which . ':
' . labname($which); + if (labreleased($which)) { + print '
'; + } + print '

'; + + if (labreleased($which)) { + if ($which == 1) { + print '
'; + makelink(laburl($which), "quadratic.cpp"); + makelink(laburl($which), "README.txt"); + } else if ($which == 2) { + print '
'; + makelink(laburl($which), "main.cpp"); + } else if ($which == 3) { + print("
"); + makelink(laburl($which), "point.h"); + makelink(laburl($which), "point.cpp"); + makelink(laburl($which), "line.h"); + makelink(laburl($which), "line.cpp"); + makelink(laburl($which), "roads.cpp"); + + makelink(laburl($which), "input_a.txt"); + makelink(laburl($which), "input_b.txt"); + makelink(laburl($which), "input_c.txt"); + makelink(laburl($which), "input_d.txt"); + + /* if (labsolutionsreleased($which)) { + print("
"); + makelink("https://submitty.cs.rpi.edu/courses/s21/csci1200/display_file?dir=course_materials&path=%2Fvar%2Flocal%2Fsubmitty%2Fcourses%2Ff20%2Fcsci1200%2Fuploads%2Fcourse_materials%2Flabs%2F03_pointers_and_debugging%2Fdiagram.cpp","","Checkpoint 1 Problems - diagram.cpp"); + makelink("https://submitty.cs.rpi.edu/courses/s21/csci1200/display_file?dir=course_materials&path=%2Fvar%2Flocal%2Fsubmitty%2Fcourses%2Ff20%2Fcsci1200%2Fuploads%2Fcourse_materials%2Flabs%2F03_pointers_and_debugging%2Fdiagram.pdf","","Checkpoint 1 Solutions - diagram.pdf"); + }*/ + + + } else if ($which == 4) { + makelink(laburl($which), "buggy_lab4.cpp"); + makelink(laburl($which), "first.txt"); + makelink(laburl($which), "middle.txt"); + makelink(laburl($which), "last.txt"); + //print("
"); + //makelink(laburl($which),"vec.h"); + //makelink(laburl($which),"test_vec.cpp"); + + } else if ($which == 5) { + makelink(laburl($which), "vec.h"); + makelink(laburl($which), "test_vec.cpp"); + } else if ($which == 6) { + makelink(laburl($which),"checkpoint1.cpp"); + makelink(laburl($which),"checkpoint3.cpp"); + } else if ($which == 7) { + makelink(laburl($which), "dslist.h", "dslist.h (partial)"); + makelink(laburl($which), "checkpoint1.cpp"); + makelink(laburl($which), "checkpoint2.cpp"); + } else if ($which == 8) { + makelink(laburl($which), "grid1.txt"); + makelink(laburl($which), "grid2.txt"); + makelink(laburl($which), "grid3.txt"); + makelink(laburl($which), "grid4.txt"); + makelink(laburl($which), "start.cpp", "", ""); +/* } else if ($which == 8) { + // operators lab + makelink(laburl($which),"main_checkpoint_1_and_2.cpp"); + + //makelink(laburl($which), "phonebook.cpp"); +*/ + } else if ($which == 9) { + makelink(laburl($which), "phonebook.cpp"); + + } else if ($which == 10) { + + makelink(laburl($which), "ds_set.h"); + makelink(laburl($which), "test_ds_set.cpp"); + + + } else if ($which == 11) { + + makelink(laburl($which),"ds_hashset.h"); + makelink(laburl($which),"test_ds_hashset.cpp"); + + // operators lab + //makelink(laburl($which), "main_checkpoint_1_and_2.cpp"); + + } else if ($which == 12) { + //makelink(laburl($which), "heapsort.cpp"); + makelink(laburl($which),"priority_queue.h"); + makelink(laburl($which),"test_pq.cpp"); + + + + } else if ($which == 13) { + + makelink(laburl($which), "stop_and_copy.h"); + makelink(laburl($which), "stop_and_copy.cpp"); + makelink(laburl($which), "main_stop_and_copy.cpp"); + makelink(laburl($which), "ds_smart_pointers.h"); + makelink(laburl($which), "main_smart_pointers.cpp"); + + //makelink(laburl($which),"performance.cpp"); +// makelink(laburl($which),"generate_input.cpp"); + // makelink(laburl($which),"test_input.txt"); + // makelink(laburl($which),"test_sort.txt"); + // makelink(laburl($which),"test_mode.txt"); + // m//akelink(laburl($which),"test_remove_dups.txt"); + +// +// makelink(laburl($which),"ds_hashset.h"); +// makelink(laburl($which),"test_ds_hashset.cpp"); + //makelink(laburl($which),"heapsort.cpp"); + + } else if ($which == 14) { + makelink(laburl($which), "input.txt"); + makelink(laburl($which), "simple_main.cpp"); + makelink(laburl($which), "utilities.h"); + makelink(laburl($which), "simple.txt"); + makelink(laburl($which), "output_simple.txt"); + } + } + + + if (labsolutionsreleased($which)) { + if ($which == 1) { + } else if ($which == 2) { + } else if ($which == 3) { + } else if ($which == 4) { + } else if ($which == 5) { + } else if ($which == 6) { + } else if ($which == 7) { + print '

solutions:
'; + makelink(laburl($which), "dslist_soln.h"); + print '
'; + } else if ($which == 8) { + } else if ($which == 9) { + } else if ($which == 10) { + } else if ($which == 11) { +// print '

solutions:
'; + // makelink(laburl($which),"ds_hashset_soln.h"); + // print '
'; + } else if ($which == 12) { + } else if ($which == 13) { + } else if ($which == 14) { + } + } +} + +/*****************************************************************/ +/*****************************************************************/ +/*****************************************************************/ + +function homeworkname($which) +{ + if ($which == 1) return "Text Justification"; + else if ($which == 2) return "Hockey Classes"; + else if ($which == 3) return "Matrix Class"; + else if ($which == 4) return "Tool Rental Lists"; + else if ($which == 5) return "Linked Train Cars"; + else if ($which == 6) return "Inverse Word Search"; + else if ($which == 7) return "Smash Frames"; + else if ($which == 8) return "B+ Trees"; + else if ($which == 9) return "Miniblast Hash Maps"; + else if ($which == 10) return "Distance Fields & Priority Queues"; + else return "UNKNOWN HOMEWORK " . $which; +} + +function homeworkurl($which) +{ + if ($which == 1) return "hw/01_text_justification/"; + else if ($which == 2) return "hw/02_hockey_classes/"; + else if ($which == 3) return "hw/03_matrix_class/"; + else if ($which == 4) return "hw/04_tool_rental/"; + else if ($which == 5) return "hw/05_linked_train_cars/"; + else if ($which == 6) return "hw/06_word_search/"; + else if ($which == 7) return "hw/07_smash_frames/"; + else if ($which == 8) return "hw/08_bplus_trees/"; + else if ($which == 9) return "hw/09_miniblast_hash/"; + else if ($which == 10) return "hw/10_level_sets/"; + else return "UNKNOWN HOMEWORK " . $which; +} + +function homeworksolutionsurl($which) +{ + return preg_replace('/hw/', 'hw_solns', homeworkurl($which)); +} + + +function makehomeworkhelper($which) +{ + //$current_day = date('Y m d H i'); + + //print $current_day; + + if (homeworkreleased($which)) { + print ''; + } + if (homeworkreleased($which)) { + print 'Homework ' . $which . ':
' . homeworkname($which); + } else { + print 'Homework ' . $which; + } + if (homeworkreleased($which)) { + print '
'; + /*if ($which == 7) { + //print ' update 10/28'; + }*/ + } + print '
due @ 11:59pm

'; + + if (homeworkreleased($which)) { + makelink(homeworkurl($which), "README.txt"); + if ($which == 1) { + makelink(homeworkurl($which), "example.txt"); + makelink(homeworkurl($which), "gettysburg_address.txt"); + makelink(homeworkurl($which), "long_word.txt"); + makelink(homeworkurl($which), "example_16_flush_left.txt"); + makelink(homeworkurl($which), "example_16_flush_right.txt"); + makelink(homeworkurl($which), "example_16_full_justify.txt"); + makelink(homeworkurl($which), "gettysburg_address_70_flush_left.txt"); + makelink(homeworkurl($which), "gettysburg_address_70_flush_right.txt"); + makelink(homeworkurl($which), "gettysburg_address_70_full_justify.txt"); + makelink(homeworkurl($which), "long_word_15_full_justify.txt"); + } else if ($which == 2) { + makelink(homeworkurl($which), "no_penalties_or_overtime.txt"); + makelink(homeworkurl($which), "no_penalties_or_overtime_output.txt"); + makelink(homeworkurl($which), "2012_small.txt"); + makelink(homeworkurl($which), "2012_small_output.txt"); + makelink(homeworkurl($which), "2012_ecac.txt"); + makelink(homeworkurl($which), "2012_ecac_output.txt"); + makelink(homeworkurl($which), "2012_all.txt"); + makelink(homeworkurl($which), "2011_all.txt"); + } else if ($which == 3) { + makelink(homeworkurl($which), "matrix_main.cpp"); + makelink(homeworkurl($which), "sample_output.txt"); + } else if ($which == 4) { + makelink(homeworkurl($which), "inventory_small.txt"); + makelink(homeworkurl($which), "customer_small.txt"); + makelink(homeworkurl($which), "output_inventory_small.txt"); + makelink(homeworkurl($which), "output_customer_small.txt"); + makelink(homeworkurl($which), "inventory_medium.txt"); + makelink(homeworkurl($which), "customer_medium.txt"); + makelink(homeworkurl($which), "output_inventory_medium.txt"); + makelink(homeworkurl($which), "output_customer_medium.txt"); + makelink(homeworkurl($which), "inventory_large.txt"); + makelink(homeworkurl($which), "customer_large.txt"); + makelink(homeworkurl($which), "output_inventory_large.txt"); + makelink(homeworkurl($which), "output_customer_large.txt"); + } else if ($which == 5) { + makelink(homeworkurl($which), "main.cpp"); + makelink(homeworkurl($which), "traincar.h"); + makelink(homeworkurl($which), "traincar.cpp"); + makelink(homeworkurl($which), "traincar_prototypes.h"); + makelink(homeworkurl($which), "sample_output.txt"); + makelink(homeworkurl($which), "mtrand.h"); + makelink(homeworkurl($which), "mtrand.cpp"); + } else if ($which == 6) { + makelink(homeworkurl($which), "puzzle1.txt"); + makelink(homeworkurl($which), "puzzle2.txt"); + makelink(homeworkurl($which), "puzzle3.txt"); + makelink(homeworkurl($which), "puzzle4.txt"); + makelink(homeworkurl($which), "puzzle5.txt"); + makelink(homeworkurl($which), "puzzle6.txt"); + makelink(homeworkurl($which), "puzzle7.txt"); + makelink(homeworkurl($which), "puzzle8.txt"); + makelink(homeworkurl($which), "out1_onesol.txt"); + makelink(homeworkurl($which), "out1.txt"); + makelink(homeworkurl($which), "out2.txt"); + makelink(homeworkurl($which), "out3.txt"); + makelink(homeworkurl($which), "out4.txt"); + makelink(homeworkurl($which), "out5.txt"); + makelink(homeworkurl($which), "out6.txt"); + makelink(homeworkurl($which), "out7.txt"); + makelink(homeworkurl($which), "out8.txt"); + } else if ($which == 7) { + makelink(homeworkurl($which), "main.cpp"); + makelink(homeworkurl($which), "mini_ult_frame_data.txt"); + makelink(homeworkurl($which), "large_ult_frame_data.txt"); + makelink(homeworkurl($which), "queries1_mini.txt"); + makelink(homeworkurl($which), "queries1_large.txt"); + makelink(homeworkurl($which), "queries2_mini.txt"); + makelink(homeworkurl($which), "queries2_large.txt"); + makelink(homeworkurl($which), "output1_mini.txt"); + makelink(homeworkurl($which), "output1_large.txt"); + makelink(homeworkurl($which), "output2_mini.txt"); + makelink(homeworkurl($which), "output2_large.txt"); + } else if ($which == 8) { + makelink(homeworkurl($which), "hw8_test.cpp"); + makelink(homeworkurl($which), "BPlusTree.h"); + makelink(homeworkurl($which), "output_all.txt"); + } else if ($which == 9) { + makelink(homeworkurl($which), "input_small.txt"); + makelink(homeworkurl($which), "output_small.txt"); + makelink(homeworkurl($which), "genome_small.txt"); + makelink(homeworkurl($which), "input_medium.txt"); + makelink(homeworkurl($which), "output_medium.txt"); + makelink(homeworkurl($which), "genome_medium.txt"); + makelink(homeworkurl($which), "genome_large.txt"); + makelink(homeworkurl($which), "input_large.txt"); + makelink(homeworkurl($which), "genome_larger.txt"); + makelink(homeworkurl($which), "input_larger.txt"); + } else if ($which == 10) { + makelink(homeworkurl($which), "data_structures_300x300.ppm"); + makelink(homeworkurl($which), "dots_1000x1000.ppm"); + makelink(homeworkurl($which), "image.cpp"); + makelink(homeworkurl($which), "image.h"); + makelink(homeworkurl($which), "lines_100x100.ppm"); + makelink(homeworkurl($which), "main.cpp"); + makelink(homeworkurl($which), "priority_queue.h"); + makelink(homeworkurl($which), "small_10x10.ppm"); + makelink(homeworkurl($which), "squiggle_30x30.ppm"); + makelink(homeworkurl($which), "tiny_5x5.ppm"); + } + + makelink(homeworkurl($which), "provided_files.zip"); + //if ($which != 4) { + + // } else { + //print 'See Submitty for materials'; +// } + //if ($which == 6){ + //print '
'."Homework 6 Contest Results".'
'; + //} + + } + + + if (homeworksolutionsreleased($which)) { + print '

solutions:
'; + print '
'; + } + +} + +/*****************************************************************/ +/*****************************************************************/ +/*****************************************************************/ + +function maketesthelper($which) +{ + + if ($which == 4) { + print 'Data Structures Final Exam'; + print '
6:30-9:30pm America/New York

'; + //print '
location: Sage 3303, 3510, & 3101'; + //print '
location: TBA'; + //West Hall Auditorium'; + //print '
Location: See SubmittyFall 2023 Final Exams Schedule'; + } else { + print 'Test ' . $which; + print '
6:00-7:50pm'; + } + + if (reviewproblemsreleased($which)) { + print '

'; + makelink("reviews/", 'problems' . $which . '.pdf', 'practice problems'); + print '

'; + if (reviewsolutionsreleased($which)) { + print '

Don\'t look at the solutions until you have fully worked the problems
'; + //makelink("reviews/",'solutions'.$which.'.pdf','practice problem solutions'); + makelink("https://submitty.cs.rpi.edu/courses/s21/csci1200/display_file?dir=course_materials&path=%2Fvar%2Flocal%2Fsubmitty%2Fcourses%2Ff20%2Fcsci1200%2Fuploads%2Fcourse_materials%2Ftest_reviews%2Fsolutions" . $which . "_out.pdf", "", "practice problem solutions"); + } else { + + if ($which == 4) { + //print '

Sample solutions to the practice problems will be posted later.'; + } else { + print '

Sample solutions to the practice problems will be posted to Course Materials on Monday morning.'; + } + } + } + if (testsolutionsreleased($which)) { + print '

'; + /*makelink("tests/",'test_solutions'.$which.'.pdf', 'Test '.$which.' Solutions');*/ + makelink("https://submitty.cs.rpi.edu/courses/s21/csci1200/display_file?dir=course_materials&path=%2Fvar%2Flocal%2Fsubmitty%2Fcourses%2Ff20%2Fcsci1200%2Fuploads%2Fcourse_materials%2Ftest_solutions%2Ftest0" . $which . "_solution.pdf", '', "Test " . $which . " Solutions"); + } +} + + +/*****************************************************************/ +/*****************************************************************/ +/*****************************************************************/ + + +function message($msg) +{ + print '' . $msg . ""; +} + +function extramessage($msg = null) +{ + if (isset($msg)) { + print "

"; + message($msg); + } +} + +/*****************************************************************/ + +function blank($numdays = 1) +{ + print ' '; +} + +function makeday($date, $msg, $numdays = 1, $color = "white") +{ + print '' . $date . ',
'; + message($msg); + print ""; +} + + +function makeinstallfest($date, $msg, $numdays = 1) +{ + + + print '' . $date . ',
'; + message($msg); + + + print '
 
Lecture 0: Install Fest
6-8pm
Location: DCC 308
'; + + // makelink("lectures/","temperature.cpp"); + // makelink("lectures/","memory_debugger_test.cpp"); + + print ""; +} + + +function makelecture($date, $msg = null) +{ + static $which = 1; + print "" . $date . ", "; + makelecturehelper($which); + extramessage($msg); + print ""; + $which++; +} + +function makelab($date, $msg = null) +{ + static $which = 1; + print "" . $date . ", "; + makelabhelper($which); + extramessage($msg); + print ""; + $which++; +} + +function makehomework($date, $msg = null) +{ + static $which = 1; + print "" . $date . ", "; + makehomeworkhelper($which); + extramessage($msg); + print ""; + $which++; +} + +function maketest($date, $msg = null) +{ + static $which = 1; + print "" . $date . ", "; + maketesthelper($which); + extramessage($msg); + print ""; + $which++; +} + +/*****************************************************************/ + +?> + diff --git a/php/course_calendar.php b/php/course_calendar.php new file mode 100755 index 0000000..c97760e --- /dev/null +++ b/php/course_calendar.php @@ -0,0 +1,249 @@ + + + + + + + +

Course Calendar

+ + +IMPORTANT NOTE: Due to COVID-19, all aspects of RPI's Spring 2022 Data +Structures course will be +conducted online for the first two weeks. After +that depends on RPI's decision, but hopefully labs and office hours will be in-person +when allowed. +

*/ +?> + +

+Lecture and lab topics are tentative and will be updated as the term progresses. +

+ +

+ All times below are the + America/New York timezone. +

+ + + + + +
+ + + + + + + + + +'; +makeday ("Aug 28","First Day of Classes"); +makelecture ("Aug 29"); +makelab ("Aug 30"); +blank(); +makelecture ("Sep 1"); +print ''; + + +print ''; +makeday ("Sep 4","Labor Day, No classes"); +makeday ("Sep 5", "Monday schedule"); +//makelecture ("Sep 5"); +makelab ("Sep 6"); +makehomework("Sep 7"); +makelecture ("Sep 8"); +print ''; + +print ''; +blank(); +makelecture ("Sep 12"); +makelab ("Sep 13"); +makehomework("Sep 14"); +makelecture ("Sep 15"); +print ''; + + +print ''; +blank(); +makelecture ("Sep 19"); +makelab ("Sep 20"); +//makehomework("Feb 3"); +maketest("Sep 21"); +makelecture ("Sep 22"); +print ''; + + +print ''; +blank(); +makelecture ("Sep 26"); +makelab ("Sep 27"); +makehomework("Sep 28"); +makelecture ("Sep 29"); +print ''; + + +print ''; +//makeday ("Feb 15"); +blank(); +makelecture ("Oct 3"); +makelab ("Oct 4"); +makehomework("Oct 5"); +//maketest ("Feb 18"); +makelecture ("Oct 6"); +print ''; + + +print ''; +makeday ("Oct 9", "Columbus Day, No classes"); +//makeday ("Oct 10", "Monday schedule"); +makelecture ("Oct 10"); +makelab ("Oct 11"); +makehomework("Oct 12"); +makelecture ("Oct 13"); +print ''; + + +print ''; +blank(); +makelecture ("Oct 17"); +makelab ("Oct 18"); +maketest("Oct 19"); +//makelecture ("Mar 3","Last day to drop classes"); +makelecture ("Oct 20"); +//makeday("Oct 20","DS Lecture cancelled. Last day to drop classes"); +print ''; + + +/*print ''; +//makeday ("Oct 12","No classes"); +blank(); +makelecture ("Mar 8"); +makelab ("Mar 9"); +//makehomework("Mar 10"); +maketest ("Mar 10"); +makelecture ("Mar 11"); +print '';*/ + +//print ''; +//makeday ("Mar 6-10","Spring Break",5); +//print ''; + +print ''; +blank(); +makelecture ("Oct 24"); +makelab ("Oct 25"); +makehomework("Oct 26"); +makelecture ("Oct 27"); +print ''; + +//GM WEEK +print ''; +blank (); +makelecture ("Oct 31"); +//makeday ("Mar 22", "DS Lecture cancelled"); +makelab ("Nov 1"); +//makeday ("Nov 1","GM Wednesday, no lab"); +makehomework("Nov 2"); +makelecture ("Nov 3"); +//makeday ("Mar 25", "DS Lecture cancelled"); +print ''; + +print ''; +blank (); +makelecture ("Nov 7"); +makelab ("Nov 8"); +makehomework("Nov 9"); +makelecture ("Nov 10"); +print ''; + + +print ''; +blank(); +//makeday ("Apr 4","Pass/No Credit Deadline"); +makelecture ("Nov 14"); +makelab ("Nov 15"); +maketest("Nov 16"); +makelecture ("Nov 17"); +print ''; + +print ''; +blank (); +makelecture ("Nov 21"); +//makelab ("Nov 22"); +//makehomework("Nov 23"); +makeday ("Nov 22-24","Thanksgiving Break, no classes",3); +//makelecture ("Nov 24","Pass/No Credit Deadline"); +print ''; + +print ''; +blank (); +makelecture ("Nov 28"); +makelab ("Nov 29"); +makehomework("Nov 30"); +makelecture ("Dec 1"); + +print ''; + +print ''; +blank (); +makelecture ("Dec 5"); +makelab ("Dec 6"); +//makelab ("Dec 6","Last Day of Classes"); +makehomework("Dec 7"); +makelecture ("Dec 8"); +//makeday ("Dec 7-8","Reading Days",2); +print ''; + +print ''; +makeday ("Dec 11-13","Reading Days",3); +makeday ("Dec 14","Other RPI Final Exams",1,"grey"); +maketest ("Dec 15"); +//makelab ("Dec 6","Last Day of Classes"); +print ''; + +print ''; +makeday ("Dec 18-20","Other RPI Final Exams",3,"grey"); +//makeday ("May 1-5","RPI Final Exams",5,"grey"); +print ''; + +/* +print ''; +makeday ("Dec 12-14","Reading Days",1); +makeday ("Dec 15-16","Other RPI Final Exams",2,"grey"); +maketest ("Dec 17"); +makeday ("Dec 18","Other RPI Final Exams",1,"grey"); +print ''; + +print ''; +makeday ("Dec 21","Other RPI Final Exams",1,"grey"); +blank (4); +print ''; +*/ + + + +?> + + +
MondayTuesdayWednesdayThursdayFriday
+ + diff --git a/php/crash_course_cpp_syntax.php b/php/crash_course_cpp_syntax.php new file mode 100755 index 0000000..1f988fd --- /dev/null +++ b/php/crash_course_cpp_syntax.php @@ -0,0 +1,74 @@ + + + + + +

Crash Course in C++ Syntax

+ +

+We have developed a set of lessons on Submitty that +aim to transition you from another programming language to C++. These +exercises are targeted to students who've successfully completed +Computer Science 1 at RPI and learned Python, or students who earned +college credit for the Computer Science AP Test in Java, or students +who have done other formal coursework in or self-taught Introductory +Programming. +

+ +

+https://submitty.cs.rpi.edu/courses/f23/csci1199 +
+All Students registered for CSCI 1200 Data Structures, Fall 2023 +have been added to this second (not for credit, not for a grade) +Submitty course. Contact the instructor if you do not have +access. +

+ +

+The problems were designed by members of the teaching staff with years + of experience working one-on-one with Data Structures students and + highlight some of the common C++ syntax that trip up new C++ + programmers. We recommend you read through the material and work + through the problems during the first week or two of Data + Structures. However, note that these exercises are completely + optional and will not be used to compute your final grade in Data + Structures. +

+ +

+Some of these exercises are rather subtle. You many need to study the +code carefully to spot the differences. Carefully reading code is an +essential skill for all programmers. If a specific problem has +stumped you, please ask a member of the teaching staff in office +hours. +

+ +

+Note: The exercises in the Crash Course for C++ Syntax +are NOT typical of the problems you will see on the +Data Structures tests and the final exam. The Data Structures test +questions will not focus on "tricks" of C++ syntax, but rather on bigger +picture, fundamental concepts of Data Structures theory and practice. +

+ + +

+ + Be sure to click through the other pages linked on the left sidebar menu. + +

+ + + diff --git a/php/development_environment.php b/php/development_environment.php new file mode 100755 index 0000000..c8ff04f --- /dev/null +++ b/php/development_environment.php @@ -0,0 +1,151 @@ + + + + + + + + + +
+ +

+Depending on the native operating system for your computer, you have +several different options for C++ development with GNU g++ or LLVM +clang++. More information on each choice is below and on other pages. +

+ + +

Windows 10

+ + + + +

MacOSX

+ + + +

+Note: The memory debugging software has not yet be updated to run on the Mac M1/M2 ARM processors. +

+ +

GNU/Linux

+ + + + +
+ +

+NOTE: It is possible to run a true dual-boot on Windows or Mac by +partitioning your hard drive and installing a GNU/Linux distribution +there, but it requires a more complicated setup. Only do this if you +really know what you're doing. Instructions exist online for how to +do this, but it is possible to brick your machine this way and course +staff won't necessarily be able to help you with any issues you +encounter. +

+ + 
+ + +

MacOSX XCode

+ + +

+If you're using a Mac, you'll need to install XCode, which is a free +download from the Apple App store. XCode provides both a C++ compiler +(technically the LLVM clang++ compiler) and an +integrated development environment (IDE) similar to Microsoft's Visual +Studio. +

+ + +

+Make sure to install XCode's "Command Line Tools" so that you can run +the compiler from the Terminal command line. NOTE: Even if you plan +to use the XCode IDE for the bulk of your development & testing, in +lab & office hours we will usually ask you to demo your program from +the Terminal command line. +

+ + + 
+ + + +

Ubuntu in VirtualBox

+ +

+Here are some install instructions on installing Ubuntu in +VirtualBox. If you want a different operating system, you can +generally use the same instructions and just substitute the OS image +you have for the Ubuntu one referenced in the instructions. +

+ + + + 
+ + +

g++ or clang++ on Ubuntu:

+ +

+Installing g++ or clang++ on Ubuntu (and many other GNU/Linux +variants) is as simple as running the following +commands in a terminal: +

+ +
+    sudo apt-get install g++ gdb
+    sudo apt-get install clang-10 lldb
+    sudo apt-get install gcc-multilib g++-multilib
+
+
+ +

+ + Be sure to click through the other pages linked in the upper right + menu. + +

+ + diff --git a/php/editors_ides.php b/php/editors_ides.php new file mode 100755 index 0000000..8576a14 --- /dev/null +++ b/php/editors_ides.php @@ -0,0 +1,192 @@ + + + + + + + + + +
+ + +

Code (and Plaintext) Viewers/Editors

+ +

+Many different text/code editors are available for all of the +different operating systems. You'll want to pick an helpful editor +that color-highlights your code and helps with indentation. Also note +that use and display of "newlines" in plaintext files is not +standardized on UNIX/GNU Linux platforms vs. Windows. There are several +characters that are used to represent end-of-line/carriage return. We +will always use '\n' (newline) in this course. This is the UNIX/GNU Linux +way. Please do not use '\m' or '\r' in this course, it won't match the +output we are expecting on the homework submission server. In order +to examine the provided code & sample output & your own output, you'll +want to make sure you find a text viewer/editor that correctly +displays newlines ('\n'). +

+ + +

+Some recommended code/text editor options: +

+ + + +

+Also, ask your graduate TAs & undergraduate programming mentors what +editor and/or integrated development environment (see below) they choose and why +it's their favorite. +

+ + 
+ + + +

C++ Compilers

+ +

You may do your programming work for this course with +any C++ compiler and development environment you wish, but your +submitted homework code must compile and run on gcc/g++ 9.4 and +llvm/clang++ 10.0 on Ubuntu 20.04. We understand that some of you may +choose to use another compiler and development environment (e.g., +Microsoft Visual Studio) for most of your work. We are asking you to +write portable code (for g++/clang++) because it is good programming +practice and it allows us to significantly streamline the grading +process for your TAs. This leaves more time for us to give +constructive feedback on programming style, individual tutoring, and +debugging help.

+ +

+The good news is that the gcc/g++ and/or clang/clang++ compilers are +available for every +operating system, and you have a variety of different options for +development environments. Note: Different +gcc/g++ or clang/clang++ +compiler version numbers are ok -- you will probably +not notice any differences. (Be sure to do a practice submit of +your homework early enough each week to allow time to correct +compilation issues.) +

+ +

+We recommend the + + clang/LLVM compiler, which has earned much praise for having +clear and concise compiler error messages that are especially helpful +for new C++ programmers. Once setup on your system, you simply +substitute "clang++" for "g++" when you compile your +program. +

+ +

Note on C++11/C++14/etc.: Many cool new C++ +language syntax features were introduced with C++11, C++14, and +beyond. Not all operating systems/compilers support these new +features out of the box (it is ok if your development environment does +not support C++11 or C++14). Similarly, many large long-term or legacy +open-source and commercial software projects cannot or choose not to use +use some of the newest features. + +We will avoid making use of these new features in most code +examples and homework assignments for the course. Similarly, we ask +that students limit the use of these features on their homework and +tests to avoid portability issues or other confusion during grading. +Some advanced features will not be allowed; for example, +to demonstrate knowledge and mastery of types, students +should explicitly write the type and not use the auto keyword +when declaring variables. Please ask on the +Discussion Forum +if you are unsure about whether you can use a specific syntax or function. +

+ +

+We have organized alot of information on the
+ +C++ Installation Choices for Your Operating System. +

+ + 
+ +

C++ IDEs (Integrated Development Environments)

+ +

+It's possible to do all of your work for this course with a simple +text editor and command line compilation & running in a terminal. And +many of us on the teaching staff prefer to code like this even for +larger projects beyond this course! +

+ +

+Alternatively, you can do your work inside an Integrated Development +Environment (IDE). Here are a few C++ development environments +(similar to Visual Studio) that can be used with the GNU g++ or LLVM +clang++ compilers. Note that the teaching staff many not be familiar +with these specific tools and may not be able to help you if you get +stuck. +

+ + + + + + diff --git a/php/getting_help.php b/php/getting_help.php new file mode 100755 index 0000000..4ea5e3d --- /dev/null +++ b/php/getting_help.php @@ -0,0 +1,154 @@ + + + + + + + + + + +
+ + + +

+Your work on the homeworks and the labs for this course should be +completed on your own, following the +Collaboration Policy. However, +you are encouraged to ask lots of questions about the material when +you get stuck. Please ask your instructor, graduate TAs, +undergraduate lab programming mentors, and fellow classmates for +help.

+ +

+Don't be shy or worried if you can't always figure things out all +on your own. Please ask for help. We're happy to give +you hints, programming tips, and guide you through debugging. +

+ + + + +

Submitty Discussion Forum

+ +

+Post your questions about homework and general questions on the +Submitty Discussion Forum. The TAs, instructor, and other students will help answer +your questions. Be sure not to post partial or full solutions to the +lab or homework problems when asking your questions or answering a +classmate's question. Posting a line or two of code that is causing a +compiler syntax error is ok. +

+ +

If you registered at least a week before the first day +of classes, you should be automatically added to Submitty, you will +use your RPI RCS username & password to log in. Contact the +instructor if you cannot access Submitty. +

+ +

Instructor & TA Office Hours

+ + +

+A very important resource for help outside of class are the instructor +and TA office hours. You may attend the office hours of any other TA +(not just your lab TA) for questions about the course material or the +homework. If you have questions about the grading of your homework, +please see the TA who graded your assignment during their regular +office hours or make an appointment. +

+ + + + +

Additional Tutoring

+ +

+In addition to the Instructor and TA Office Hours for the course, you +may also want to check out: + +

+ +

+ + Be sure to click through the other pages linked in the upper right + menu. + +

+ + diff --git a/php/global_colors.php b/php/global_colors.php new file mode 100755 index 0000000..27cb24c --- /dev/null +++ b/php/global_colors.php @@ -0,0 +1,6 @@ + diff --git a/php/good_programming.php b/php/good_programming.php new file mode 100755 index 0000000..1bc38ee --- /dev/null +++ b/php/good_programming.php @@ -0,0 +1,188 @@ + + + + + + + + + +
+ + +

Good Programming Practices

+ + +

+Points for programming assignments are awarded for error-free +compilation, correct program output, and overall program +structure. The program structure grade is an evaluation of the +quality of your code. This includes the following: +

+ + + +

Use the example code given in class, in lab, and in the textbooks +as guidelines. Programs that are unclear and do not compile will earn +little or no credit. +

+ +

+Program correctness will be determined by evaluating your program on a +series of test data sets. We will make available some but not all of +this data, along with sample output, prior to the assignment due +date. This will help you judge the quality of your program, but will +not guarantee correct results on all data. You will need to ensure +this on your own by creating additional test cases. +

+ +See also: + + + + 
+ +

Examples of Commenting

+ +

+Most functions should have at least one comment (usually at the top) +explaining what the function does. And functions of more than a +couple lines should have addtional comments explaining the logic +within the function body. Of course, in some situations, a function +does not need comments (when the function's behaviour is obvious). +

+ +

+We suggest you avoid adding comments that do not help in the +understanding of the program. For example: +

+ +
+  string getNameOfRecipe() { // function that gets the name of the recipe
+
+  }
+
+ +

+The comment above is not useful (it is obvious +that getNameOfRecipe() is a function and it is obvious that +it returns the name of the recipe). However, if the name of the +function was getNR() it would be useful to add comments explaining +that this function returns the name of the recipe. NOTE: It is better to use +a descriptive name for the function than rely on comments! +

+ +

+Another example: +

+ +
+  double getRoot(double a,double b, double c) { // get root function
+    double d; // declare d as a double
+    d = b*b - 4*a*c;
+    double root = (-b + sqrt( d ))/(2*a); // compute the root
+    return root; // return the result
+  }
+
+ +

+The comments above are also not useful (it is obvious that the return +statement returns something; it is obvious that this is the "get root +function"). +

+ +

+Here is a much more informative commenting of the same code: +

+ +
+  // This functions receives the coefficients of an equation in the form
+  // ax2+bx+c=0 and returns one of its roots.
+  // Attention:  We assume that the equation has at least one real root.
+  double getRoot(double a,double b, double c) {
+    double delta = b*b - 4*a*c;
+    // We use Bhaskara's formula to compute one of the roots
+    double root =  (-b + sqrt( delta ))/(2*a); 
+    return root;
+  }
+
+ +

+  +

+

+See also the main Course Grades page, the +and the Programming Advice from TAs page for more +information. +

+ + diff --git a/php/grading.php b/php/grading.php new file mode 100755 index 0000000..8429014 --- /dev/null +++ b/php/grading.php @@ -0,0 +1,171 @@ + + + + + + + + + +
+ + + +

Submini Lecture Polls

+ +

+ Each lecture will include several multiple-choice polls that + will help you gauge your understanding of new + material and collect feedback for the teaching staff. Participation + and timely completion of these exercises is strongly encouraged; + however, Submini Lecture Polls + will not be directly factored into the semester average. +

+ + +

Lab Assignments

+ +

+There will be a total of 14 programming labs, one each week. Labs are +graded on a scale of 0-3, depending on the amount and quality of work +completed. Labs are designed so that students who work diligently can +earn all 3 points. You must attend your assigned lab section unless +prior arrangements have been made with the graduate TA for your lab +section (see Schedule). To receive credit +for the lab exercises, the work must be completed in lab and approved +by the lab TA before the end of lab -- 10 minutes before the hour. TAs +and undergraduate programming mentors are available in lab to answer +your questions as well as check off your work. Don't wait until the +end of lab to ask questions or show your work.

+ +

Lab instructions and a subset of the lab problems will be posted +on the course website by Tuesday early evening, before each +Wednesday lab. Students are encouraged to read through the materials +and get started on the exercises before their assigned lab section. +Additional problems will be distributed at the start of the lab. +Students should bring their laptop, any optional references, and recent +lecture notes to lab.

+ +

+Internet access during labs is restricted to lab file downloads and +standard programming reference material only. Reading or sending +email, instant messages, social media, text messages, cell phone use, +playing video games, etc. is disallowed during lab. Students who +violate the policy will receive a 0 for the lab and be asked to leave. +

+ +

Homeworks

+ +

+There will be 10 homework assignments, one each week, except for weeks +when a test is scheduled. Assignments will be submitted +electronically and are due on Thursdays by 11:59pm. Please do not +email your homework assignment to the instructor or graduate TA. +Homework assignments will be made available on the course web site at +least one week before the deadline and all material for the homework +will be covered by the end of Friday's lecture. Students are +encouraged to start the assignments over the weekend, and ask the +instructor and TAs questions about the homework on +the Discussion Forum or in office hours early +in the week. +

+ +

+See the Homework Policies page, the Collaboration Policy & Academic Integrity page, the Good Programming Practices, and the Programming Advice from TAs page for more +information. +

+ +

Tests and Final Exam

+ +

Three tests will be given during the Thursday evening test block. +A cumulative final exam will be scheduled during finals week. These +are pencil-and-paper tests that will focus on problem solving by +writing C++ code. The exams will also include short answer and +diagram-based questions. Sample exam problems from prior semesters +will be distributed about a week before each exam.

+ +

The course material is cumulative and students should strive to +improve their performance on each subsequent test. When a student +"beats" their previous test score, the previous test score will be +replaced with the average of the two scores. For example, if a +student gets a 70 on Test 1 and an 82 on Test 2, the first test score +will be replaced by the average of Tests 1 & 2 = 76. If the student +then earns an 88 on Test 3, the second test score will be replaced +with the average of 82 and 88 = 85. (Note that we don't go back and +re-adjust Test 1). And similarly, the score for Test 3 will be +adjusted if the student's performance on the final exam improves upon their +performance for Test 3.

+ +

+ Important Note: We will not provide a makeup exam unless the +absence is officially excused by the appropriate office.

+ + +

Semester Average

+ +

Your final grade in this class combines your performance on the +lab exercises, homeworks, and exams as follows: +

+ + + +

All components of the class are graded on a curve. What does +this mean? The homeworks and exams will contain challenging +problems and the grade breakdown will likely be lower than the typical +90%=A, 80%=B, etc. We will announce the curve for each exam and +homework when the grades are returned.

+ +

Important Note: You must have a passing average on each component (labs, +homeworks, and exams) in order to pass the course. +

+ +

Rainbow Grades Summary

+ +

Please regularly check the grades recorded in Rainbow +Grades on Submitty and let us know if you spot a data entry error. +This chart will allow you to gauge your overall performance relative +to the class average and the estimate for the grade boundaries. Here +is a example of what the grade summary will look like:

+ + + +

+ +

+Note: Because the exams and homeworks change from year-to-year, +the curve for each homework/exam and the final average will be +adjusted accordingly and will not be exactly the same as this +sample.

+ + diff --git a/php/homework_policies.php b/php/homework_policies.php new file mode 100755 index 0000000..07136fa --- /dev/null +++ b/php/homework_policies.php @@ -0,0 +1,226 @@ + + + + + + + + + +
+ + + +

Electronic Submission

+ +

Homework assignments are due Thursday nights at 11:59pm + (America/New York timezone). +Homework is submitted electronically +and submission times are judged by the webserver timestamp. If your +submission is one minute late, it is a day late, so we suggest that +you don't actually wait until the last minute. You may submit your +assignment multiple times -- we will only grade your last submission +(or you may specify which version we should grade). Please see +the Course Calendar for the homework assignments +and due dates.

+ +

Note: Please do not email your +homework assignment to the instructor or the TAs (unless explicitly + requested to do so). +We will only grade material submitted to the +homework submission server. We can login and view your submitted +homework files if you encounter a problem at submission time. Please +check the discussion forum for announcements about the current +homework and ask a new question if you do not see a similar question and +answer that helps you. +

+ +

Late Day Policy

+ +

+Each student will initially be given one day (whole or partial) of +grace for late homework assignments. Through consistent participation +and solid performance on Lecture Participation Polls +each student may earn additional late days. +These grace days are intended to cover minor illnesses, hardware +malfunctions, and schedule conflicts with homeworks/tests in your +other classes. +

+ +

+To use a late day, simply submit the assignment as normal through the +homework submission link. You do not need to notify your TA or +instructor. For example, an assignment submitted 22 hours late +(Friday evening at 10:00pm) counts as 1 late day used. As another +example, an assignment submitted 26 hours late (Saturday morning at +2:00am) counts as 2 late days used. No more than two late days +may be used for any one assignment. Once your late days have +been exhausted, late assignments will not be accepted without an +official excused absense.

+ + +

+Students should use their late days carefully, saving them for the +latter part of the semester or (better yet) not using them at all. +

+ + + +

Prepare Your Assignment for Submission

+ +

+ +Make sure you read and follow the +Collaboration Policy and Academic Integrity statement which +applies to all homework assignments. + +

+ +

+Once you've finished writing, testing, debugging, and commenting your +code, re-read the assignment description and collect all of the +necessary files for submission. Be sure to include your plaintext +README.txt (use the provided template for the assignment), your .cpp +and .h code files, and any other files specifically requested for the +assignment. You do not need to include any compiled object files or +the executable. Submitty will ignore these files if they are +included. You do not need to include any of the provided input data +files or your output files for the basic homework --- these will be +re-generated by Submitty. But you should include any new data input +files and corresponding output for any extra credit you completed, as +described in the assignment description. +

+ +

Next, click the "Gradeables" link from the top of the +left sidebar to access Submitty. You will use your RCS ID and +password to access this page. Access to Submitty is +automatically given to all registered students (but it can take a day +or two). Contact the instructor if you are registered for the course +but cannot successfully login to Submitty. +

+ +

Choose the appropriate assignment from the navigation +page. Drag and drop your files into the indicated area(s) or click to +launch a file browser. Press "Submit" to upload your +homework. +

+ +

Note: Please do not email your +homework assignment to the instructor or the TAs (unless explicitly +requested to do so). +

+ + + + + + + + + +

Automated Compilation, Testing, and Grading

+ +

Submitty will compile your code with Ubuntu 20.04 gcc/g++ +9.4 and/or llvm/clang++ 10.0 and then run the resulting executable on +several test cases. It will inform you of any compile, link, and +runtime errors or warnings and will present the results of these tests +for your review. Your grade for the homework will be a combination of +this online testing of your code and (later) a TA's review of the +structure, efficiency, and overall quality of your code (see +also Good Programming Practices and +Advice from TAs), plus the TA's +grading of any additional non-code parts of the assignment.

+ +

You will have practice using the submission process during the +first lab. Please see a TA during office hours if you need additional +help writing portable code. +

+ + +

Carefully check the result of your submission. Verify that all +necessary files were received by Submitty. Confirm that your code +compiled and ran successfully. If you find a mistake in your +homework, you can fix it and re-submit using the same procedure. We +will only grade the most recent submission. Please see a TA in office +hours if you need help preparing your assignment for successful +submission. If the automatic grading of your homework seems incorrect +or unfair please use the discussion forum and/or see the instructor or a +TA in office hours. You may make a note to the TAs in your README.txt +file about problems with the automated grading; however, the TAs will not +edit the automated grading scores. +

+ +

+NOTE: Some of the automated test cases on Submitty +will be labeled "Hidden". These additional tests with novel +inputs are intended to prevent "hardcoding" to a limited set of known +inputs, and to encourage students to think carefully about "corner +cases" when writing their programs. Other than the title of the test +case, the details of these tests will not be made available to +students before the deadline. After the deadline has passed, and the +TAs have finished their manual grading, your numeric scores for the +hidden tests will be available, but the details of these tests will +probably remain hidden. Students may see the instructor or TA in +office hours to ask questions about the hidden test cases after grades +have been returned. +

+ +

Note on # of submissions:

+ +

+Do not use Submitty as +your sole development/testing platform. You should use your laptop as +your primary testing & debugging interface. However, don't wait until +the last minute to submit for the first time. You should do an early +practice submission of a partially working version of the homework to +confirm you are on the right track. A small point penalty will be +assessed if the count of your submission attempts is greater than 20 +for any one homework assignment.

+ +

Note on submission file size:

+ +

+If you accidentally include lots of unnecessary "stuff" in your +uploaded files, it may be too big for submission. If you think you +have included only the necessary files and yet Submitty still +complains about the size of your submission, please check the +Discussion Forum +for announcements, and ask a question if no one else +has yet encountered this problem for this homework -- please don't +send your homework files by email!

+ + +

Note on the submission server:

+ +

+If Submitty crashes or is unresponsive, or if your submission attempt +fails and you cannot make sense of the Submitty output, check +the Discussion +Forum for announcements, and ask a question if no one else +has yet encountered this problem for this homework -- please don't + send your homework files by email!

+ + diff --git a/php/index.php b/php/index.php new file mode 100755 index 0000000..5d2d7a0 --- /dev/null +++ b/php/index.php @@ -0,0 +1,172 @@ + + + + + + + +

CSCI 1200 Data Structures Fall 2023

+ + +

Instructors

+DS Instructor Mailing List *:
+
+ + +

+

Dr. Jidong Xiao

+Office: Amos Eaton 206
+ +Hours: Monday 2-3:50pm,
+       +     +immediately after lecture on Tuesdays & Fridays,
+       +     +and by appointment (send email with your complete schedule for the week, appointments are not for help with assignments) + +
+Webpage: http://www.cs.rpi.edu/~xiaoj8/
+ + +
+ + +

Instructional Support Coordinator: Shianne Hulbert

+ +

+DS Instructor Mailing List *:
+Email *:
+ + +
+ + +

+ +* For personal/confidential matters: +Please send all emails regarding +DS course policies and administration (e.g, registration, excused +absenses, personal accommodations, etc.) to the DS Instructor Mailing +List, which is received by both the Instructor and the Instructional +Support Coordinator. +
+
+

+ +

+ +For general course questions: +Please use the + + Discussion Forum. This allows us to most efficiently +answer questions that other students may also have. Thank you! +
+
+

+ + + +
+ + +

Graduate Student Teaching Assistants / Course Assistants

+ + + +

+Conor Flynn
+Email:
+

+
+

+Yuxuan Zhu
+Email:
+

+
+

+Matthew Pisano
+Email:
+

+
+

+Shuhang Tan
+Email:
+

+
+

+Ron Rattanakornphan
+Email:
+

+
+

+Kajsa Arnold
+Email:
+

+
+
+ +

 

+ + +

+See the weekly schedule page for office +hours and check +the Discussion +Forum for any announcements of changes to the office hours schedule. + +

+ + + +

 

+ + + + + diff --git a/php/installation_test.php b/php/installation_test.php new file mode 100755 index 0000000..90b156a --- /dev/null +++ b/php/installation_test.php @@ -0,0 +1,298 @@ + + + + + + + + + +
+ + +

Simple Test of Compilation

+ + +
    + +
  1. +

    +To check that you're good to go, download this simple program and save +it into your data structures course directory: +

    + +temperature.cpp +
    +
    + +
  2. +

    +Open a terminal and change directory to navigate to your data structures directory: +

    + +
    +    cd INSERT_DATA_STRUCTURES_DIRECTORY_NAME
    +
    +
    + +
  3. +

    +Confirm you're in the right location by listing the directory contents typing: +

    + +
    +    ls
    +
    +
    + +

    +You should see the file temperature.cpp and maybe some other stuff. +

    + + +
  4. +

    +Compile the temperature program by typing: +

    + +
    +  g++ -Wall -g temperature.cpp -o temperature.out
    +
    +
    + +

    +(Alternatively, use clang++ instead of g++.) This +should creates an executable named temperature.out. Type ls +again to confirm the executable appeared! +

    + +
  5. +

    +Now run that executable: +

    +
    +  ./temperature.out
    +
    +
    + +

    +And you should be able to interact with this program at the keyboard. +

    +
+ + + 
+ + +

Simple Test of Terminating an Infinite Loop

+ + +
    + +
  1. +

    +Download and save this file to your data structures directory: +

    + +infinite_loop.cpp +
    +
    + +
  2. +

    +Compile and run this program. It should start printing dots and not +stop. +

    + +
  3. +

    +Now let's confirm that your computer is spending alot of CPU resources +on this infinite loop. We'll view the list of all programs running on +your computer sorted by CPU usage. +

    + + + + +
  4. +

    +Confirm that you can terminate the runaway program by pressing Ctrl-c. +

    + +
+ + + + 
+ + +

Simple Test of Memory Debugger Installation & Usage

+ +
    +
  1. +

    +Download and save this short (intentionally buggy) program: +

    + +memory_bugs.cpp +
    +
    + +
  2. +

    +Follow the instructions for your system to compile and run this program for +Memory Debugging. +

    + +
  3. +

    +Now run the program under the memory debugger and locate the report +generated by the memory debugger. (It may be printed directly to the +terminal and/or saved to a file.) +

    + +
+ +

+NOTE: The memory debugger report contains lots of data which can +be intimidating the first time you see it. This tiny program has 4 +different errors! We'll discuss the code, and the errors, and how to +understand this report a few weeks into the term. +

+ + + + + 
+ + + +

Simple Test of the Traditional Debugger

+ +
    + +
  1. Launch the temperature program (or another executable) inside of the gdb debugger: +

    + +
    +    gdb ./temperature.out
    +
    +
    + +
  2. At the gdb prompt, start the program:

    + +
    +    run
    +
    +
    + +
  3. If the program is still running, press Ctrl-C. To see the +stack backtrace of the program (listing the functions you are in the +middle of), type: +

    + +
    +    bt
    +
    +
    + +
  4. +Finally, close gdb: + +

    +    quit
    +
    +
    + +

    +(You will have to press 'y' if the program is still running.) +

    + +
+ + +

+If you're using LLVM's clang++ instead of g++, you'll also use LLVM's +lldb instead of gdb. The above commands are the +same (just substitute lldb for gdb), and many of the +other commands are similar: +

+ +

+     +A handy table of the different gdb/lldb commands +

+
+ +

+NOTE: The traditional debugger has many powerful features that you +should learn over the term. Follow online tutorials and ask for help +in lab and office hours to most effectively debug your programming +assignments. +

+ + + + + + 
+ + + diff --git a/php/lecture_polls.php b/php/lecture_polls.php new file mode 100755 index 0000000..4e04212 --- /dev/null +++ b/php/lecture_polls.php @@ -0,0 +1,89 @@ + + + + + + + + + +
+ + +

+We will use Submitty to collect answers to simple multiple-choice +questions during lecture (Tuesdays & Fridays). These lecture +participation polls help increase engagement in lectures and allow the +instructor to gauge student understanding & absorption of the +material. You are encouraged to discuss the questions with the +classmates sitting around you. +

+ +

Participation Incentives

+ +

+Lecture participation polls will not be directly factored into the +semester grade. However, as an incentive for participation and correct +answers to these exercises, students will be able to earn extra + +homework late days. +

+ + +

+We will generally have 4-6 lecture participation poll questions per lecture. +Participation in a poll question (no correct answer) is worth 1.0 +points. A correct answer on a non-poll question is worth 1.0 points. +An incorrect answer on a non-poll question is worth 0.5 points. No +answer on either a poll or non-poll question is 0.0 points. +

+ +

+After earning your first 15.0 lecture participation points, you will receive +an extra homework late day. And for every 30.0 lecture participation points after +that you will receive one additional homework late day. Earned late +days may not be applied to previous homeworks. You must have earned +the late day before the homework deadline in order to use the late day +on that assignment. Specifically, if your poll participation during a Friday +lecture earn you a late day, you may not use that late day on the +assignment that was due the night before. +

+ + +

Academic Dishonesty

+ +

+Responding to lecture poll questions with another +individual's account +constitutes academic dishonesty. +If we find anyone submitting answers or using the account of another +individual we will zero the lecture participation points of all +involved students and report the incident to the Dean of Students. +

+ + + + diff --git a/php/memory_debugging.php b/php/memory_debugging.php new file mode 100755 index 0000000..2e6772b --- /dev/null +++ b/php/memory_debugging.php @@ -0,0 +1,583 @@ + + + + + + + + + +
+ +

+Segmentation faults and other memory bugs (reading uninitialized +memory, reading/writing beyond the bounds of an array, memory leaks, +etc.) can be hard to track down with a traditional debugger. Memory +errors can be elusive, and may not cause the program to crash +immediately. A program with memory errors may even appear to work +correctly on some datasets or on some machines. +

+ +

We recommend using a special debugger to find memory errors, for +example Dr. Memory or +Valgrind. Commercial +versions of these tools include Purify and +Insure++. +

+ +

We'll discuss the Dr. Memory and Valgrind memory debugging tools +and the memory error reports these tools produce at the end of Lecture +7 and during Lab 5. You'll be expected to use one of these tools for +debugging starting with Homework 3. The homework submission server +and the TAs will use these tools for grading your homework. + +

+ Note that running a program under Dr. Memory or Valgrind will slow the + execution time significantly. The final step to check for memory + leaks is especially costly. We recommend starting with the the + smallest tests/input file, even if those appear to be working ok. + Fix any memory errors or leaks that are found, then work your way + to largest test cases, and be patient. + +

+ + + + + +

Dr. Memory

+ +

+Dr. Memory is available for +GNU/Linux, Microsoft Windows, and MacOS operating systems. For +questions, bug reports, and discussion, use the Dr. Memory Users +group: + +http://groups.google.com/group/drmemory-users + +

+ +

+Please report issues with Dr. Memory to the + +Dr. Memory Users Group by email: +drmemory-users@googlegroups.com. Be sure to include details +about your operating system and the Dr. Memory version number. Don't +send your full homework submission (it is a public mailing list). +

+ + +

Dr. Memory on GNU/Linux or Windows Subsystem for Linux (WSL)

+ + +
    +
  1. +

    +Obtain the most recent Dr. Memory tar.gz file for your operating system from:
    +https://github.com/DynamoRIO/drmemory/releases/ + +

    + +

    +In the example below, we assume + + DrMemory-Linux-2.4.0-2.tar.gz + is the most recent release. +

    + +

    +Type these commands into your terminal:
      +

    + +
    +  cd
    +
    +  wget https://github.com/DynamoRIO/drmemory/releases/download/release_2.4.0/DrMemory-Linux-2.4.0-2.tar.gz
    +
    +  tar -xvzf DrMemory-Linux-2.4.0-2.tar.gz
    +
    +
    + +
  2. +

    +Build your application with debug information by using the -g option. For example: +

    + +
    +  g++ -g main.cpp foo_main.cpp foo_other.cpp -o foo.out
    +
    +
    + +
  3. +

    +Run your program under Dr. Memory, replacing foo.out arg1 arg2 with your executable name and any + command line arguments: +

    + +
    +  ~/DrMemory-Linux-2.4.0-2/bin64/drmemory -brief -- foo.out arg1 arg2
    +
    +
    + +
  4. +

    +Dr. Memory will report errors to the screen as it runs. It will print +a summary at the end of what it found. +

    + + +
  5. +

    +OPTIONAL: +Add Dr. Memory to your PATH by typing this at the WSL bash prompt: +

    + +
    +  echo 'PATH=$PATH:~/DrMemory-Linux-2.4.0-2/bin64' >> ~/.bashrc
    +
    +  source ~/.bashrc
    +
    +
    + +

    +NOTE: Do not attempt to edit WSL system files from Windows. The +permissions and filesystem will get messed up and you'll need to +reinstall everything to recover. +

    + +

    +After adding Dr. Memory to your PATH, you can simply type: +

    + +
    +  drmemory -brief -- foo.out arg1 arg2
    +
    +
    + +
+ + +

Dr. Memory on MacOS

+ +

+Note: Dr. Memory has not yet been updated to run on the Mac M1/M2 ARM processors. +

+ +
    +
  1. +

    +Obtain the most recent Dr. Memory tar.gz file for your operating system from:
    +https://github.com/DynamoRIO/drmemory/releases/ + +

    + +

    +In the example below, we assume + + DrMemory-MacOS-2.4.0-2.tar.gz + is the most recent release. +

    + +
  2. +Save the package to a directory of your choice. Then untar the package by typing: +

    +
  3. + +
    +  tar -xvzf DrMemory-MacOS-2.4.0-2.tar.gz
    +
    +
    + + +
  4. Be sure to build your application with debug information, the -g option, + so you get line numbers. For example: +

    +
  5. + +
    +  g++ -g main.cpp foo_main.cpp foo_other.cpp -o foo.out
    +
    +
    + + +
  6. +Run your program under Dr. Memory, replacing foo.out arg1 arg2 +with your executable name and any command line arguments: +

    +
  7. + +
    +  ~/DrMemory-MacOS-2.4.0-2/bin64/drmemory -brief -- ./foo.out arg1 arg2
    +
    +
    + +
  8. Dr. Memory will report errors to the screen as it runs. It will print a + summary at the end of what it found. +

    + + +
  9. + OPTIONAL: Edit +your ~/.zshrc file to add the location of the DrMemory + executable to your PATH.

    + +

    + Open this file, or create an empty +file if you have none. Edit your PATH variable to insert full path for the +DrMemory bin64 directory. The PATH is the sequence + of directories (separated by ':') that are checked when you run a program. +For example:

    + +
    +  export PATH=$HOME/bin:/usr/local/bin:/Users/INSERT-YOUR-USERNAME/DrMemory-MacOS-2.4.0-2/bin64/
    +
    +
    + +

    +Make sure to replace INSERT-YOUR-USERNAME and +DrMemory-YourOperatingSystem-VersionXX. Close and re-open your +terminal. Then you can simply type: +

    + +
    +  drmemory -brief -- foo.out arg1 arg2
    +
    +
    + + + +
+ + + + +

Installing Dr. Memory on Windows (not Windows Subsystem for Linux (WSL))

+ +
    +
  1. Obtain Dr. Memory. To easily place it on the system path, +use the installer (the .msi file). Alternatively, you can +instead obtain the .zip file for a local install.
    + +https://github.com/DynamoRIO/drmemory/wiki/Downloads + +

    + + +
  2. +Double click on the .msi file to run the installer. +Click Next. +

    + +

    +Check the box to accept the license and click Next. +

    + + +

    +The default location for Dr. Memory installation is fine +(it's probably C:\Program Files (x86)\Dr. Memory\ for 64-bit Windows). +Click Next. +

    + + +

    +Then click Install. You'll be asked to confirm that you want to make +administrative changes to the machine. +

    + +

    +After a quick installation, press Finish. +

    + +
  3. +Follow the instructions below to compile & run your program +using the Visual Studio IDE or the Visual Studio Command +Prompt. +

    + +
+ +

Dr. Memory and Visual Studio

+ +

+You can use Dr. Memory with the Microsoft Visual Studio compiler: +

+ +
    + + +
  1. Build your application as 32-bit with Visual Studio (32-bit is +the default). Be sure to include debug information. You can verify +that you are including debug information by looking at the properties +of your build target: +

    + +

    Press Alt-F7 to bring up the configuration properties. +Under "Configuration Properties | C/C++ | General", the "Debug +Information Format" entry should either say "Program Database (/Zi)" +or "Program Database for Edit and Continue (/ZI)". Additionally, under +"Configuration Properties | Linker | Debugging", the "Generate Debug +Info" entry should say "Yes (/DEBUG)". +For Visual Studio 2015, under "Configuration Properties | Linker | +Debugging", the "Generate Debug Info" entry should say "Optimize +for debugging (/DEBUG)" -- it should not say "Optimize +for faster linking (/DEBUG:FASTLINK)". +

    + +
  2. Disable Runtime Checks: The Visual Studio compiler's +/RTC1 flag can prevent Dr. Memory from reporting +uninitialized reads of local variables, and the /RTC1 checks +for uninitialized reads themselves may not catch everything that +Dr. Memory finds. However, /RTC1 does perform additional +stack checks that Dr. Memory does not, so for best results, your +application should be run under Dr. Memory without /RTC1, and +run natively (for development & testing without Dr. Memory) with +/RTC1.

    + +

    In the Visual Studio IDE, press Alt-F7 and then under +"Configuration Properties | C/C++ | Code Generation" ensure "Basic +Runtime Checks" says "Default". +

    + +
  3. +

    The most recent Dr. Memory installer (for version 1.8 and later) +configures Dr. Memory as a Visual Studio "External Tool", which adds a +new menu item allowing you to run Dr. Memory within the IDE. +

    + +

    +Now you can select the "Tools | Dr. Memory" menu item and Visual +Studio will run your application under Dr. Memory. You can add +arguments to your application in the box that pops up immediately +after selecting the men item by adding them at the end, after "$(TargetPath)". +

    + +
  4. The output of Dr. Memory (along with your program) will be +printed to the Visual Studio Output Window. Dr. Memory will report +errors to the screen as it runs. It will print a summary at the end +of what it found. You can double-click on a source file on any +error's callstack frame in order to automatically open up that file to the +line number indicated.

    + +
+ + +

Using the Visual Studio compiler without the Visual Studio Integrated +Development Environment (IDE)

+ + +
    + +
  1. +

    +Launch the Visual Studio Command Prompt. From the Start menu, +under All Programs, find your Visual Studio version (e.g., 2010) and +expand it. Then expand Visual Studio Tools. Select the "Visual +Studio 2010 Command Prompt". (You don't want the x64 or Cross Tools +versions.) +Note: this is not the Cygwin shell. +

    + +

    This Command Prompt is a cmd shell in which a batch file that +comes with Visual Studio has been executed. This batch file is called +vcvars.bat and it sets up the path and environment variables +needed to run the compiler from the command line. +

    + +

    +Note: You can extract the environment variables from the batch file and set them +up in your .bashrc so you can build from a shell. +

    + +
  2. At the command line, change to the directory containing your +source files. +

    + +
  3. + Run the compiler, which is called "cl". This will build +hw.exe from all .cpp files in the current directory: +

    +
  4. + +
    +  cl /Zi /MT /EHsc /Oy- /Ob0 /Fehw.exe *.cpp
    +
    +
    + +
  5. +

    + If you installed Dr. Memory before you opened the Command Prompt, you + can run drmemory from the same prompt. + Run this command, replacing foo.exe arg1 arg2 + with your executable name and any command line arguments: +

    +
  6. + +
    +  drmemory -brief -batch -- foo.exe arg1 arg2
    +
    +
    + +

    +If you don't see any extra output from Dr. Memory as your program +runs, remove the -batch flag and the Dr. Memory output will be sent to +a file and notepad will launch automatically to display this file. +

    + + +
    +  drmemory -brief -- foo.exe arg1 arg2
    +
    +
    + +
  7. +Dr. Memory will print a summary at the end of what errors it found. +

    + +
+ + + + + +

Valgrind

+ +

+Valgrind only works on Unix-based +systems (e.g., GNU/Linux, FreeBSD, and WSL). + +

+Unfortunately, Valgrind does not work on more recent versions +of MacOS (it only runs on MacOS 10.12 or earlier). + +

+Valgrind does not work on Cygwin because Cygwin +emulates UNIX at the library layer, but Valgrind operates at the +system call layer and the Windows system calls are significantly +different than UNIX system calls. +

+ +

+To use Valgrind... +

+ + +
    + +
  1. +

    +Valgrind is installed by default on most Linux distributions. +

    + +
  2. Your program should be compiled with debug information enabled + by specifying the -g flag. For example: +

    +
  3. + +
    +  g++ -g main.cpp foo_main.cpp foo_other.cpp -o foo.out 
    +
    +
    + +
  4. Then run the program by adding Valgrind to the beginning of +your command line (replace foo.out arg1 arg2 with your +program name and any command line arguments for your program): +

    +
  5. + +
    +  valgrind --leak-check=full --show-reachable=yes ./foo.out arg1 arg2
    +
    +
    + +

    +If that example run of your program contains any memory errors +Valgrind will output information to help you track down the error. +Note that using Valgrind can significantly slow down execution time as +it inspects every memory action. You may need to craft a smaller test +case that exhibits the same bug you would like to solve. +

    + +
+ +

+Note: Because some STL classes (including string) use their +own allocators (and do other optimization tricks), there may be a +warning about memory that is ``still reachable'' even though you've +deleted all your dynamically allocated memory. The newer versions of +Valgrind automatically suppresses some of these common false positive +errors, so you may see this listed as a ``suppressed leak''. +

+ + + +

Suppression of False Positives in Valgrind

+ +

+If you see false positive error messages in Valgrind, you will +probably want to create an error suppression file to allow you to focus on your actual errors. +

+ +
    +
  1. Add the --gen-suppressions=all option to the valgrind command line:

    +
  2. + +
    +  valgrind --leak-check=full --gen-suppressions=all ./foo.out arg1 arg2
    +
    +
    + +
  3. +

    + For each false positive (an error not obviously pointing at your + code), copy-paste the suppression text (a block of text in curly + braces) into a new file containing your custom suppressions, let's + call it my_suppressions.txt.

    + +

  4. Use that suppression file every time you run Valgrind: +
  5. +
    +  valgrind --leak-check=full --suppressions=my_suppressions.txt ./foo.out arg1 arg2
    +
    +
    + +
  6. You may need to add to that file in the future, when you use +additional library functions that cause different false positive errors.

    + +
+ +

+Read more about Valgrind suppressions here:
+ +http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress +

+ + + + diff --git a/php/programming_information.php b/php/programming_information.php new file mode 100755 index 0000000..6b853b9 --- /dev/null +++ b/php/programming_information.php @@ -0,0 +1,363 @@ + + + + + + + + + +
+ +

+The following C++ programming details will helpful in completing the +initial homeworks for the course. +

+ +

Command Line Arguments

+ +

+Most of the programs we write will expect additional information from +the user when the program is launched. We will do this by providing +this data on the command line: +

+ +
+  ./my_program.exe blue 3.14159 my_input_data_file.txt my_output_data_file.txt
+
+
+ +

+In order for your program to receive arguments from the command line, +you will make use of the optional arguments to the main +function. Here is the prototype: +

+ +
+  int main(int argc, char* argv[])
+
+
+ +

The parameter argc contains the number of strings on the +command line, including the executable name. For the example above, +argc = 5. The array argv stores those C-style +strings. You can access the executable name with +argv[0] and the arguments with argv[1], +argv[2], etc.

+ +

+Important Note: To compare command line argument strings +using the == operator, you must cast this data to a + STL C++-style string: +

+ +
+  if (std::string(argv[1]) == std::string("blue")) {
+     std::cout << "my favorite color is blue too!" << std::endl;
+  }
+
+
+ +

Command Line Arguments in Visual Studio

+ +

+You can also specify command line arguments when running the program +inside of the Visual Studio development environment. Go to "Project" +→ "Properties" → "Configuration Properties" → "Debugging" and in +"Command arguments" enter: +

+ +
+  blue 3.14159 my_input_data_file.txt my_output_data_file.txt
+
+
+ +

+Note, that the default directory for files is the working directory. +

+ + +

Converting a C/C++ String to an Integer or Floating Point Value

+ +

+ +This is done using the atoi (char-to-integer) and atof +(char-to-float) functions. First, be sure to #include +<cstdlib>. Then, to convert a C++-style STL +std::string variable to an int:

+ +
+  std::string my_stl_string = "17";
+  int x = atoi(my_stl_string.c_str());
+
+
+ +

+Alternatively, if you are compiling with C++11 (or greater) you can use +a similar C++ version of this function: + + +

+  std::string my_stl_string = "17";
+  int x = std::stoi(my_stl_string);
+
+
+ + +

+And to convert C-style char array (C-style string) to a float: +

+ +
+  char* my_char_string = argv[2];
+  float y = atof(my_char_string);
+
+
+ +

+Or similarly, std::stof. +

+ + +

Reading From & Writing To Files

+ +

The STL streams std::cin & std::cout are used to +read data from and write data to the "console". Often, we would +rather read data from a file and/or write the output to a file. We +can do this using the STL file stream library:

+ +
+  #include <fstream>
+
+
+ +

+Here's an example fragment of code that attempts to open an input +file stream for a file name specified on the command line above: +

+ +
+  std::ifstream in_str(argv[3]);
+
+
+ +

+It is good coding practice to verify that the input stream was +successfully opened: +

+ +
+  if (!in_str.good()) {
+    std::cerr << "Can't open " << argv[3] << " to read.\n";
+    exit(1);
+  }
+
+
+ +

+Likewise here's how to open a stream for output: +

+ +
+  std::ofstream out_str(argv[4]);
+  if (!out_str.good()) {
+    std::cerr << "Can't open " << argv[4] << " to write.\n";
+    exit(1);
+  }
+
+
+ +

+Once the streams are created, you can use in_str & +out_str just like you use std::cin & +std::cout. +

+ +

+In general, for this course, we encourage you to use the stream +operator>> for all input parsing, rather than using +getline, eof, getc, etc. We will not deduct +points for using the other methods of parsing, but we have designed +the assignment input format specifications for easy parsing with >>. +

+ +

Note that the following code has a bug. If the input file ends +with one or more extra newlines, the inner loop will "do something" +with the last successfully read element twice. It is important to +check the return value of each >> expression to be sure +the read was successful. +

+ +
+  while (!in_str.eof()) {
+    in_str >> my_variable;
+    // do something with my_variable
+  }
+
+
+ +

+A simpler and more robust way to write the same code is: +

+ +
+  while (in_str >> my_variable) {
+    // do something with my_variable
+  }
+
+
+ +

File Parsing Example with different data types

+ +

+For example, if your input file contains family last name, number of children, and ages of the children: +

+
+  Smith   3   4.5   6.0   8.1
+  Jones   1  13.6
+  Lee     2   1.5   4.2
+
+
+ +

+Here is code to read all of this data: +

+ +
+  std::string last_name;
+  int num_children;
+  std::vector<float> ages;
+  float tmp;
+  while (in_str >> last_name) {
+    in_str >> num_children;
+    // error checking to make sure num_children is not negative
+    assert (num_children >= 0);				  
+    // clear out ages data from the last family
+    ages.clear();  
+    for (int i = 0; i < num_children; i++) {
+       in_str >> tmp;
+       ages.push_back(tmp);
+    }				  
+    // Do something interesting with the last_name and ages variables!
+  }
+
+
+ +

+Note that we do not use getline or attempt to find a newline +character, so we are not relying on the newlines or spaces or tabs +being in specific places in the file. We only assume that data is +consistent -- the number of children is non-negative and the number of +floats matches the specified number of children. We could do more +error checking on each >> operation to make sure each read did not +fail, but most of the time in this course its ok to assume the input +won't be terribly broken. If there is an error in the input, this +code will get confused and break or crash. Robustly handling all +broken input is beyond the scope of this course. + + + +

Comparing Two Text Files

+ +

To check the correctness of your program, you can compare your +output text file to the provided sample output text file using the +UNIX utility diff (available on Linux & WSL & MacOSX): +

+ +
+  diff my_output.txt sample_output.txt
+
+
+ +

Any lines in the two files that are not identical (including +whitespace), will be printed to the console. WinDiff is another +option for Windows users. Please see a TA or the instructor in office +hours if you have a question about these programs. +

+ +

Redirecting Input & Output

+ +

What if you have an interactive program that uses +std::cin & std::cout to read from and write to the +"console", but you'd like to take the input from a file and you'd +rather not rewrite the program to use the input & output streams +described above? This following trick is handy for repeated testing +and debugging an interactive program (you'd rather not have to +manually type in the same input test data many times). Asking the +executable to read from a file instead of the console and/or write to +a file instead of the console is called I/O redirection.

+ + + + + +

+You can do the same thing in Visual Studio. (See section on "Command Line +Arguments in Visual Studio" above). +

+ + + + diff --git a/php/references.php b/php/references.php new file mode 100755 index 0000000..5989423 --- /dev/null +++ b/php/references.php @@ -0,0 +1,139 @@ + + + + + + + + + +
+ +

+The lecture notes posted on this website will be a complete but terse +presentation of the material covered in the course. You are +encouraged to make use of additional reference material to explain any +material you find confusing in more depth. +

+ +

Textbooks

+ +

+The following books are optional (recommended but not +required). The course will follow primarily the order of Ford +and Topp. Some of the lectures are based on material in Koenig and +Moo. Students are encouraged to have available a C++ reference book, +such as those by Malik or Stroustrup, and/or use on-line reference +material. +

+ + + +

Web Resources

+ +

+Here are several websites you should find helpful. Feel free to +search for and share other web resources. +

+ + + + +

 

+ + +

+ +See the Helpful C++ Programming Notes +page for information on C++ command line arguments, file I/O, and +redirecting standard input & output to files. + +

+ + + diff --git a/php/schedule.php b/php/schedule.php new file mode 100755 index 0000000..73f08b5 --- /dev/null +++ b/php/schedule.php @@ -0,0 +1,360 @@ + + + + + + + + + +

Weekly Lab & Office Hours Schedule

+ + +

+Please attend your assigned lab section and get to know your lab TA, +the undergraduate mentors, and the other students in your lab section. +Contact your graduate lab TA in advance to re-schedule if you +can't make your lab section for a particular week. + +NOTE: Requests for extensions for homework assignments or makeup exams + must be +verified +by the appropriate office, who will send a written note to +the course instructor. +

+ +

+Your graduate lab TA is your first point of contact for this course. +You may also attend the office hours of any other TA or the instructor +for questions about the course material or the homework. If you have +questions about the grading of your homework, please see the TA who +graded your assignment during their regular office hours or make an +appointment. Please also check the Discussion Forum for announcements of schedule changes. +

+ +

When you seek help on a programming assignment from a TA or from +the instructor during office hours, you must arrive prepared with a +list of problems and questions. Students who are not prepared will be +turned away. +

+ +

+During busy office hours (Wednesday and Thursday office hours tend to +be the most crowded) we will be using the + + Submitty Office Hours Help Queue +to ensure that +everyone has a fair turn getting help. +

+ +
+ +

+ All times below are the + America/New York timezone. +

+ +
+ + + +Nate, & Osama",1,"11%"); +schedule_lab("2","10-11:50am","J-ROWL 2C30","Weiran","Youssef, Ethan,
Frank, & Marisa",1,"11%"); +schedule_lab("15","10-11:50am","PITTS 4114","Cameron","Paul, George,
Victor, & Wendy",1,"11%"); +blank(4);*/ + +schedule_lab("1","10-11:50am","Lally 102","Conor","Anthony, Daniel & Ryon",1,"11%"); //35 +schedule_lab("2","10-11:50am","Lally 104","Ron"," Sharat, Chaitanya & Xenia",1,"11%"); //35 +//schedule_lab("15","10-11:50am","Sage 4101","Connor","Evan, Niels & Ryon",1,"11%"); //35 +blank(4); +//schedule_alac("1/23","Wed 10:00-11:50am","ALAC tutoring space, 1st floor Library"); + +blank(4); +blank(4); +blank(4); +row_end(); + +row_begin(); +row_end(); + +/* -------------- 11 AM ----------------------------------------------------------------- */ + +row_begin("11am"); + +//schedule_misc("Homework Released",2); +row_end(); + +row_begin(); +row_end(); + +/* -------------- NOON ----------------------------------------------------------------- */ + +row_begin("12pm"); + +blank(4); + +/* +schedule_lab("3","noon-1:50pm","Lally 102","Cameron","Paul, Tyler,
George, & Abby(50%)",1,"11%"); +schedule_lab("4","noon-1:50pm","Lally 104","Tim","Eric P., Matt,
Vikram, & Abby(50%)",1,"11%"); +schedule_lab("11","noon-1:50pm","JROWL 2C30","Josh","Brian, Yang,
Ryan, & Wendy",1,"11%"); +blank(4); + +// Thursday +schedule_ta_officehours("12-2pm
TA: Tim
mentors: Hayes
& Osama

2-4pm
TA: Farhad
mentors: Abby,
Coen, & Matt
 
4-6pm
TA: Milo
mentors: Alex,
Grace, & Wendy"," 
Folsom Library
ALAC Tutoring Space
(SE corner of
lower level)",12); +*/ + +blank(4); +//Fu, Anthony, +schedule_lab("3","12-1:50pm","Lally 102","Conor","Jessica, Ronin & Ryon",1,"11%"); //35 +schedule_lab("4","12-1:50pm","Lally 104","Ron","Anthony, Amelia & Kiron",1,"11%"); //35 TBD1 +//schedule_lab("11","noon-1:50pm","Sage 4101","Connor & Xiaoyu","Amelia, Eleanor & Yash",1,"11%"); //18 +blank(4); + +// Thursday +//schedule_ta_officehours("12-1:50pm
mentors: Jack & Kajsa","VCC 208",8); +schedule_ta_officehours("12-1:50pm
mentors: Jack & Kajsa
VCC 208
 
2-3:50pm
mentors: Charles, Anna & Nicole
JEC 3210
 
4-5:50pm
TA: Ron
mentors: Jack & Nikul & Samir
JEC 4309
 
6-7:50pm
TA: Yuxuan
mentors: Braeden & Nicole & Kaelan
JEC 4309"," 
",16); + +//Folsom Library
ALAC Tutoring Space
(SE corner of
lower level) + +blank(4); +blank(4); + +row_end(); + +// 12:30 +row_begin(); +row_end(); + +/* -------------- 1 PM ----------------------------------------------------------------- */ + +row_begin("1pm"); +//schedule_instructor_officehours("Prof Cutler", "Lally 302","4","1-3pm"); +row_end(); + +row_begin(); +//schedule_instructor_officehours("Prof Plum", "Eaton 205","4","1-3pm"); +row_end(); + +/* -------------- 2 PM ----------------------------------------------------------------- */ + +row_begin("2pm"); +schedule_instructor_officehours("Jidong", "AE 206","4","2-3:50pm"); + +//schedule_lecture("2-3:50pm","DCC 308"); +//schedule_lecture_split("9-16","2-3:50pm","DCC 308"); +//schedule_instructor_officehours("Prof Plum*","See footnote",1,"1:45-2:15pm"); +//schedule_lecture("2-3:50pm","ONLINE"); +schedule_lecture("2-3:50pm","West Hall Auditorium"); + +/*schedule_lab("5","2-3:50pm","Lally 102","Milo","Alex, Anshul,
Tyler, & Sinclair(50%)",1,"11%"); +schedule_lab("6","2-3:50pm","Lally 104","Tim","Julian, Terry,
Victor, & Sinclair(50%)",1,"11%"); +schedule_lab("12","2-3:50pm","Eaton 216","Jianhui","Coen, Grace & Andrea",1,"11%"); + +schedule_ta_officehours("4-6pm
TA: Maurício
mentors: Hayes,
Sinclair, & Winona
 
6-8pm
TA: Milo
mentors: Cass,
Eric W., & Jakob"," 
J-ROWL 2C30
",8); +*/ + +//Tyler B., Ryon, Yash, Ali, Maryellen, Theodore, Jody, Jessica +schedule_lab("5","2-3:50pm","Lally 102","Shuhang","Alexander, Quinn & Eleanor",1,"11%"); //35 +schedule_lab("6","2-3:50pm","Lally 104","Yuxuan","Ronin, Shimu & Nikul",1,"11%"); //35 +//schedule_lab("12","2-3:50pm","Sage 4101","Abby & Nia","David, Samir, & Xenia",1,"11%"); //34 + +blank(4); +blank(4); + +//schedule_lecture_split("9-16","2-3:50pm","DCC 308"); +//schedule_lecture_split_andrew("9-16","2-3:50pm","DCC 308","Andrew A.","2-2:50pm","DCC 235"); +//schedule_instructor_officehours("Prof Plum*","See footnote",1,"1:45-2:15pm"); +//schedule_lecture("2-3:50pm","ONLINE"); +schedule_lecture("2-3:50pm","West Hall Auditorium"); +row_end(); + +row_begin(); +//blank(1); +//blank(1); +row_end(); + +/* -------------- 3 PM ----------------------------------------------------------------- */ + +row_begin("3pm"); +//blank(2); +//schedule_instructor_officehours("Prof Xiao", "Eaton 206","4","3-5pm"); +//schedule_early_officehours("9-16","2-3:50pm","DCC 308","Andrew A.","2-2:50pm","DCC 235"); +//blank(2); +//blank(2); +row_end(); + +row_begin(); +//blank(1); +row_end(); + +/* -------------- 4 PM ----------------------------------------------------------------- */ + +row_begin("4pm"); + +//monday 4-6 +//blank(4); + +//schedule_instructor_officehours("Prof Cutler","DCC 308/Lobby"); +blank(4); + +/* +schedule_lab("7","4-5:50pm","Lally 102","Milo","Jakob,
Nick, Zixiang,
& Eric W.(50%)",1,"11%"); +schedule_lab("8","4-5:50pm","Lally 104","Farhad","Coen,
Julian, Vikram,
& Eric W.(50%)",1,"11%"); +schedule_lab("13","4-5:50pm","Sage 3101","Jianhui","Coen, Ruijie,
Grace & Jared",1,"11%"); + +schedule_ta_officehours("TA: Cameron
mentors:
Alec & Rutvik","J-ROWL 2C30",4,"4-6pm");*/ + +blank(4); +//Aditya, Ryon, Yash, Joyce, Nia, Jack, Jessica +schedule_lab("7","4-5:50pm","Lally 102","Shuhang","Kaelan, Quinn & Xenia",1,"11%"); //35 +schedule_lab("8","4-5:50pm","Lally 104","Matthew","Daniel, Kiron & Charles",1,"11%"); //35 +//schedule_lab("13","4-5:50pm","Sage 4101","Mike","Aaryaman, Aleksander & Charles",1,"11%"); //34 + +//schedule_ta_officehours("4-5:50pm
TA: Abby & Bishwajit
mentors: Jaeseok, Sophia & Terry
 
6-7:50pm
TA: Kacy
mentors: Kaelan & Nyx","
Folsom Library
ALAC Tutoring Space
(SE corner of
lower level)",8); +schedule_ta_officehours("4-5:50pm
mentors: Smayan & Kajsa & Samir
AE 216
 
6-7:50pm
TA: Shuhang & Conor
mentors: Braeden","AE 216",8); + +blank(4); +schedule_ta_officehours("4-5:50pm
mentors:
Shimu & Amelia","Sage 4510",4); + +row_end(); + +row_begin(); +row_end(); + +/* -------------- 5 PM ----------------------------------------------------------------- */ + +row_begin("5pm"); +row_end(); + +row_begin(); +row_end(); + + +/* -------------- 6 PM ----------------------------------------------------------------- */ + +row_begin("6pm"); + +//schedule_alac_officehours("ALAC Review Session
Start date: TBD","6-8pm","Sage 3101",4); + +/* +schedule_ta_officehours("TA: Tim
mentors:
Andrew & Nate","J-ROWL 2C30",4,"6-8pm"); +schedule_ta_officehours("TA: Cameron
mentors:
Grace & Rutvik","J-ROWL 2C30",4,"6-8pm"); + +schedule_lab("9","6-7:50pm", "Lally 102","Maurício","Nick,
Terry, & Zixiang",1,"11%"); +schedule_lab("14","6-7:50pm", "Lally 104","Farhad","Anshul,
Ryan, & Andrew",1,"11%"); +schedule_lab("10","6-7:50pm","Sage 3101","Ayushi","Greg, Wilson G. & Ritz",1,"11%"); +schedule_lab("16","6-7:50pm", "Eaton 216","Maurício","Nick,
Terry, & Zixiang",1,"11%"); + +schedule_ta_officehours("TAs: Farhad & Maurício
mentors: Cass,
Ryan, & Winona", +" 
6-8pm
J-ROWL 2C30",4); +*/ + +schedule_ta_officehours("TA: Matthew
mentors:
Anna & Alexander","AE 215",4,"6-7:50pm"); +schedule_ta_officehours("TA: Yuxuan
mentors:
Eleanor & Smayan","AE 216",4,"6-7:50pm"); + +//Justin, Joyce, Nia, Spencer +schedule_lab("9","6-7:50pm", "Lally 102", "Matthew","Jessica, Chaitanya & Sharat",1,"11%"); +//schedule_lab("10 & 14 & 16","6-7:50pm", "Lally 104","TBD","TBD",2,"11%"); //22+7+10 = 39 +//schedule_lab("10","6-7:50pm", "Lally 104","James","David, Jody & Veevek",1,"11%"); +//schedule_lab("14 & 16","6-7:50pm","14: Sage 5101
16: Sage 4101","14: Mike
16:Yizhou","14:Justin, Rohan & Sophia
16:Aaryaman, Henry & Xenia",1,"11%"); +//schedule_lab("16","6-7:50pm", "Eaton 216","TBD","TBD",1,"11%"); +//schedule_ta_officehours("6-7:50pm
TA: Shuhang
mentors: Braeden & Samir","AE 216",8); + +blank(4); +schedule_testblock("Location: TBA
","6-7:50pm
exam weeks only","12%"); +//blank(4); + +//schedule_ta_officehours("TA: TBD
mentors: TBD
","Folsom Library
Lower Level
ALAC Tutoring",4,"6-7:50pm",1,"12%"); +blank(4); + +row_end(); + +row_begin(); +row_end(); + + +/* -------------- 7 PM ----------------------------------------------------------------- */ + +row_begin("7pm"); +row_end(); + +row_begin(); +row_end(); + +/* -------------- 8 PM ----------------------------------------------------------------- */ + +//row_begin("8pm"); +/*schedule_alac("start date","8-10pm","location");*/ + +//schedule_alac("1/19","8pm-10pm","Lally 102 (ALAC), AE 118 (CS Mentoring)"); +//blank(4); + +//schedule_alac("1/19","8pm-10pm","Lally 102 (ALAC), Lally 104 (CS Mentoring)"); +//blank(4); + +//schedule_alac("1/20","8pm-10pm","ONLINE (Office Hours Queue)", 4); +//schedule_ta_officehours("mentors: TBD
","Lally 104",4,"8-9:50pm",1,"20%"); +//schedule_alac("1/19","8pm-10pm","Lally 102 (ALAC), AE118 (CS Mentoring)",4); +//blank(4,4); + +//schedule_alac("1/20","8pm-10pm","ONLINE (Office Hours Queue)", 2); +//schedule_ta_officehours("mentors: TBD
","Amos Eaton 118",4,"8-9:50pm",1,"12%"); +//schedule_alac("1/19","8pm-10pm","Lally 102 (ALAC), AE118 (CS Mentoring)",2 ); +//blank(4,2); + +//blank(4); +//row_end(); + +//row_begin(); +//row_end(); + +/* -------------- 9 PM ----------------------------------------------------------------- */ + +//row_begin("9pm"); +//row_end(); + +//row_begin(); +//row_end(); + +/* -------------------------------------------------------------------------------------- */ + + +?> + + +
+ + diff --git a/php/schedule_format.php b/php/schedule_format.php new file mode 100755 index 0000000..8824614 --- /dev/null +++ b/php/schedule_format.php @@ -0,0 +1,105 @@ +'.$text.'
'; + } else { + print ''.$file.'
'; + } +} + + +/*****************************************************************/ +/*****************************************************************/ +/*****************************************************************/ +function schedule_misc($what,$rowspan=4,$colspan=1){ + print ''.$what.''; +} + + +function schedule_lab($which,$time,$room,$ta,$mentors,$colspan=1,$width="100%") { +// print 'Lab Section '.$which.'
'.$time.'
'.$room.'
TA: '.$ta.'
mentors: '.$mentors.''; + print 'Lab Section '.$which.'
'.$time.'
'.$room.'
TA: '.$ta.'
mentors: '.$mentors.''; +} + +function schedule_lecture($time,$room,$rowspan=4) { + print 'Lecture
'.$time.'
'.$room.''; +} + +function schedule_testblock($time,$room) { + print 'Test Block
'.$time.'
'.$room.''; +} + +function schedule_instructor_officehours($who,$room,$rowspan=1,$time=null) { + if (isset($time)) { + print ''.$who.'
'.$time.'
'.$room.''; + } else { + print ''.$who.'
'.$room.''; + } +} + +function schedule_alac_officehours($alac,$room,$time,$rowspan,$width="100%") { + print ''.$alac.'
'.$room.'
'.$time.''; +} + + +function schedule_ta_officehours($ta,$room,$rowspan,$time=null,$colspan=1,$width="12%") { + if (isset($time)) { + print ''.$ta.'
'.$time.'
'.$room.''; + } else { + print ''.$ta.'
'.$room.''; + } +} + +function schedule_hybrid_ta_officehours($ta,$room,$rowspan,$time=null,$colspan=1,$width="12%") { + if (isset($time)) { + print ''.$ta.'
'.$time.'
'.$room.''; + } else { + print ''.$ta.'
'.$room.''; + } +} + +function schedule_studyspace($room,$rowspan,$time,$colspan=1) { + print 'study space
'.$time.'
'.$room.''; +} + +function schedule_alac($startdate,$time,$room,$colspan=1,$width="100%",$title="ALAC Drop In Tutoring") { + print ''; + print ''.$title.''; + print '
Start date: '.$startdate.''; + print '
'.$time.'
'.$room.''; +} + + + +function blank($rowspan=1,$colspan=1,$width=null) { + if (isset($width)) { + print ' '; + } else { + print ' '; + } +} + +function schedule_time($t) { + print ''.$t.''; +} + +function schedule_day($d,$width,$colspan=1) { + print ''.$d.''; +} + +function row_begin($time=null) { + print ''; + if(isset($time)) + schedule_time($time); + else + blank(1,1,"1%"); +} + +function row_end() { + print ''; +} + + +?> diff --git a/php/syllabus.php b/php/syllabus.php new file mode 100755 index 0000000..8074f65 --- /dev/null +++ b/php/syllabus.php @@ -0,0 +1,192 @@ + + + + + + + + + +
+ + +

Course Description

+ +

+This course covers fundamental data structures and their use in +programming. This includes both class design and features of the C++ +programming language. Much of our discussion will be built around the +design and use of the C++ standard library (STL). By using the +standard library, students will be able to write reasonably +sophisticated programs quickly. +

+ +

Learning Outcomes

+ +

+Students who have successfully completed this course will be able to: +

+ + + +

Prerequisites

+ +

+CSCI 1100 Computer Science I, equivalent university credit, +or a 5 on the AP Computer Science A Exam is the required (as of Spring 2023) +pre-requisite for this course. Here are the concepts that we assume +you have learned prior to taking CSCI 1200 Data Structures: +

+ + + +

Programming Languages: C++ vs. Java vs. Python

+ +

+The language used in this course is C++ but you do not need to know +C++ before taking this class. +

+ +

+The Computer Science I class at RPI is taught in the Python +programming language. Transitioning a solid foundation in problem +solving, computational thinking, and implementation to a new +programming language is an important skill for all computer +scientists. Once you are comfortable with your new programming +environment (code editor, compiler/interpreter, reference material, +etc.) you will soon be busily and productively coding again! +

+ +

+Similarly, many students enter this course having studied Java in +their high school AP Computer Science class. If you are a reasonably +proficient Java programmer, you should easily adapt to the differences +between the C++ and Java. +

+ +

+See also: Crash Course in C++ Syntax +

+ + +

Warning

+ +

+This course moves at a rapid pace and will likely be substantially +more difficult than your previous programming classes. The homework +assignments are challenging and students should start the assignments +as soon as they are posted, so there is plenty of time to ask the +instructor and TAs questions on the Discussion Forum and in office hours. Students +should not get behind at any point in the semester. Students +should work practice problems and study examples from lecture. +Working with other students and working with tutors and TAs are both +encouraged, but students need to be certain they understand the +material and can do problems on their own. +

+ +

+See also advice from + +Spring 2014 CSCI 1200 Data Structures students. +

+ +

+ + Be sure to click through the other pages linked in the upper right + menu. + +

+ + diff --git a/php/template_after.php b/php/template_after.php new file mode 100755 index 0000000..7dd01ad --- /dev/null +++ b/php/template_after.php @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/php/template_before.php b/php/template_before.php new file mode 100755 index 0000000..76277f7 --- /dev/null +++ b/php/template_before.php @@ -0,0 +1,678 @@ + + + Submitty Csci1200: Data Structures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to main content +
+
+ + +
+ + + +
+
+
+ +
+ + + + +
diff --git a/php/template_before_crash_course.php b/php/template_before_crash_course.php new file mode 100755 index 0000000..4cdac17 --- /dev/null +++ b/php/template_before_crash_course.php @@ -0,0 +1,676 @@ + + + Submitty Csci1200: Data Structures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to main content +
+ + + + +
+
+
+ +
+ + + + +
diff --git a/php/wsl.php b/php/wsl.php new file mode 100755 index 0000000..d0d481c --- /dev/null +++ b/php/wsl.php @@ -0,0 +1,390 @@ + + + + + + + + + +
+ +

+The instructions below apply only to those using Windows as their +primary operating system. We recommend WSL over Cygwin or VirtualBox +or dual booting Linux — unless you already know how to do that! See +C++ Installation Choices for Your +Operating System. +

+
+ +
    + +
  1. +

    +You'll need Windows 10, Version 1709 (2017 Fall Creators Update) or later to use WSL
    +You can check your version by going to Start Menu → Settings → System → About.
    +And under the "Windows specification" section, look for the "Version". +

    + +
  2. +

    +Turn on "Windows Subsystem for Linux":
    +Start Menu → Settings → Search for "Turn Windows features on or off".
    +From that menu, check the box next to "Windows Subsystem for Linux"
    +Also, check the box next to "Virtual Machine Platform" and
    +check the box next to "Windows Hypervisor Platform". +

    + +
  3. +

    +You'll need to reboot your computer now. +

    + +
  4. +

    +Go to the Microsoft Store, https://aka.ms/wslstore, +
    +Click "Open" to launch the store.
    +Choose the Ubuntu distribution, and press "Get" and "Install" to download. +

    + + +If you run into problems on this step, perhaps with errors about needing to update a kernel, you can try these steps manually: +
      +
    • Open an Administrator Powershell and type these commands:
    • +
      +    wsl --shutdown
      +    wsl --set-default-version 2
      +    wsl --update
      +    wsl --shutdown
      +    wsl --install -d Ubuntu
      +  
      +
    + + +
  5. +

    + After the download is finished, press "Launch" (or "Open").
    + This will Open the WSL/Ubuntu terminal and Install Ubuntu on Windows.
    + You will be asked to choose a username & password. +

    + +
  6. +

    +You will probably want to "Pin" Ubuntu to your Start menu.
    +You can do this by searching for "Ubuntu" in your start menu, +and then right clicking on the icon. +

    + +
  7. +

    +Install Ubuntu updates
    +Type these commands into your WSL terminal:

    + +
    +    sudo apt update
    +    sudo apt dist-upgrade
    +
    +
    + +

    +And press 'y' to continue. +

    + +

    +During the installation process, you may be asked for permission to +restart services on future upgrades without asking. It should be safe to say "yes". +

    + +
  8. +

    +Install the necessary packages for this course: +

    + +
    +    sudo apt install g++ clang gdb lldb zip valgrind
    +
    +
    + + +

    +And press 'y' to continue. +

    + + + +
  9. +Install Dr. Memory for WSL:
    + +Follow these instructions... + +

  10. +

    Install a good code editor on Windows. +
    If you don't already have a favorite, we recomend +Sublime Text. +

    + + +
  11. +

    Create a new directory for your work for this course on Windows.
    +Save the sample files to this directory.

    + + + +

    +NOTE: It's easier if you avoid spaces or other non-alphanumeric +characters (underscore is fine) in your file & directory +names. +

    + +
  12. +In your WSL terminal, go to your directory for the +course.
    Windows paths are available in WSL from +the /mnt/ mount point.
    +For example, if you saved the file +here:
    +C:\Users\myusername\Documents\DataStructures\temperature.cpp
    + +
        
    +    cd /mnt/c/Users/myusername/Documents/DataStructures/
    +
    +    ls
    +
    +
    + +

    +And you should see your file. +

    + +

    +NOTE: If you have spaces in your directory or file names, you'll need +to escape them with a backslash. E.g., Data\ Structures. +

    + +

    +Now compile the file: +

    + + +
    +    clang++ -g -o temperature.out temperature.cpp
    +
    +
    + + +

    +And then run it: +

    + + +
    +    ./temperature.out
    +
    +
    + + +

    +Or to test it through the memory debugger: +

    + + +
    +    drmemory -- ./temperature.out
    +
    +
    + +

    +Or: +

    + +
    +    valgrind ./temperature.out
    +
    +
    + + +
  13. + OPTIONAL: + To disable the tab-complete bell in WSL terminal (it quickly gets annoying): +

    + +

    + CAUTION: Some students have reported problems with specific keys on their keyboard no longer working after attempting to follow these instructions. If this happens to you, you may need to un-install and re-install WSL.

    + +

    +NOTE: Do not attempt to edit WSL system files from Windows. The +permissions and filesystem will get messed up and you'll need to +reinstall everything to recover. +

    + +

    +From the WSL terminal (using vi to edit the file): +

    + +
    +    sudo vi /etc/inputrc
    +
    +
    + +

    +Scroll down to the line: +

    + +
    +    # set bell-style none
    +
    +
    + +

    +press 'x' twice to uncomment that line: +

    + +
    +    set bell-style none
    +
    +
    + +

    +press ':wq' and enter to save the file. +

    + +

    +You'll need to close and restart your WSL terminal for it to take effect. +

    + + +
  14. + OPTIONAL: + You may want to disable Ctrl Key Shortcuts (personal preference):
    +With an Ubuntu terminal open, left-click the Ubuntu icon in the upper left,
    +chose Properties, and make sure "Enable Ctrl key Shortcuts" is unchecked.
    +If you leave the box checked then Ctrl+D will not send EOF signals.
    +It's not critical for this course, but this change might be useful in a Python
    +command line interface (CLI). Note: the checkbox does NOT affect Ctrl+C or Ctrl+Z. +

    + + + + +
  15. + OPTIONAL: + Configure WSL to start in your home directory or Data Structures directory.
    + From your WSL terminal, type: +

    + +
    +  echo 'cd /mnt/c/Users/myusername/Documents/DataStructures/' >> ~/.bashrc
    +
    +
    + +

    + Replacing /mnt/c/Users/myusername/Documents/DataStructures/ with the +starting directory of your choice on your system. +

    + +

    +NOTE: Do not attempt to edit WSL system files from Windows. The +permissions and filesystem will get messed up and you'll need to +reinstall everything to recover. +

    + +

    +The next time you close and restart your WSL terminal, it will start in the directory you specified above. +

    + +
  16. + + + + +
  17. +

    +Now, Test Your Installation. + +

    + + +
+ +