**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.

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

Prerequisite: Mathematics 1000 or 1080. 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 1080 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.** 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 1080.

*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 1080 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.** 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 1080 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 programmes 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.

**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.

**2752. Introduction to Business Data Processing (F).** Data processing applications of
computers, large and small scale systems for business, peripherals, and programming in COBOL.
Introduction to Fourth Generation Languages.

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 2602, 2700, 2710 or the former 2800.

*NOTE: Credit may not be obtained for both Computer Science 2752 and 3752.*

**THIRD YEAR COURSES**

**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.

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 2701 or 2711.

**3711. Algorithms and Complexity (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 3712 and 3741, or 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.

**3723. Logic Design (F).** Review of Boolean logic functions; Karnaugh maps and minimization
of combinational circuits. Applications of MSI and LSI devices; multiplexers, decoders, ROM's
programmable logic; application of timing diagrams to logic design. Review of sequential
circuits; flip-flops, shift registers, etc. Analysis of sequential circuits, state diagrams, state tables,
state reduction, models of sequential circuits. Introduction to micro-processors, memory
decoding, I/O device selection. The use of microprocessors as simple device controllers.

Prerequisite: Computer Science 3724.

Lectures: Three hours/week.

Laboratory: Three hours/week.

*NOTE: Credit may not be obtained for both Computer Science 3723 and Physics 2552.*

**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 (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 (F).** 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, 2700 or 2710 and Mathematics 2000.

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.** 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.

**3751. Computational Aspects of Operations Research (W).** Integer Programming;
transportation problem; trans- shipment problem; assignment problem. Network analysis:
shortest route, network flow, critical path.

Prerequisite: Computer Science 3711 and Mathematics 2050.

**3753. Computational Aspects of Linear Programming (W).** 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 2700, 2710, 2602 or the former
2800.

**3790. Directed Readings.**

*NOTE: Permission of the Head of the Department is required prior to registration for this
course.*

**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 3740.

**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-4719 (excluding 4718). Special Topics in Programming Languages.**

Prerequisite: Consent of Head of Department.

**4718. Software Methodology (F).** This course studies topics associated with the design and
implementation of large software systems. Social and ethical issues faced by the computing
professional are also discussed in the context of software engineering. In addition to class
lectures, this course includes a compulsory three hour laboratory per week.

Prerequisite: Computer Science 3711 and 3714.

**4721. Operating Systems Principles (W).** Forms and characteristics of operating systems, the
process and data modules, memory management, management of names, input-output,
protection, resource allocation.

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 programmed 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.

**4725. Introduction to LSI Design (W).** A simple model for MOS transistors is described and
simple models for describing digital switching circuits are developed. Methods of structured
design for MOS integrated circuits are discussed, together with the physical processes involved
in the construction of modern large-scale integrated (LSI) circuits. Software tools for the design
of such devices and techniques for testing LSI devices for possible implementation are introduced.

Prerequisites: Computer Science 3723, Computer Science 3725.

Laboratory: Three hours per week.

*NOTE: Credit cannot be received for both Computer Science 4725 and Engineering 8863.*

**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.*

**4735. Advanced Matrix Computations and Applications (F).** Continuation of Computer
Science 4734. Advanced topics related to the eigenproblem, singular value problem and
generalized eigenvalue problems. Applications of matrix computations in estimation and control
theory.

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

Prerequisite: Consent of Head of Department.

**4741. Formal Languages and Automata Theory (W).** Definition and representation of finite
state automata and sequential machines. Equivalence of states and machines, congruence,
reduced machines, and analysis and synthesis of machines. Decision problems of finite automata,
partitions with the substitution property, probabilistic automata. Turing machines. Wang
machines and others, Godel numbering and unsolvability results, the halting problem.

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 programmes; pattern perception-scene
analysis, picture enhancement, line detection, perception of regions and objects.

Prerequisite: Computer Science 3711.

Recommended: Computer Science 3710.

**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). 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.

**4780. Honours Project.**

Last modified on October 8, 1997 by MaryJane Puxley