Covers key software development concepts and tools not in introductory courses. Concepts of lower-level programming (C/C++) and explicit memory management; techniques and tools for individual and group software development; design, implementation, and testing strategies.
This repor contains all 8 homework that I have completed for the course.
The purpose of this assignment is to be sure that I have my Linux environment set up for the quarter and that you can log in and execute shell commands. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw0.html
The purpose of this assignment is to become familiar with the basics of the Linux shell and the range of commands that are included in most Linux distributions. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw1.html
In this assignment I gained some more experience with shell commands and with writing short shell scripts. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw2.html
The main goal of this assignment is to learn more about shell scripting and using regular expressions and string processing programs, particularly grep and sed. I learned about accessing files from the web and using a program called gnuplot for plotting files. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw3.html
The purpose of this assignment is to gain some experience with C programming by implementing a utility program that is similar to grep, but without the ability to process regular expressions (i.e., a lot like a simple version of fgrep). In particular, in this assignment, I
- Gained experience creating and running C programs,
- Becomed familiar with some of the basic C libraries, including those for file and string handling,
- Got a better understanding of how Unix utilities are implemented,
- Gained some basic experience with the unix debugger, gdb, and
- Learned to use a style-checking tool to locate source code that may need attention. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw4.html
In this assignment, I developed a more complex program using dynamic data structures. In doing so I:
- Gained experience developing a larger system one part at a time, testing as you go.
- Learned about the trie data structure, a version of a search tree.
- Gained experience working with trees, structs, and dynamically allocated data.
- Gained more experience reading and processing text files in C.
- Practiced writing simple Makefiles. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw5.html
In this assignment I developed and benchmark a memory management package. I was required to work with a partner on this project. We turned in a single assignment. This assignment continues our exploration of procedural programming, memory management, and software tools, as well as software development and working in groups. In particular, in this assignment we:
- Implemented and test a memory management package that has the same functionality as the standard library malloc and free functions,
- Gained experience using source-code management systems, in particular git,
- Gained further experience with software development tools like make, and
- Gained experience working in groups. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw6.html
In this assignment I supplied the implementation of a C++ type for Rational numbers. I was supplied with a small calculator program that evaluates arithmetic expressions using my code. I used this to experiment with and test my implementation. But my only job was to provide an implementation of type Rational. https://courses.cs.washington.edu/courses/cse374/19sp/homework/hw7.html