In accordance with Senate's *Policy Regarding Inactive Courses*, courses which have not been offered in the previous three
academic years and which are not scheduled to be offered in the current academic year have been removed from the
following listing. For information about any of these inactive courses, please contact the Head of the Department.

**COMPUTER SCIENCE SERVICE COURSES**

**2602. Computer Programming in BASIC and FORTRAN (F) & (W).** Introduction to computers and their use;
interactive computing; the BASIC and FORTRAN programming languages and their application to the computer solution
of numeric and non-numeric problems.

Prerequisite: Mathematics 1000 or 1090. Recommended Mathematics 1031.

*NOTE: Students who have received credit for the former Computer Science 2600, or the former 2601, or the former 2800
cannot receive credit* *for Computer Science 2602.*

**2650. Introduction to Computing and Information Technology (F) & (W).** This course provides a broad overview of
hardware and software components of computer systems, their structure, and principles of operation. The topics include
algorithmic problem solving, visual programming, operating system services, computer networks, elements of artificial
intelligence and societal issues. In addition to three one-hour lectures, there will be three hours per week of structured
laboratory sessions. Internet and microcomputer software tools in the Windows environment are introduced.

Prerequisite: Mathematics 1090 or Mathematics 1000.

*NOTE: Students cannot receive credit for both Computer Science 2650 and Computer Science 2801. Computer Science
Majors and Honours students cannot receive credit for Computer Science service courses.*

**2801. Introductory Computing for Business (F) & (W).** This course introduces students to computer applications in
business, document processing, application development, decision support, and information management. A three hour
laboratory is required.

Prerequisite: Mathematics 1000 or 1090.

*NOTE: Students shall not receive credit for more than one of Computer Science 2801, 2650, the former Computer Science
2601 and the former Computer Science 2800. Computer Science Majors and Honours students shall not receive credit for
Computer Science service courses.*

**2810. Elementary Data Processing (W).** Fundamentals of data processing; applications; system study and design;
non-computerized data processing; computer hardware, software and operations; selected topics.

Prerequisite: Mathematics 1090 or Mathematics 1000.

*NOTE: Students shall not receive credit for more than one of Computer Science 2602, or the former Computer Science
2600, 2601 or 2800. Computer Science Majors and Honours students shall not receive credit for Computer Science Service
courses.*

**COMPUTER SCIENCE MAJOR COURSES**

**FIRST YEAR COURSES**

**1700. Introduction to Computer Science (F) & (W).** This course lays the foundation for the art and the science of
computing. The course contains fundamental and topical issues in computers, languages, programming and applications.
This course is required of all Computer Science majors but is also available to non-majors.

Prerequisite: Mathematics 1090 or Level III Advanced Mathematics or equivalent.

Lectures: Three hours per week.

Laboratory: Three hours per week.

*NOTE: Students who have previously completed Computer Science 2700 will not be permitted to register or receive credit
for Computer Science 1700.*

**SECOND YEAR COURSES**

**2710. Problem Solving and Programming (F) & (W).** This course emphasizes algorithmic problem solving and sound
programming techniques; for instance, mathematical models for abstract data types are formally defined and their relevant
properties are proved. Basic techniques for the organization of data in the computer's storage are discussed and the basics
for proving properties of programs are given.

Lectures: Three hours per week.

Laboratory: Three hours per week.

Prerequisite: Computer Science 1700.

*NOTE: Credit cannot be obtained for both Computer Science 2710 and 2700.*

**2711. Introduction to Algorithms and Data Structures (F) & (W).** This course includes the study of standard ways of
organizing and manipulating data in the computer's storage. Fundamental concepts in the design and analysis of algorithms
are also discussed.

Lectures: Three hours per week.

Laboratory: Three hours per week.

Prerequisite: Computer Science 2710.

*NOTE: Credit cannot be obtained for both Computer Science 2711 and 2701. It is recommended that students complete
Computer Science 2740 prior to registering for Computer Science 2711.*

**2740. Discrete Structures I (F) & (W).** Basic concepts of logic. Propositional logic and its proof system. The language of
predicate logic. Sets, functions and relations, induction and recursion. Basics of graph theory, elementary properties of graphs.

Prerequisite: Computer Science 1700.

NOTE: Credit cannot be obtained for both Computer Science 2740 and Pure Mathematics 2320.

**2741. Discrete Structures II (F) & (W).** A follow-up of Computer Science 2740 dealing with more advanced topics in
Discrete Mathematics. These topics include: classical graph theoretic problems, operations, algebras, abstract algebraic
constructions, more on set theory and predicate logic.

Prerequisite: Computer Science 2710 and 2740.

*NOTE: Credit cannot be obtained for both Computer Science 2741 and Applied Mathematics/Pure Mathematics 3240.*

**THIRD YEAR COURSES**

**3700. Industrial Experience (F) & (W). **Students who are admitted to CIIO are required to register for this non-credit
course every semester during their internship *(Course fee: $200 per semester)*.

Prerequisite: Admission to the Computer Industry Internship Option (CIIO).

**3710. Vocational Languages (W).** Study of several programming languages of vocational significance (e.g. a selection
from ADA, C, ICON, LISP, MODULA-2, PROLOG and others). The use of appropriate programming paradigms to solve
some significant problems.

Prerequisite: Computer Science 2711.

**3711. Algorithms and Complexity (F) & (W).** This course introduces the most common and effective algorithm design
techniques (e.g. divide and conquer, dynamic programming, greedy algorithms). The theory of NP - completeness is also
discussed. Examples will be drawn from various fields such as graph theory and string matching.

Prerequisite: Computer Science 2711 and 2741.

**3714. Programming Languages and their Processors (F) & (W).** This course reviews typical elements of (imperative)
programming languages, and then discusses language implementations in the form of compilers and interpreters. The topics
include specification of syntax and semantics of programming languages, discussion of expressions and assignments, side
effects, control structures, data and procedural abstractions, parameter passing mechanisms, bindings, scopes, and type
systems. The recursive-descent technique is used for illustrations of different aspects of syntax analysis, code generation
and error recovery. Language interpreters are discussed for both low-level and high-level languages.

Prerequisites: Computer Science 3740 and 3724.

**3718. Programming in the Small (F).** The main objective of this course is to demonstrate the tools and techniques used in
the construction of small software systems. The software tools and techniques to be covered include C++, analysis and
design of software components, software construction tools (e.g. linkers, builders, debuggers), software library use and
design, and system integration.

Prerequisite: CS 2711 and CS 2741.

**3724. Computer Organization (F) & (W).** This course begins with elementary logic elements and progresses through
boolean algebra, synthesis and analysis of combinational and sequential circuits, finally covering aspects of von Newmann
machine organization. It deals with topics such as number systems, coding, arithmetic/logic units, register transfer
languages, algorithmic state machines, PLA, Mux, One Hot implementations, microprogramming, memory, instruction
processing cycle, etc.

Prerequisite: Computer Science 2711 and 2741.

**3725. Computer Architecture (F) & (W).** Using the background offered in Computer Science 3724, this course covers
advanced topics in the areas of memory system organizations (eg. overlapping, interleaving, cache, associative memory,
virtual memory, etc.), foundations of high-speed computations (eg. various types of dependencies, pipelining,
co-operations and contentions, synchronizations, etc.), interfacing and communications, and alternative architectures (eg.
RISC/CICS, VLIW, superscalar, systolic, etc.)

Prerequisite: Computer Science 3724.

**3731. Numerical Methods (W).** The development of algorithms for the numerical solution of mathematical problems and
the study of the numerical stability of these algorithms are the main objectives of this course. The efficiency of these
algorithms with respect to speed and storage requirements is considered as well. Emphasis is also placed on the study of the
sensitivity of selected problems to perturbations in the data. There is also a brief introduction to the development of
numerical algorithms that take advantage of advanced computer architectures, such as pipeline processors, array processors
and parallel processors.

Prerequisites: Computer Science 2602 or 2710, and Mathematics 2000. Consent of the Head of Department is required if
Computer Science prerequisites are not met.

Consent of the Head of Department is required if Computer Science prerequisites are not met.

*NOTE: Credit cannot be obtained for both Computer Science 3731 and Applied Mathematics 3132.*

**3740. Abstract Machines, Languages and Computations (F) & (W).** This course provides an introduction to formal
languages, formal grammars and computations. The topics include regular languages, regular expressions, deterministic
and nondeterministic finite automata, formal grammars, Chomsky hierarchy, context-free grammars and languages,
ambiguity, pushdown automata, Turing machines, recursive and recursively enumerable languages, Church-Turing thesis,
and the concept of algorithm, universal Turing machines, decidability, reducibility.

Prerequisite: Computer Science 2711 and 2741.

**3753. Computational Aspects of Linear Programming (F).** An introduction to the Linear Programming Problem (LPP).
The emphasis is placed upon developing the most recent and numerically reliable algorithms for the solution of the Linear
Programming Problem. The numerical stability of these algorithms will be examined as well. Geometric understanding of
the LPP. Simplex method for the LPP. Sparse matrix LPP. Duality and postoptimality analysis. Extensions to the simplex
algorithm. Principles of interior algorithms for the LPP.

Prerequisite: Mathematics 2050 and one of Computer Science 2710, 2602 or the former 2700 or 2800.

**FOURTH YEAR COURSES**

**4711. Structure of Programming Languages (F).** Programming language design considerations; syntactic and semantic
structure; survey of typical features and operations; analysis of facilities for control and data structuring; language
extensibility; execution models; formal specification of programming languages.

Prerequisite: Computer Science 3714.

**4712. Compiler Construction (W).** Properties of formal grammars and languages; syntax-directed parsing and code
generation; top-down and bottom-up parsing methods; LL(k) and LR(k) grammars and parsers; Code optimization;
compiler writing tools.

Prerequisite: Computer Science 3714.

**4715 and 4717. Special Topics in Programming Languages.**

Prerequisite: Consent of Head of Department.

**4716. Software System Design and Implementation (W).** This course studies the methodology of developing
well-engineered large-scale software systems. It introduces the principal paradigms of software design and implementation
and provides hands-on practice of software engineering concepts and object-oriented techniques (with CASE tools) in
project team environments.

Prerequisite: Computer Science 4718.

**4718. Software Methodology (F) & (W).** This course introduces methods and tools for developing, managing, and
maintaining large-scale software systems. The life-cycle of software development is covered with special emphasis. The
topics discussed include development models and environments, project management, requirement engineering, design and
programming techniques, software validation, maintenance, and re-engineering.

Prerequisites: Computer Science 3711 and 3714.

**4719. Software Specification (F).** The primary emphasis in this course is on the mathematical specification of software in
Z. Z is a mathematical notation based on sets, functions, and relations, using schemas to place logical constraints on sets of
values. The basic of Z notation and schema calculus will be presented, followed by examples of the use of Z. In addition,
some elementary features of a pure functional programming language will be presented to further support the advantages of
a mathematical treatment of software.

Prerequisite: Computer Science 3711 or 3718.

**4721. Operating Systems Principles (F).** This course provides an introduction to the main concepts and techniques used
in operating systems. The topics include history of operating systems, structures of operating systems, process
management, process coordination, deadlocks, memory management, secondary storage management, file management,
security and protection issues, elements of distributed operating systems, and selected case studies.

Prerequisite: Computer Science 3725.

**4723. Introduction to Microprocessors (F).** The architecture and instruction sets for several microprocessors are
examined. The use of microprocessors as device controllers; comparisons of hardware and programed techniques;
microprocessor interfacing with external devices; methods of I/O; bus structures; modern microprocessor support devices
are discussed.

Prerequisites: Computer Science 3724 and either Computer Science 3723 or Physics 2552.

Lecture: Three hours per week.

Laboratory: Minimum of three hours per week. Practical experience with basic principles will be obtained through
laboratory experience.

**4726-4729. Special Topics in Computer Systems.**

Prerequisite: Consent of Head of Department.

**4734. Matrix Computations and Applications (W).** An introduction to linear algebra; solution to linear systems; scaling,
improving and estimating accuracy; the linear least squares problem; the eigenvalue problem; singular value decomposition
of a matrix; the generalized eigenvalue problem.

Prerequisite: Computer Science 3731.

*NOTE: Students who have received credit for Computer Science 3732 may not receive credit for Computer Science 4734.*

**4736-4739. Special Topics in Numerical Computations.**

Prerequisite: Consent of Head of Department.

**4741. Theory of Abstract Automata and Formal Languages (W).** This course covers more advanced topics of abstract
automata, formal grammars and languages. They include timed and stochastic automata, probabilistic grammars, tree
automata and languages, cellular automata, matrix grammars, controlled rewriting systems, and L-systems. Applications in
computer graphics, visualization and digital images, and modeling of systems are used as illustrations of the formalisms.

Prerequisite: Computer Science 3740.

**4742. Computational Complexity (F).** This course is an in-depth discussion of computational complexity theory. Topics
covered in the course include: models of computation (for both serial and parallel computations); complexity measures;
reducibility; complexity classes (NP, PSPACE, NC, LOGSPACE and P); and randomized computations.

Prerequisite: Computer Science 3711 and 3740.

**4745-4749. Special Topics in Theoretical Aspects.**

Prerequisite: Consent of Head of Department.

**4751. Computer Graphics (F).** Display devices, display processors, display file compilers, display transformations,
structured display files, graphical input devices, perspective, hidden line elimination, languages and graphics systems.

In addition to three one-hour lectures, there will be a minimum three hour laboratory per week, to be scheduled by the Department.

Prerequisite: Computer Science 3711 and Mathematics 2050.

**4753. Introduction to Artificial Intelligence (F).** One or more AI programming languages; problem solving-state space,
heuristic search theory; game-playing-game trees, minimax analysis, Alpha-Beta search, examination of several
game-playing programs; pattern perception-scene analysis, picture enhancement, line detection, perception of regions and objects.

Prerequisite: Computer Science 3711.

**4754. Data Base Systems (F).** Data Base as a new approach to data processing; survey of 3 different types of data base
systems: relational, hierarchical and network; security and integrity; comparison studies of some existing systems.

Prerequisite: Computer Science 3725.

**4755-4769 (excluding 4756, 4759 and 4761). Special Topics in Applications.**

Prerequisite: Consent of Head of Department.

**4756. Image Processing (W).** Lectures will centre on the key analytical and algorithmic tools and concepts of digital
image processing. Topics will include Transformations, Enhancement, Encoding, Data Bases, Segmentation and Description.

In addition to three one-hour lectures, there will be a three hour laboratory per week, to be scheduled by the Department.

Prerequisite: Computer Science 3711.

**4759. Computer Networks (W). **The operation of computer networks requires the following: a) communication between
two computers, b) information transfer between two computers not directly connected, and c) services that need computer
communication. This course focuses on the standard solutions and services used to fulfill the previous requirements. These
include: physical transmission of signals, reliable communication based on unreliable communication channels, the routing
of messages between connected computers to reach computers that are not directly connected, e-mail, file transfer, name
servers, remote terminal access and the World Wide Web. Particular attention will be placed on the workings of the Internet.

Prerequisite: Computer Science 3725.

**4761. Human-Computer Interaction (W).** User modelling, task analysis, user-interface design, environments and
toolkits, prototyping, user psychology, empirical methods, usability analysis. Representative methods, techniques, and
tools are applied to the design and development of human-computer systems.

Prerequisites: Computer Science 3714 and Statistics 2510.

**4780. Honours Project.**

Last modified on May 21, 2002 by MaryJane Puxley