An approved supporting program of 20 hours that includes two of MATH 105 Calculus I, MATH 106 Calculus II, MATH 111 Introduction to Higher Mathematics, and MATH 210 Linear Algebra is required. Cooperatively designed by the student, advisor, and department chair, the supporting program may overlap with one or more minors or a second major.

For the mathematics and computer science majors, the B.A. degree requires a minor from the humanities or arts, or more than 50 percent of the supporting program from these areas, while the B.S. degree requires a minor from the natural or social sciences, or more than 50 percent of the supporting program from these areas.

CMPSC 030 Introduction to Computational Problem Solving (3 hours)

An introduction to computational problem-solving using a programming language. Students learn the syntax and semantics of a language and apply these to the solution of mathematical problems. The course is recommended for all who wish to explore computer science. Students review mathematical concepts and use them as the basis of an algorithmic solution during a hands-on lab.

*Prerequisite(s): Appropriate placement score.*

CMPSC 040 Program Design (4 hours)

A disciplined approach to the development of programs to solve problems on a computer. Topics include data types, control structures, abstraction, and software development. A lab component introduces a high-level programming language and software tools.

*Corequisite(s): CMPSC 030 Introduction to Computational Problem Solving or permission of the instructor. *

(Normally offered each semester.)

CMPSC 100 Discrete Mathematics (3 hours)

An introduction to fundamental concepts of discrete mathematics with application to computer science. Topics include sets, relations, functions, sequences, Boolean algebra, difference equations, combinatorics, and graph theory.

*Prerequisite(s): Placement into MATH 105 Calculus I or grade of "C" or better in MATH 050 Pre-Calculus. *

(Normally offered each year.)

CMPSC 110 Unix (1 hours)

Introduction to the Unix operating system, Unix file system, Unix tools and utilities, and shell programming. A laboratory course.

(Normally offered each year.)

CMPSC 120 Imperative Problem-Solving (2 hours)

Students solve algorithmically complex problems using an imperative language and will have the opportunity to represent NWU in the ACM Programming Contest. A laboratory course. May be repeated.

*Prerequisite(s): CMPSC 040 Program Design with a grade of "C" or better. *

(Normally offered each year.)

CMPSC 130 Computer Architecture and Interfacing (4 hours)

See PHYS 130 Computer Architecture and Interfacing.

CMPSC 140 Data Structures (4 hours)

A natural continuation of Computer Science 40 concentrating on the motivation, design, implementation, and utilization of abstract data types. Topics include linked lists, stacks, queues, trees, and recursion. A lab component is incorporated.

*Prerequisite(s): Grade of "C" or better in CMPSC 040 Program Design. *

(Normally offered each spring semester.)

CMPSC 200 Formal Languages and Automata (3 hours)

An overview of formal models of computation and complexity classes. Topics include formal languages (finite automata, regular expressions, push-down automata, context-free grammars, and Turing machines), Church's thesis, computability, non-determinism, and NP-completeness. Same as MATH 200 Formal Languages and Automata.

*Prerequisite(s): Grade of "C" or better in either CMPSC 100 Discrete Mathematics or MATH 111 Introduction to Higher Mathematics and junior standing.*

(Normally offered alternate years.)

CMPSC 235 Computer Networks (4 hours)

This course focuses on the communications protocols used in computer networks: their functionality, specification, verification, implementation, and performance. The course also considers the use of network architectures and protocol hierarchies to provide more complex services. Existing protocols and architectures will be used as the basis of discussion and study. Includes formal laboratory work.

*Prerequisite(s): Grade of "C" or better in CMPSC 140 Data Structures. *

(Normally offered alternate years.)

CMPSC 260 Programming Languages (3 hours)

A survey of the principles and paradigms of programming languages. Topics include data types, scope and run-time storage, control structures, syntax, semantics, translation, and implementation. Paradigms discussed include: procedural, functional, logic, and object-oriented programming.

*Prerequisite(s): Grade of "C" or better in CMPSC 140 Data Structures. *

(Normally offered alternate years.)

CMPSC 205 Database Systems (3 hours)

An introduction to the design, implementation, and management of database systems. Topics include entity-relation, relational, and object-oriented databases. A client-server database project is assigned.

*Prerequisite(s): Grade of "C" or better in CMPSC 140 Data Structures. *

(Normally offered alternative years.)

CMPSC 210 Operating Systems (3 hours)

A study of the fundamental concepts of operating systems and distributed systems. Topics include process and storage management, protection and security, and the organization and coordination of systems having interacting processors. The material is illustrated by case studies.

*Prerequisite(s): Grade of "C" or better in CMPSC 140 Data Structures.*

(Normally offered alternate years.)

CMPSC 230 Software Engineering I (3 hours)

Topics include design objectives, life-cycle model, reliability and risk assessment, maintenance, specification and design tools, implementation issues and strategies, and verification and validation.

*Prerequisite(s): Grade of "C" or better in CMPSC 140 Data Structures.*

(Normally offered alternate years.)

CMPSC 240 Compiler Construction (3 hours)

A capstone course in which students design and implement a compiler as an application of the principles of software engineering, formal language theory, algorithms and data structures. Topics include lexical analysis, parsing, symbol table management, code generation and optimization and use of compiler tools.

*Prerequisite(s): Grades of "C" or better in CMPSC 140 Data Structures and CMPSC 200 Formal Languages and Automata. *

(Normally offered alternate years.)

CMPSC 265 Artificial Intelligence (3 hours)

A study of the techniques and theory of artificial intelligence. Topics include the history and philosophy of AI, knowledge representation, state space search, logic programming, AI languages, expert systems, natural language understanding, machine learning, and neural networks.

*Prerequisite(s): Grade of "C" or better in CMPSC 260 Programming Languages.*

CMPSC 299 Software Engineering II (3 hours)

A capstone course in which student teams undertake a large software project using contemporary software engineering techniques.

*Prerequisite(s): CMPSC 230 Software Engineering I with a grade of "C" or better and junior standing.*

(Normally offered alternate years.)

MATH 212 Numerical Analysis (3 hours)

An introduction to the numerical approximation of solutions of various types of problems. Topics include rootfinding, interpolation and numerical differentiation, and integration. Additional topics may be drawn from numerical solutions of ordinary differential equations and linear systems.

*Prerequisite(s): Grade of "C" or better in MATH 106 Calculus II.*

MATH 105 Calculus I (5 hours)

An introduction to calculus of a single variable. Topics include limits, continuity, differentiation, and beginning integration with applications. Assignments are given that help build proficiency in the use of a computer algebra system.

*Prerequisite(s): Appropriate placement score or grade of "C" or better in MATH 050 Pre-Calculus. *

(Normally offered each semester.)

MATH 106 Calculus II (5 hours)

A continuation of Mathematics 105. Topics studied include integration techniques and applications, differential equations, numerical approximations, sequences and series, and vectors. Assignments are given that help build proficiency in the use of a computer algebra system.

*Prerequisite(s): Permission of department or grade of "C" or better in MATH 105 Calculus I. *

(Normally offered each semester.)

MATH 111 Introduction to Higher Mathematics (3 hours)

A study of mathematical induction and other methods of proof, recursion, formal logic, and set theory.

*Prerequisite(s): Grade of "C" or better in MATH 105 Calculus I.*

(Normally offered each spring semester.)

MATH 210 Linear Algebra (3 hours)

A study of vector spaces, determinants, linear transformations, matrices, and matrix equations, and their applications in the natural and social sciences.

*Prerequisite(s): Grade of "C" or better in MATH 106 Calculus II. *

(Normally offered each spring semester.)