Full course for one semester. An introduction to computer science, covering topics including elementary algorithms and data structures, functional and procedural abstraction, data abstraction, object orientation, logic, and the digital representations of numbers. Emphasis is on mathematical problems and calculations and on recursive algorithms and data structures. The course includes a significant programming laboratory component where students will solve computational problems using a high-level language. The mechanisms for processing and executing programs will be surveyed. Prerequisite: three years of high school mathematics. Lecture-laboratory.

**December 7, 2018**- The final exam is scheduled for Monday, December 10, from 1:00 to 4:00pm in Psychology 105 (the regular classroom).
- I put together a Python summary handout (Handout 64) that should be helpful for the exam.

**December 6, 2018**- The final exam is scheduled for Monday, December 10, from 1:00 to 4:00pm in Psychology 105 (the regular classroom).
- There will be a review session for the final this Friday (December 7) from 3:10 to 4:30pm in Psychology 105.

**December 5, 2018**- Keeping up the tradition, Eric will be in his office (Library 316) from 6:00pm to midnight for everyone who is working on Adventure right up to the last minute.

**December 4, 2018**- Eric will be in his office this evening from 7:00pm to midnight for anyone having trouble with Adventure.

**November 16, 2018**- The starter folder for Project #5 (Adventure) has been posted on the web site.

**November 12, 2018**- Chapter 11 is up on the web site.
- The reading for today’s lecture is sections 11.1 through 11.3.
- For Wednesday, please read section 11.4.

**November 6, 2018**- I’ve fixed a bug in the
`pgl.py`

implementation that caused it to ignore`setLineWidth`

settings in filled shapes. The new version (v0.83) of the library is available here. The starter file for Project 4 now contains the updated version.

- I’ve fixed a bug in the
**November 5, 2018**- The starter files for Project #4 (Enigma) have been posted on the web site. The milestones for the project are available as an interactive web page here.

**November 5, 2018**- Chapter 10 is up on the web site.
- For Wednesday, please read sections 10.1 through 10.3.
- For Friday, please read section 10.4.

**October 31, 2018**- For both of his classes this semester, Eric is showing the movie
*V for Vendetta*this coming Monday, November 5, from 7:00 to 9:00pm in Biology 19. Popcorn will be provided.

- For both of his classes this semester, Eric is showing the movie
**October 30, 2018**- Eric will be holding additional office hours for ImageShop this evening from 7:00 to 9:00pm in Library 316.

**October 27, 2018**- Chapter 9 is up on the web site.
- For Monday, please read sections 9.1 and 9.2.
- For Wednesday, please read section 9.3.
- For Friday, please read section 9.4.

**October 22, 2018**- The starter files for Project #3 (ImageShop) have been posted on the web site.
- To implement ImageShop you will need to install the Pillow image
libraries for Python by typing the following command is a terminal
window:
**pip3 install pillow**

**October 22, 2018**- Chapter 8 is up on the web site.
- For Wednesday, please read sections 8.1 and 8.2.
- For Friday, please read sections 8.3 through 8.5.

**October 7, 2018**- Chapter 7 is up on the web site.
- For Monday, the reading is Handout #30 on recursion.
- For Wednesday, please read sections 7.1 and 7.2.
- For Friday, please read sections 7.3 and 7.4.

**September 30, 2018**- The solutions to Practice Midterm #1 are posted as Handout 22A. Make sure you try taking the Practice Midterm before looking at the solutions.

**September 28, 2018**- The midterm exam will run from 3:10 to 4:30pm on Wednesday, October 3, in PSYCH 105 (the regular classroom). If you can’t make the extra time at the end of the regular session, please send an email message to esroberts@reed.edu by noon on Monday, October 1.
- We’ve increased the initial free late-day allocation to four, subject to the restriction that you can’t spend more than two late days on any one assignmment.

**September 25, 2018**- I have shipped a new version (0.73) of the
`pgl.py`

library, which you can download from here. This version fixes numerous bugs, but you shouldn’t need it for the Breakout assignment unless you are implementing extensions.

- I have shipped a new version (0.73) of the
**September 24, 2018**- The deadline for the Graphics Contest has been extended to Monday, October 1. The deadline for Project #1 (Breakout) remains Wednesday, September 26.

**September 19, 2018**- Chapter 6 is up on the web site.
- For Friday’s lecture, please read section 6.1.
- For Monday, read Handout #17, which will be distributed on Friday.
- For Wednesday, read sections 6.2 through 6.4.
- For next Friday, read section 6.5.

**September 14, 2018**- There is a new version (0.6) of the
`pgl.py`

library, which you can download from here. You will need this version for Assignment #3, Project #1, and the Graphics Contest.

- There is a new version (0.6) of the
**September 12, 2018**- Chapter 5 is up on the web site, along with a new section in Chapter 4, which comes just before the old section 4.6.
- For Friday’s lecture, please read the new section 4.6 and sections 5.1 to 5.4.
- For Monday, read sections 5.5 and 5.6.
- For Wednesday, read section 5.7.

**September 6, 2018**- Chapter 4 is up on the web site.
- For Friday’s lecture, please read sections 4.1 and 4.2.
- For Monday, read sections 4.3 through 4.5.
- For Wednesday, read section 4.6.

**August 31, 2018**- Assignments will be due on Wednesdays, not Fridays.
- Assignment #1 is due at 11:59pm on Wednesday, September 5.
- Each Wednesday will be the due date for
*either*an assignment*or*a programming project, but not both.

**August 27, 2018**- Welcome to CSCI 121 (Computer Science Fundamentals I)!

- The homework submission site
- Assignment #1
- Assignment #2
- Assignment #3
- Project #1 handout
- Project #1 starter file
- Assignment #4
- Project #2 handout
- Project #2 starter file
- Assignment #5
- Project #3 handout
- Project #3 starter file
- Assignment #6
- Assignment #6 starter file
- Project #4 handout
- Project #4 starter file
- Project #4 interactive demo
- Project #5 handout
- Project #5 starter file

- 01. Course Information
- 02. Assignment #1
- 03. Expressions
- 04. Control Statements
- 05. Assignment #2
- 06. Simple Graphics
- 07. Functions
- 08. Libraries and Interfaces
- 09. Decomposition
- 10. Assignment #3
- 11. Interactive Graphics
- 12. Project #1 (Breakout)
- 13. Graphics Contest
- 14. Timer-Based Animation
- 15. Graphical Structures
- 16. Binary Representation
- 17. Computers on the Inside
- 18. Stored-Program Machines
- 19. Strings in Python
- 20. Assignment #4
- 21. String Applications
- 22. Practice Midterm #1
- 22A. Solutions to Practice Midterm #1
- 23. Practice Midterm #2
- 23. Solutions to Practice Midterm #2
- 24. Exam Strategies
- 25. Resources
- 26. Debugging
- 27. Project #2 (Snowman)
- 28. Midterm Solutions
- 29. Cryptography
- 30. Introduction to Recursion
- 31. Recursion
- 32. Lists
- 33. Assignment #5
- 34. Files
- 35. Revised Calendar
- 36. Multidimensional Arrays
- 37. Project #3 (ImageShop)
- 38. Searching and Sorting
- 39. Algorithmic Efficiency
- 40. Sorting Contest
- 41. Objects as Classes
- 42. Object-Oriented Programming
- 43. Assignment #6
- 44. Inheritance
- 45. The Enigma Machine (web only)
- 46. Project #4 (Enigma)
- 46A. Chapter on Cryptography (web only)
- 47. Dictionaries
- 48. Sets
- 49. Abstract Data Types
- 50. Data-Driven Programs
- 51. Project #5 (Adventure)
- 52. Adventure Contest
- 53. Adventure Lecture Slides
- 54. Linked Structures
- 55. Networking Algorithms
- 56. Thinking Recursively
- 57. Lab Assignment
- 58. Recursive Backtracking
- 59. Machine Learning
- 60. Advanced Python
- 61. Practice Final #1
- 61A. Solutions to Practice Final #1
- 62. Practice Final #2
- 62A. Solutions to Practice Final #2
- 63. Looking Ahead
- 64. Python Summary

- 01. Introduction to CSCI 121
- 02. Expressions
- 03. Control Statements
- 04. Simple Graphics
- 05. Functions
- 06. Libraries and Interfaces
- 07. Decomposition
- 08. Interactive Graphics
- 09. Timer-Based Animation
- 10. Graphical Structures
- 11. Binary Representation
- 12. Stored-Program Machines
- 13. Strings in Python
- 14. String Applications
- 15. Debugging
- 16. Cryptography
- 17. Recursion
- 18. Lists
- 19. Files
- 20. Multidimensional Arrays
- 21. Searching and Sorting
- 22. Algorithmic Analysis
- 23. Objects as Records
- 24. Object-Oriented Programming
- 25. Inheritance
- 26. The Enigma Machine
- 27. Dictionaries
- 28. Sets
- 29. Abstract Data Types
- 30. Data-Driven Programs
- 31. Adventure
- 32. Linked Structures
- 33. Networking Algorithms
- 34. Thinking Recursively
- 35. Recursive Backtracking
- 36. Machine Learning
- 37. Advanced Python
- 38. Looking Ahead
- 39. Final Review