2010-2011 University of Richmond Undergraduate Catalog
Back to Current Catalog
Computer Science
Department of Mathematics and Computer Science
B. Lewis Barnett III, Chair
Professors Charlesworth, Davis, Fenster, Greenfield, J. Hubbard, Nall, Ross
Associate Professors Barnett, Caudill, K. Hoke, Kerckhove, Lawson, Owen, Szajda
Assistant Professors Shaw
Director of Developmental Mathematics H. Hoke
The Computer Science Major
Note: The grade point average of the coursework comprising the major must be no less than 2.00 with no computer science course grade below C- (1.70). Students are strongly advised to consult with faculty in planning their major curriculum.
For the Bachelor of Arts degree
11.5 units, including
CMSC 150 or 155 Introduction to Computing or Scientific Computing
CMSC 221 Data Structures with Lab
CMSC 222 Discrete Structures for Computing
CMSC 240 Software Systems Development
CMSC 301 Computer Organization
CMSC 315 Algorithms
CMSC 323 Design and Implementation of Programming Languages
Three additional 1-unit CMSC electives at the 300 level. Without departmental approval, no more than one of these courses can be an Independent Study course.
MATH 211 or 231 Calculus I or Scientific Calculus I
MATH 245 Linear Algebra
For the Bachelor of Science degree
14.5 units, including
CMSC 150 or 155 Introduction to Computing or Scientific Computing
CMSC 221 Data Structures with Lab
CMSC 222 Discrete Structures for Computing
CMSC 240 Software Systems Development
CMSC 301 Computer Organization
CMSC 315 Algorithms
CMSC 323 Design and Implementation of Programming Languages
Three additional 1-unit CMSC electives at the 300 level. Without departmental approval, no more than one of these courses can be an Independent Study course.
MATH 211 or 231 Calculus I or Scientific Calculus I
MATH 212 or 232 Calculus II or Scientific Calculus II
MATH 245 Linear Algebra
Two units at the 300 level or above in mathematics or two units (or more) beyond the introductory level in one of the following fields: physics (200 level or above), chemistry (200 level or above), or biology (beyond 205).
The Computer Science Minor
Note: The grade point average of the coursework comprising the minor must be no less than 2.00 with no computer science course grade below C- (1.70). Students are strongly advised to consult with faculty in planning their minor curriculum.
5.5 units, including
CMSC 150 or 155 Introduction to Computing or Scientific Computing
CMSC 221 Data Structures with Lab
CMSC 222 Discrete Structures for Computing
CMSC 240 Software Systems Development
CMSC 301 Computer Organization
One additional unit in CMSC for which CMSC 222 or CMSC 301 is a prerequisite
Honors Program
Students invited into the honors program may earn honors in computer science by completing the following requirements:
- Two 300-level courses for honors credit (one of which as a 300-level prereq: 321, 322, 323, 326, 330, 331, 332, 333, 334, 335);
- Two semesters of directed independent study (CMSC 340):
- Honors paper
Courses
CMSC
101 Minds and Machines
Formal deduction in propositional logic. The fundamentals of computer architecture. An elementary exploration of the extent to which symbolic reasoning can be automated, including a consideration of related results in fields such as neuroscience and artificial intelligence. Three hours lecture and one hour lab per week.
General Education Requirement: (FSSR)
Unit(s): 1
CMSC
105 Elementary Programming with Lab
Solving problems by writing computer programs. Introduction to computer architecture. Emphasis on symbolic reasoning using examples from a particular computing context. For non-majors. Not open to students who have completed any computer science course that fulfills major requirements. Three lecture and one laboratory hour per week.
General Education Requirement: (FSSR)
Unit(s): 1
CMSC
150 Introduction to Computing
Techniques for writing computer programs to solve problems. Topics include elementary computer organization, object-oriented programming, control structures, arrays, methods and parameter passing, recursion, searching, sorting, and file I/O. Three lecture and two laboratory hours per week. A student may not receive credit for both Computer Science 150 and 155. Students who have received credit for courses numbered 221 or higher may not take 150 for credit.
Prerequisite(s): None; however, strong mathematics aptitude usually predicts success in computer science.
General Education Requirement: (FSSR)
Unit(s): 1
CMSC
155 Introduction to Scientific Computing
Same course as Computer Science 150 but with greater emphasis on programming applications in the sciences. A student may not receive credit for both Computer Science 150 and 155. Students who have received credit for courses numbered 221 or higher may not take 155 for credit.
Prerequisite(s): Math 211 or 231.
General Education Requirement: (FSSR)
Unit(s): 1
Note: Knowledge of the topics of Computer Science 150 or 155 is prerequisite to all higher numbered Computer Science courses. Students who have obtained this knowledge through a high school or some other course are permitted to begin with Computer Science 221 with departmental approval.
CMSC
195 Special Topics
Special topics satisfying neither major nor minor requirements.
Unit(s): .25-1
CMSC
221 Data Structures with Lab
Introduction to data structures, including stacks, queues, linked lists, and binary trees. Topics include abstraction, object-oriented programming, recursion, and computational complexity. Three lecture and two laboratory hours per week.
Prerequisite(s): Computer Science 150 or 155 or MATH 190.
General Education Requirement: (FSSR)
Unit(s): 1
CMSC
222 Discrete Structures for Computing with Lab
Sets, functions, elementary propositional and predicate logic, elementary graph theory, recurrence relations, proof techniques (including mathematical induction and proof by contradiction), combinatorics, probability, and random numbers, with applications to computing. Three hours lecture and one hour lab per week.
Prerequisite(s): Computer Science 221 (corequisite).
Unit(s): 1
CMSC
240 Software Systems Development
Introduction to techniques necessary for development of large-scale software systems, including design of software systems, adapting to legacy code, testing, debugging, and group work. Introduction to the C++ programming language, including pointers, dynamic memory allocation, and the C++ Standard Template Library (STL).
Prerequisite(s): Computer Science 221.
Unit(s): .5
CMSC
288 Computer Science Apprenticeship
Participation in development of software, with supervision of computer science faculty. Does not count for computer science major or minor. No more than a total of 1.5 units of Computer Science 288 may count toward the total number of units required for a degree.
Unit(s): .25-.5
Note: Most 300-level courses in computer science include a one hour per week laboratory component. This is an instructor-designed, organized and supervised component of the course that may occur as a fourth hour of lecture or as an extra course component scheduled outside of the lecture period. Scheduling and format may be discussed at the first class session. The format may vary by instructor and course. Students are urged to contact the instructor prior to registration if they have questions about the laboratory.
CMSC
301 Computer Organization
Fundamentals of computer organization. Topics include instruction and, data representations, assembly language, processor data path design, memory systems and I/O. Also includes examination of how software characteristics impact hardware design and optimization. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 221
Unit(s): 1
CMSC
315 Algorithms
Design, analysis, and implementation of advanced computer algorithms. Emphasis is given to problem-solving techniques, including the greedy method, divide-and-conquer, and dynamic programming. Specific problem domains vary. Topics may include sorting, graphs, networks, computational geometry, NP-completeness, approximation algorithms, text processing, distributed systems, and numerical algorithms. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 222.
Unit(s): 1
CMSC
321 Operating Systems
Structure of operating systems, process management, memory management, file systems, and case studies. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 222 and 301.
Unit(s): 1
CMSC
322 Software Engineering Practicum
Project-oriented course. Principles of software engineering will be emphasized throughout. Three lecture and one laboratory hour per week.
Prerequisite(s): Senior standing or two courses at the 300 level that have Computer Science 301 or 315 as a prerequisite.
Unit(s): 1
CMSC
323 Design and Implementation of Programming Languages
Concepts in design and implementation of programming languages, including compile-time and run-time issues. Support for block-structured procedural languages, object-oriented languages, and functional languages. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 301 and 315.
Unit(s): 1
CMSC
325 Database Systems
Introduction to systematic management of data: design and implementation of relational databases, data modeling, normalization, indexing, relational algebra, query processing, and transaction management. Programming projects include substantial use of SQL and its extensions. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 221 and 222.
Unit(s): 1
CMSC
326 Simulation
Introduction to simulation. Discrete-event simulation, Monte Carlo simulation, simulation of queuing and inventory systems, random number generation, discrete and continuous stochastic models, elementary statistics, point and interval parameter estimation, and input modeling techniques. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 222 and 301.
Unit(s): 1
CMSC
328 Numerical Analysis
(See Mathematics 328.)
Unit(s): 1
CMSC
330 Theory of Computation
Finite state machines, regular languages, push-down automata, and context-free languages. Turing machines, recursive functions, and related topics. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 315.
Unit(s): 1
CMSC
331 Introduction to Compiler Construction
Regular languages, context-free languages, finite automata, push-down automata, lexical analysis, parsing, intermediate representation, and code generation. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 222 and 301.
Unit(s): 1
CMSC
332 Computer Networks
Principles and techniques for data communication between computers. Topics include design and analysis of communication protocols, routing, congestion control, network-centric applications, and recent advances. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 301.
Unit(s): 1
CMSC
333 Parallel Programming
Principles and techniques for programming computers that have multiple processors. Writing programs for parallel computers that enhance run-time efficiency, portability, correctness, and software modifiability. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 222 and 301.
Unit(s): 1
CMSC
334 Computer Security
Theory, mechanisms, and implementation of computer security and data protection. Topics include encryption and authentication, program and language security, operating system security, and network security. Three lecture and one laboratory hour per week.
Prerequisite(s): Computer Science 301 (corequisite).
Unit(s): 1
CMSC
335 Computer Graphics
Device independent two- and three-dimensional computer graphics, interactive graphics, user interfaces, and human factors. Consideration of advanced modeling and rendering. Three lecture and one laboratory hour per week.
Prerequisite(s): Mathematics 245 and Computer Science 222 and 301.
Unit(s): 1
CMSC
340 Directed Independent Study
To enable well-qualified students who have completed basic requirements for major to work independently in areas not included in curriculum.
Prerequisite(s): Permission of departmental chair and instructor.
Unit(s): .25-1
CMSC
395 Special Topics
Selected topics in computer science.
Prerequisite(s): Permission of instructor.
Unit(s): .5-1
CMSC
388 Individual Internship
No more than 1.5 units of internship in any one department and 3.5 units of internship overall may be counted toward required degree units.
Prerequisite(s): Permission of department.
Unit(s): .25-1
Back to top