
Course Descriptions : 1000Level
Courses in Computer Science have three class hours a week for one term (3 creditcourse numbers end in "3.0"), unless otherwise indicated. Courses with second digit 5 (e.g. 1520, 1530, 1540, 3530) may be taken to satisfy Faculty degree requirements but do not count as Computer Science credits.
COSC 1020 3.0Introduction to computation, computing machinery, algorithms and programming via theoretical concepts and practical skills. Problem solving via the structure, design and analysis of algorithms and their implementation as effective, correct and efficient programs. Control and data structures of a structured programming language (Java).
This course is introductory to the discipline in that it is the first in a hierarchy of courses; it is not a survey course. The emphasis is on the development of a theoretical conceptual basis and the acquisition of the intellectual and practical skills required for further study. The course is intended for prospective computer science majors, i.e. those with a welldeveloped interest in computing as an academic field of study and with strong mathematical, analytical and language abilities; it is not intended for those whose interest is casual, nor for those who require remedial work in the necessary background.
Warning: The work for this course includes a substantial number of exercises which require problem analysis, program preparation, testing, analysis of results, documentation, and submission of written reports. The course is demanding in terms of time, and requires the student to put in many hours of work per week outside of lectures. During the first few weeks there is a scheduled laboratory. After that students book time in the computer laboratory on an as needed basis.
Recommendation: You will benefit if you have prior practical experience with programming as well as using a computer. Students who wish to take a onecourse exposure to the practical aspects of computing should consider enrolling in COSC1520 3.0 and COSC1530 3.0 instead (see the following descriptions).
Prerequisites: If no universitylevel mathematics: OAC Calculus and one other OAC in mathematics (normally Finite Mathematics or Algebra and Geometry) with an average grade of 75 percent in all OAC mathematics and no grade less than 65 percent; otherwise: at least 6 credits of universitylevel mathematics with a grade average over all MATH credits of C+ or better [B+ or better if it is a service course (second digit is 5)].
Recommended: Previous programming experience; for example, a high school programming course or SC/AS/COSC1530 3.0.
Corequisite: AS/SC/AK/MATH1090 3.0.
COSC 1030 3.0This course is a continuation of COSC1020 and covers some of the fundamentals of software development, various data structures (arrays, queues, stacks, trees, lists), and algorithms that use these structures (sorting, searching). An object oriented approach will be introduced. Students will use the Unix operating system with the X Window System.
Prerequisites: COSC1020 3.0; MATH1090 3.0
COSC 1520 3.0This course is appropriate for students who are not majoring in Computer Science, but who would like an introduction to the use of the computer as a problemsolving tool. No previous computing experience is assumed, but the course will involve a number of programming exercises, so some facility with problemsolving and symbolic operations will be very helpful.
An introduction to the use of computers focusing on concepts of computer technology and organization (hardware and software), and the use of applications and information retrieval tools for problem solving.
Topics to be studied include: the development of information technology and its current trends; analysis of problems for solution by computers, report generation, file processing; spreadsheets; database; numeric and symbolic calculation; the functions of an operating system; interactive programs.
Students should be aware that like many other computer courses, this course is demanding in terms of time, and should not be added to an already heavy load. There is scheduled and unscheduled time in the Glade laboratory using NeXT computers. The course is not appropriate for students who want more than an elementary knowledge of programming and it cannot be used as a substitute for COSC1020 3.0/1030 3.0: Introduction to Computer Science.
Advice: If it is possible, we suggest that you enrol for the summer or winter term.
Note: This course is not open to students who have passed or are taking COSC1020 3.0. This course counts as elective credits towards satisfying Faculty degree requirements but does not count as Computer Science credits.
Prerequisites: none
COSC 1530 3.0Concepts of computer systems and technology  e.g., software engineering, algorithms, programming languages, theory of computation. Practical work focuses on problem solving using a highlevel programming language. The course requires extensive laboratory work.
Note: This course is designed for students who are not Computer Science majors, but may be used as preparation by those who wish to major in Computer Science but lack programming background. Students who plan to major in computer science must also take SC/AS/COSC1020 3.0 and SC/AS/COSC1030 3.0.
Prerequisites: none
Degree credit exclusions: SC/AS/COSC1540 3.0. This course is not open to any student who has passed or is taking SC/AS/COSC1020 3.0.
COSC 1540 3.0Introduction to problem solving using computers  top down and modular design; implementation in a procedural programming language  control structures, data structures, subprograms; application to simple numerical methods, modelling and simulation in the sciences; use of library subprograms.
This course is intended for students in the Faculty of Pure and Applied Science.
Note: This course is not open to any student who has passed or is taking COSC1020 3.0. This course counts as elective credits towards satisfying Faculty degree requirements but does not count as Computer Science credits.
Suggested Reading:
Prerequisites: none
Degree credit exclusions: COSC1530 3.0, SC/ACMS 1010 2.0.
Course Descriptions: 2000Level
General Prerequisites
Before enrollment is permitted in any 2000level computer science course the following must be met.
Specific prerequisites may also apply to individual courses. Taking more than two 2000level computer science courses per term is not permitted.
COSC 2001 3.0The course introduces different theoretical models of computers. Topics covered may include the following.
Prerequisites: general prerequisites.
COSC 2011 3.0This course discusses the fundamental data structures commonly used in the design of algorithms. At the end of this course, students will know the classical data structures, and master the use of abstraction, specification and program construction using modules. Furthermore, students will be able to apply these skills effectively in the design and implementation of algorithms.
Topics covered may include the following.
Prerequisites: general prerequisites.
COSC 2021 3.0Computers can be usefully viewed as having a structure organized into several levels, ranging from highlevel programming languages such as Pascal or C to digital logic circuits. Each level provides specific resources for the programmer which are created by the structure at the next lower level.
This course intends to provide students basic understanding of computers at the lowest levels of this structure. The ways in which data are represented in memory and transformed by machine instructions are explored.
The major functional blocks of a computer including main memory, control unit, ALU, input/output bus structures, interrupt system, DMA channels, and peripheral devices are studied. Some assembler programming and microprogramming will be required.
Suggested Reading:
Prerequisites: general prerequisites.
COSC 2031 3.0The programming languages C and C++ are taught as a second programming language. The course assumes some programming experience  typically that obtained in the firstyear computer science course. The emphasis is on practical exploration of a particular strength of C, rather than its use as a generalpurpose language. C is a toolmaking tool for working at a lowlevel; it is a programming language designed for, and used in, the writing of utilities that access the primitives of the underlying machine architecture and the operating system.
The UNIX programming environment is considered at both the command level (man 1): shells, utilities, filters, etc., and the system call (man 2) and standard library (man 3) levels.
The focus is on some Unix operating system userinterface primitives, e.g. fork/exec, file descriptors, read/write, etc. The emphasis here is on practical exploration.
The X Window System will be presented practically, and at the level of the Xlib Clanguage library interface. The emphasis here is also on practical exploration, but now with visual graphic feedback. There will also be some theoretical consideration of the protocol and serverclient networktransparent architecture, and the X prime directive: "mechanism, not policy".
Students should note that this course has a substantial selfdisciplined laboratory component.
Suggested Readings:
Prerequisites: general prerequisites.
Course Descriptions: 3000Level
General Prerequisites
Before enrollment is permitted in any 3000level computer science course (except service courses 35xx x.x) the following prerequisites must be met.
Specific prerequisites may also apply to individual courses.
Warning: Although Java is used in introductory courses, some upper level courses assume students have a working knowledge of C++, and/or the C programming language, therefore students may want to plan on completing COSC2031 3.0 before entering third year.
COSC 3001 1.0A seminar course taught by guest speakers from industry, government and the university. Content changes from year to year, but includes such topics as professional ethics, communications regulations, space law, space science policy, project management, privacy and security issues in computing.
Prerequisites: Eligibility to proceed in the Specialized Honours stream in SCS beyond the 2000level requirements.
Degree Credit Exclusions: EATS 3001 1.0, PHYS 3001 1.0, COSC3002 1.0
COSC 3002 1.0A seminar course taught by guest speakers from industry, government and the university. Content changes from year to year, but includes topics such as professional ethics, communications regulations , project management, privacy and security, legal issues in computing.
Prerequisites: general 3000level prerequisites
Degree Credit Exclusions: EATS 3001 1.0, PHYS 3001 1.0, COSC3001 1.0
COSC 3101 3.0This course is intended to teach students the fundamental techniques in the design of algorithms and the analysis of their computational complexity. Each of these techniques are applied to a number of widely used and practical problems. At the end of this course, a student will be able to: choose algorithms appropriate for many common computational problems; to exploit constraints and structure to design efficient algorithms; and to select appropriate tradeoffs for speed and space.
Topics covered may include the following.
Suggested reading:
Prerequisites: general prerequisites, including MATH2320 3.0 (SCS students may enrol without MATH2320 3.0 or concurrently with MATH2320 3.0)
NOTE: This course is required of all specialized honours students in computer science except those in the SCS stream.
COSC 3111 3.0Every program implicitly asserts a theorem to the effect that if certain input conditions are met then the program will do what its specifications or documentation says it will. Making that theorem true is not merely a matter of luck or patient debugging; making a correct program can be greatly aided by a logical analysis of what it is supposed to do, and for small pieces of code a proof that the code works can be produced handinhand with the construction of the code itself. Good programming style works in part because it makes the verification process easier and this in turn makes it easier to develop more complex algorithms from simple ones.
The course will provide an introduction to the basic concepts of formal verification methods. It will also include the use of simple tools to aid in verification.
Topics covered will include the following.
Suggested readings:
Prerequisites: general prerequisites, including MATH 2090.03
COSC 3121 3.0This course is concerned with an introduction to matrix computations in linear algebra for solving the problems of linear equations, nonlinear equations, interpolation and linear least squares. Errors due to representation, rounding and finite approximation are studied. Illconditioned problems versus unstable algorithms are discussed. The Gaussian elimination with pivoting for general system of linear equations, and the Cholesky factorization for symmetric systems are explained. Orthogonal transformations are studied for computations of the QR decomposition and the Singular Values Decompositions (SVD). The use of these transformations in solving linear least squares problems that arise from fitting linear mathematical models to observed data is emphasized. Finally, polynomial interpolation by Newton's divided differences and spline interpolation are discussed as special cases of linear equations. The emphasis of the course is on the development of numerical algorithms, the use of intelligent mathematical software and the interpretation of the results obtained on some assigned problems.
Topics covered may include the following.
Degree Credit Exclusion: MATH3241 3.0
COSC 3122 3.0The course includes a study of algorithms and computer methods for differentiation, integration, and solution of ordinary differential equations. Nonlinear equations of one variable, systems of nonlinear equations, optimization of functions of one and several variables and their relation to nonlinear equations are also covered. The emphasis of the course is on the development of numerical algorithms, the use of intelligent mathematical software and the interpretation of the results obtained on some assigned problems.
Topics covered may include the following.
Prerequisites: COSC3121 3.0; MATH2270 3.0
Degree Credit Exclusion: MATH3242 3.0
COSC 3201 3.0Suggested readings:
Prerequisites: general prerequisites, including COSC2021 3.0.
COSC 3211 3.0Data  Signal  
Analogue  Analogue  amplitude, frequency, phase modulation 
Digital  Analogue  amplitude, frequency, phase shift keying 
Analogue  Digital  sampling, quantisation, pulse code modulation. 
Digital  Digital  NRZL, NRZI, BipolarAMI and Manchester 
Prerequisites: general prerequisites, including COSC2021 3.0 and MATH2090 3.0
COSC 3212 3.0This course covers the upper layers in the OSI(TCP/IP) reference models. Topics covered include:
Prerequisites: general prerequisites; COSC3211 3.0
COSC 3301 3.0The topic of programming languages is an important and rapidly changing area of computer science. This course introduces students to the basic concepts and terminology used to describe programming languages. Instead of studying particular programming languages, the course focuses on the "linguistics" of programming languages, that is, on the common, unifying themes that are relevant to programming languages in general. The algorithmic, or procedural, programming languages are particularly emphasized. Examples are drawn from early and contemporary programming languages, including Fortan, Algol 60, PL/I, Algol 68, Pascal, C, C++, Eiffel, Ada 95, and Java.
This course is not designed to meet the needs of the student who wishes to learn to program in a particular programming language. However, any student who completes this course should be able to learn any new programming language with relative ease.
Topics covered may include the following.
Prerequisites: general prerequisites, including COSC 2001 3.0.
COSC 3311 3.0"A program which does not work is undoubtedly wrong; but a program which does work is not necessarily right. It may still be wrong because it is hard to understand or because it is hard to maintain as the program requirements change; or because its structure is different from the structure of the problem." (M. A. Jackson)
This course introduces the topic of software design through lectures, supplementary readings and a set of small design problems. The course deals with the problem of designing software that can be used, understood and modified by people other than the original designer.
Software design is in itself a large topic as design can deal with various classes of programs and systems: small, medium and large; batch; real time; distributed; and interactive (visual and graphical). Every design class has its own problems. In this course we deal with small to medium programs and small systems that work without critical time constraints (although time will be considered).
We examine design methods such as JSP (Jackson System Programming), Data Flow, SADT (Structured Analysis and Design Technique), top down, bottom up and structured design methods. We show how theoretical notions from finite state machines and grammars are related to and used in the design process.
Some of the low level techniques we look at are: abstract data types; backtracking; divide and conquer; structure clash resolution; process inversion; coroutines; and error handling.
Design issues are related to the other phases of developing a program: requirements analysis, specification, implementation, testing, and maintenance.
Upon leaving the course, you can expect to be able to design, implement and modify programs and systems of programs which transform sequences from one form to another. You will understand the role of tools and frames in the design process. You will be able to evaluate program designs and design methods.
Prerequisites: general prerequisites, including COSC 2001 3.0, COSC2031 3.0 and MATH2090 3.0
COSC 3321 3.0This course is intended to teach students the fundamental concepts that underlie operating systems, including multiprogramming, concurrent processes, CPU scheduling, deadlocks, memory management, file systems, protection and security. Many examples from real systems are given to illustrate the application of particular concepts. At the end of this course, a student will be able to understand the principles and techniques required for understanding and designing operating systems.
Prerequisites: general prerequisites, including COSC2021 3.0 and COSC 2031 3.0
COSC 3331 3.0Introduction to the theoretical and practical methods of objectoriented software construction. Topics include: single and multiple inheritance, type hierarchies, polymorphism, operator overloading, class library design, templates, constraint based programming; and contract model of design.
This course is a detailed introduction to the methodology and practice of ObjectOriented software construction, one of the major areas of software engineering practice and research.
A source program in an objectoriented programming environment is based on independently defined abstract program units called object classes or types; the object instances of the classes are created in the program and interact through message passing at runtime. Each object is a program unit which packages both a coherent collection of data elements and the methods (routines) for their manipulation. The object encapsulates its data elements, which means that the object class has an interface which defines all and only what is visible about the object instances to other objects in the program environment. These techniques promote the reuse of reliable code and reduce the frequency of the kinds of programming which arise in attempting to integrate the different parts of a complex program.
The course will introduce the theoretical concepts of objectoriented programming and design, and present examples using the objectoriented programming language C++.
The course assumes a general knowledge of C++ (i.e. base types, control structure, pointers, references, functions, parameter passing, etc.) as well as general notion of abstract data types and as they are implemented in C++ (i.e. classes).
The topics to be covered include the following.
Prerequisites: general prerequisites
Degree Credit Exclusion: COSC3010A 3.0
COSC 3401 3.0The course will introduce and explore programming concepts used in symbolic and knowledgebased computing. It is intended to give the student a programming background which will be useful for further work in logic programming, expert systems, and artificial intelligence.
The programming language Prolog will be considered in detail. Prolog is a declarative programming language based on the concept of a logical assertion. It is widely used for constructing knowledgebased and expert systems.
The course will develop the following concepts.
Prerequisites: general prerequisites, including MATH 2090 3.0
COSC 3402 3.0Artificial Intelligence (AI) deals with building a system which can operate in an intelligent fashion. Neat as this simple definition is, it obscures the complex nature of intelligence. At the time of the Dartmouth Conference (1956), regarded by many as the start of AI, some researchers believed it would be possible to create a "thinking machine" in a matter of a few years. That was close to 40 years ago, and we are still far from our goal, but we have learned a lot on the way.
In this course, we begin by discussing differing definitions of artificial intelligence and go on to examine fundamental concepts in AI, building on material introduced in COSC3401 3.0: Introduction to Symbolic Computation. Topics to be covered include reasoning under uncertainty, search, constraint propagation, planning and problem solving.
Prerequisites: general prerequisites; COSC3401 3.0; MATH2320 3.0
COSC 3408 3.0Simulation is a technique for dealing with problems that do not admit exact (or "analytic") solutions via mathematical analysis. A model of the system to be studied is constructed, and then the model is run to see how it performs, either to predict how the system will behave, or, if the behaviour of the system is known, to test the validity of the model of the system. A computer is a tool for supporting a large amount of activity in the running of the model.
A "discrete system" simulation is one which admits a discreteevent model that can run be in discrete steps that match the structure of the model. (For simulation of continuous systems see COSC 3418 3.0)
Examples of discrete systems studied by simulation include games and other dynamic systems involving small populations where it is feasible to model individual's behaviour. Major subtopics include the generation and use of random numbers, queuing systems, and the visual presentation of behaviour.
Prerequisites: general prerequisites; MATH2560 3.0.
Degree Credit Exclusion: MATH4930B 3.0
COSC 3411 3.0The purpose of this course is to introduce students to file organizations and the hardware and software involved in the creation and manipulation of files. The course presents basic concepts, criteria for choosing between alternative file organizations, and other topics that are important for the understanding of file management. At the end of this course a student will be able to understand and apply file organization techniques in design and analysis of file management systems.
Topics covered may include the following.
Suggested readings:
Prerequisites: general prerequisites, including COSC 2021 3.0, COSC2031 3.0 and MATH2090 3.0; knowledge of the C or C++ language is recommended; MATH2320 3.0 is recommended.
COSC 3412 3.0The purpose of this course is to introduce the fundamental concepts of database management, including aspects of data models, database languages, and database design. At the end of this course, a student will be able to understand and apply the fundamental concepts required for the use and design of database management systems.
Topics may include the following:
Prerequisites: general prerequisites; COSC3411 3.0
COSC 3418 3.0Simulation is a technique for dealing with problems that do not admit exact (or "analytic") solutions via mathematical analysis. A model of the system to be studied is constructed, and then the model is run to see how it performs, either to predict how the system will behave, or, if the behaviour of the system is known, to test the validity of the model of the system. A computer is a tool for supporting a large amount of activity in the running of the model.
A "continuous system" may either be presumed to be inherently continuous or it may, at a fine enough scale, be actually composed of discrete events. However, in simulation, a "continuous system" is one for which the model, due to practical necessity, is described by continuous variables regardless of its physical structure. However, the running of a continuous model involves, also of necessity, discrete steps. Thus central to continuous system simulation is the problem of approximation. (For simulation of discrete systems see COSC 3408 3.0)
Examples of continuous systems studied by simulation include dynamic systems involving very fine variations or large populations. Major subtopics include chaotic behaviour, the numerical solution of differential equations by finite methods, and related issues of stability and errors.
Prerequisites: general prerequisites; MATH2560 3.0.
COSC 3530 3.0This writingintensive course is for upperyear students enrolled in Computer Science, Space and Communication Sciences, and related fields. Students develop confidence and competence in professional and technical writing. Focus is on communication of complex information in a clear, sensible style. Articles, enduser documentation and technical reports will be critically evaluated in class. Outside speakers from industry will be invited to provide a realworld perspective on needs.
Note: This course counts as elective Science credits toward satisfying Faculty degree requirements but does not count as Computer Science credit.
Web site: www.yorku.ca/bethune/courses/3030.htm
Corequisite: concurrent enrolment in at least one course in 3000 or 4000level Computer Science, Physics, or other applied science. English language proficiency is expected.
Degree Credit Exclusions: BC3030 3.0; BC3050 3.0.
Course Descriptions: 4000Level
General Prerequisites
Before enrollment is permitted in any 4000level computer science course the following requirements must be met.
Specific prerequisites may apply to individual courses.
COSC 4001 6.0Individual projects will be assigned by mutual agreement between the student and a faculty member. The work may be done under supervision by the faculty member, or under supervision of an industrial associate to that faculty member. The projects will be selfcontained problems of a design nature, and will be pursued in the manner of a space project. Thus, the first step is to define the requirements of the design, the second to carry out a review of previous work, and the third to execute the design. Following that, the design shall be tested, normally through simulation, and conclusions drawn. A report of professional quality shall be written and submitted.
Prerequisites: Satisfactory completion of the 3000level courses in the Space and Communication Science core
Degree Credit Exclusions: COSC4080 3.0, EATS4001 6.0, PHYS4001 6.0
COSC 4010C 3.0This is a course for advanced students, normally those in the fourth year of an honours programme, or students who have completed six full computer science courses. Students who have a project they wish to do, need to convince a member of the faculty in the department that it is appropriate for course credit. Alternatively, students may approach a faculty member in the Department (typically, one who is teaching or doing research in the area of the project) and ask for project suggestions. Whatever the origin of the project, a 'contract' is required. It must state the scope of the project, the schedule of work, the resources required, and the criteria for evaluation. The contract must be signed by the student and his/her project supervisor and be acceptable to the course director.
Internship students may elect to receive credit for their internship as a project course. This is outlined further at the beginning of this calendar. A 'contract' is still required.
Prerequisites: general prerequisites; permission of the course director. Restricted to students who have completed 36 credits in Computer Science.
Degree Credit Exclusion: COSC4001 6.0
COSC 4101 3.0The course discusses advanced data structures: heaps, balanced binary search trees, hashing tables, redblack trees, Btrees and their variants, structures for disjoint sets, binomial heaps, Fibonacci heaps, finger trees, persistent data structures, etc. When feasible, a mathematical analysis of these structures will be presented, with an emphasis on average case analysis and amortized analysis. If time permits, some lower bound techniques may be discussed, as well as NPcompleteness proof techniques and approximation algorithms.
The course may include the following topics.
Prerequisites: general prerequisites, including COSC 3101 3.0; MATH2320 3.0
COSC 4111 3.0This course is the second course in the theory of computing. It is intended to give students a detailed understanding of the basic concepts of abstract machine structure, information flow, computability, and complexity. The emphasis will be on appreciating the signficance of these ideas and the formal techniques used to establish their properties. Topics chosen for study include: models of finite and infinite automata, the limits to computation, and the measurement of the intrinsic difficulty of computational problems.
Prerequisites: general prerequisites, including COSC3101 3.0; MATH2320 3.0.
COSC 4201 3.0This course presents the core concepts of computer architecture and design ideas embodied in many machines and emphasizes a quantitative approach to cost/performance tradeoffs. This course concentrates on uniprocessor systems. A few machines are studied to illustrate how these concepts are implemented; how various tradeoffs that exist among design choices are treated; and how good designs make efficient use of technology. Future trends in computer architecture are also discussed.
Topics covered may include the following.
Prerequisites: general prerequisites, including COSC 3201 3.0 and COSC3321 3.0
COSC 4211 3.0Topics covered may include the following.
Prerequisites: general prerequisites, including COSC 3211 3.0 and COSC3408 3.0
COSC 4242 3.0The study of computer vision, graphics and robotics requires background in the concept of discrete signals, filtering, and elementary linear systems theory. Discrete signals are obtained by sampling continuous signals.
In this course, students review the concept of a discrete signal, the conditions under which a continuous signal is completely represented by its discrete version, linear timeinvariant systems.
Topics covered may include the following.
Prerequisites:general prerequisites; COSC3121 3.0 or MATH3241 3.0.
Degree Credit Exclusions: COSC4010B 3.0 EATS4020 3.0, MATH4830 3.0, PHYS4060 3.0.
COSC 4301 3.0This course is a continuation of COSC3301 3.0 Programming Language Fundamentals. Like its predecessor, the course focuses on the linguistics of programming languages; that is, on the common, unifying themes that are relevant to programming languages in general. Both algorithmic and nonalgorithmic language categories are examined. Current techniques for the formal specification of the syntax and semantics of programming languages are studied. Skills are developed in the critical and comparative evaluation of programming languages.
Prerequisites: general prerequisites, including COSC 3301 3.0
COSC 4302 3.0This course is concerned with a variety of theoretical and practical questions that are raised by the need to implement programming languages. The implementation of a programming language is accomplished by writing a computer program that functions as a "translator" or "language processor". Language processors can be categorized as compilers, crosscompilers, interpreters, assemblers, and preprocessors. However, the different kinds of translators generally exhibit a common internal structure consisting of standardized "phases": the scanner, parser, and semantics. Because of this common structure, it is appropriate to study language processors as a unified group. However, the course emphasizes the most important class of language processors: compilers.
As a practical exercise, students are required to design and implement components of a compiler.
Topics covered may include the following.
Prerequisites: general prerequisites, including COSC2031 3.0 and COSC 3301 3.0
COSC 4311 3.0System Development deals with the construction of systems of interacting processes. The course focuses on abstraction, specification, and analysis in software system development. Abstraction and specification can greatly enhance the understandability, reliability and maintainability of a system. Analysis of concurrency and interaction is essential to the design of a complex system of interacting processes.
The course is split into three parts. The first part discusses a semiformal method, Jackson System Development (JSD) by Michael Jackson. JSD is used to build an understanding of what system development entails and to develop a basic method of constructing practical systems of interacting processes. JSD gives precise and useful guidelines for developing a system and is compatible with the object oriented paradigm. In particular, JSD is well suited to the following.
The second part of the course discusses the mathematical model CSP (Communicating Sequential Processes by C.A.R. Hoare). While CSP is not suitable to the actual design and development of a system of interacting processes, it can mathematically capture much of JSD. Consequently, it is possible to use formal methods in analyzing interprocess communication arising out of JSD designs.
The third part of the course discusses Z notation and its use in the specification of software systems. Z has been successfully used in many software companies  such as IBM and Texas Instruments  to specify and verify the correctness of real systems.
Prerequisites: general prerequisites, including COSC 3311 3.0, and COSC3111 3.0 or COSC3321 3.0.
COSC 4321 3.0An operating system has four major components: process management, input/output, memory management, and the file system. This project oriented course puts operating system principles into action. This course presents a practical approach to studying implementation aspects of operating systems. A series of projects is included, making it possible for students to acquire direct experience in the design and construction of operating system components. A student in this course must design and implement some components of an operating system and have each interact correctly with existing system software. The programming environment is C++ under Unix. At the end of this course, a student will be able to design and implement the basic components of operating systems.
A solid background in operating systems concepts, computer architecture, C, and UNIX is expected.
Prerequisites: general prerequisites, including COSC 3321 3.0.
COSC 4331 3.0This course introduces the student to the fundamental algorithms of 3D computer graphics and image synthesis.
The first half of the course covers window systems, display hardware, graphical primitives, scan conversion, two and threedimensional transformations and the mathematics of planar geometric projection.
The second half concentrates on raster algorithms and image synthesis. Some of the topics include visible surface algorithms, modeling, shading, global illumination, antialiasing and texture mapping.
Students are expected to be familiar with C and UNIX and will be using the X window environment on the undergraduate workstations.
Prerequisites: general prerequisites: MATH2221 3.0
COSC 4341 3.0Recent studies have shown that on average, 50% of the costs of modern application programs come from the development of the program's user interface. At the same time, users of programs are becoming increasingly aware and critical of poorly designed user interfaces. The modern system designer must, therefore, be capable of creating systems that are easy to use and that truly address the needs of the users, while still managing to remain within budget.
This course introduces the concepts and technology necessary to manage the design and implementation of interactive software. Students will learn methods for designing software matched to the goals, tasks and skills of the eventual users of the system. A development methodology is presented in which each development stage involves evaluation of the quality of the system design. Units in the course will cover User Needs Analysis, User Interface Design, TaskOriented Specification, Architecture Design of Interactive Systems, System Implementation, and User Testing and Evaluation.
The course is based on a project which involves programming in Turing, a Pascallike language. Students are expected to learn Turing on their own.
Prerequisites: general prerequisites.
COSC 4351 3.0In realtime computing systems the correctness of the system depends not only on the logical result of the computation but also on the time at which the results are produced. For example, a computer controlling a robot on the factory floor of a flexible manufacturing system, must stop or turn the robot aside in time to prevent a collision with some other object on the factory floor. Other examples of current realtime systems include communication systems, traffic systems, nuclear power plants and space shuttle and avionic systems.
Realtime programs in many safetycritical systems are more complex than sequential programs or concurrent programs that do not have realtime requirements. This course will deal with the modelling, simulation, specification, analysis, design and verification of such realtime programs. The objective of the course is to expose the student to current techniques for formally proving the correctness of realtime behaviour of systems.
Topics covered may include the following.
Prerequisites: general prerequisites, including COSC 3311 3.0 or COSC3321 3.0 or COSC3111 3.0.
COSC 4352 3.0In realtime computing systems the correctness of the system depends not only on the logical result of the computation but also on the time at which the results are produced. For example, a computer controlling a robot on a factory floor must stop the robot in time to prevent a collision. Other examples of realtime systems include communication systems, traffic systems, nuclear power plants and avionic systems. Realtime systems are complex and require a knowledge of reactive programs for their design. A reactive program maintains an ongoing nonterminating interaction with its environment rather than computing some final value on termination.
The course will focus on the design, construction and verification of soft and hard realtime systems. Topics may include: models of concurrent processes with access to a clock (e.g. by fair transition systems with timeouts and clock variables), semaphores and synchronization, process communication and fairness, temporal logic for specifying safety properties (e.g. freedom from deadlock), liveness and realtime response, verification of realtime systems using temporal logic modelchecking tools such as StateClock/STeP, and examples from realtime programming languages (Ada and Java).
Prerequisites: general prerequisites, including COSC 3301 3.0 or COSC3311 3.0 or COSC3321 3.0
COSC 4361 3.0The course focuses this year on the design and implementation of hypermedia presentation systems. "Hypermedia" refer to the nonlinear organization of digital information, in which items (such as a word in a text field or a region of an image) are actively linked to other items. Users interactively select and traverse links in a hypermedia presentation system in order to locate specific information or entertainment, or to browse in large archives of text, sound, images, and video. Wellstructured hypermedia give users a way of coping with the "navigation" problem created by availability of lowcost, fast access, highdensity storage media.
We will explore the following topics.
Students will be expected to familiarize themselves quickly with the Macintosh interface and basic features of the operating system. Students will be asked to schedule themselves for at least six hours/week lab time in the Department's Multimedia Lab (161 CCB), as the course work will involve a significant amount of exploration and development of multimedia/hypermedia materials. Students will be divided into small teams with specific responsibilities for individual exploration and programming tasks assigned in connection with the course topics. Tasks may take the form of constructing presentations, prototype applications, or the programming of useful scripts. The teams will be asked to write short reports on their work which will be presented in class.
Prerequisites: general prerequisites.
COSC 4401 3.0This course will be an indepth treatment of one or more specific topics within the field of Artificial Intelligence. Possible topics include the following.
Contact the course director for information regarding the focus of the course this year.
Prerequisites: general prerequisites, including COSC 3402 3.0
COSC 4402 3.0Logic programming has its roots in mathematical logic and it provides a view of computation which contrasts in interesting ways with conventional programming languages. Logic programming approach is rather to describe known facts and relationships about a problem, than to prescribe the sequence of steps taken by a computer to solve the problem.
One of the most important problems in logic programming is the challenge of designing languages suitable for describing the computations which these systems are designed to achieve. The most commonly recognized language is PROLOG.
When a computer is programmed in PROLOG, the actual way the computer carries out the computation is specified partly by the logical declarative semantics of PROLOG, partly by what new facts PROLOG can "infer" from the given ones, and only partly by explicit control information supplied by the programmer. Computer Science concepts in areas such as artificial intelligence, database theory, software engineering knowledge representation, etc., can all be described in logic programs.
Topics covered may include the following.
At the end of this course a student will be familiar with fundamental logic programming concepts and will have some programming expertise in PROLOG.
Prerequisites: general prerequisites, including COSC 3401 3.0, and COSC3101 3.0 or COSC3111 3.0.
COSC 4411 3.0This course is the second course in database management. It introduces concepts, approaches, and techniques required for the design and implementation of database management systems.
Topics may include the following:
Suggested Readings: R. Elmasri and S.B. Navathe, Fundamentals of Database Systems, 2nd Ed., Benjamin Cummings, 1994.
Prerequisites: general prerequisites, including COSC3412 3.0.
COSC 4421 3.0The course introduces the basic concepts of robotic manipulators and autonomous systems. After a review of some fundamental mathematics the course examines the mechanics and dynamics of robot arms, modible robots, their sensors and algorithms for controlling them. A Robotics Laboratory is available equipped with a manipulator and a moving platform with sonars, several workstations and an extensive collection of software.
Prerequisites: general prerequisites; MATH2221 3.0.
COSC 4422 3.0Computer Vision is a very challenging problem with wide applications. It spans several disciplines within science and engineering: computer science, computer engineering, photogrammetry, telecommunications, robotics, medicine and the list goes on. This course introduces the fundamental concepts of vision with emphasis on computer science.
In particular the course covers the image formation process, color analysis, image processing, enhancement and restoration, feature extraction and matching, 3D parameter estimation and applications. A Vision Laboratory is available where students can gain practical experience. The Lab includes several workstations equipped with video cameras, digitizers and image processing software.
Prerequisites: general prerequisites, including COSC3121 3.0
The introductory courses MATH1090 3.0 and MATH1300 3.0 , and MATH1310 3.0 are required of all Computer Science majors. Students who have not taken OAC calculus should consult advisors in the Mathematics Department to determine which courses they should take before attempting MATH1300 3.0. In addition, some combination, or all of, the following mathematics courses will also be required, depending on the degree programme; MATH2090 3.0, MATH2221 3.0, and MATH2320 3.0.
Mathematics Substitute Course List
Course  Acceptable Substitute  

MATH1025 3.0  MATH2021 3.0, MATH2221 3.0  
MATH1090 3.0  MATH1120 3.0  
MATH1300 3.0  MATH1000 3.0, MATH1013 3.0  
MATH1310 3.0  MATH1010 3.0, MATH1014 3.0  
MATH2221 3.0  MATH1025 3.0, MATH2021 3.0 
MATH 1090 3.0
Introduction to Sets and Logic
(formerly MATH1120 3.0)
This course is an introduction to sets, functions, relations, logic, induction and proof techniques, and may include a smattering of basic combinatorics and graph theory. It should be of value to mathematics or computer science majors, and may also appeal to students wanting to apply mathematics to the social and management sciences.
The final grade will be based on class tests and a final examination (and possibly assignments).
Prerequisites: One credit of OAC(Ontario Grade 13) mathematics or AK/MATH1710 6.0 or equivalent.
Degree Credit Exclusions: AS/SC/MATH1120 3.0, AK/MATH1409A 3.0, AK/MATH2400 6.0, AK/MATH2440 6.0, AK/MATH2441 3.0.
The course is not open to students who have taken or are taking any mathematics course at 3000 or higher level.
MATH 1300 3.0Topics include functions, limits, continuity, differentiation, meanvalue theorem, curve sketching, maxima and minima, Riemann integration, antiderivatives, fundamental theorem of calculus.
The final grade may be based on assignments, quizzes, class tests and a final examination worth at least 30%.
Prerequisites:OAC Calculus or AS/SC/MATH1500 3.0 or AS/SC/MATH1515 3.0 or AK/MATH1710 6.0 or equivalent.
Degree Credit Exclusions:AS/SC/MATH1000 3.0, AS/SC/MATH1013 3.0, AS/SC/MATH1505 6.0, AS/MATH1530 3.0, AS/AK/MATH1550 6.0, AS/ECON1530 3.0, SC/ACMS1030 6.0, SC/ACMS1050 6.0, AK/MATH1410 6.0, AK/MATH 1300 3.0, AK/MATH1409B 3.0.
MATH 1310 3.0This is the second in a series of introductory calculus courses. It is designed to follow MATH 1300 3.0.
Topics include fundamental theorem of calculus, logarithmic and exponential functions, trigonometric functions, techniques of integration, applications of integration theory, l'Hôpital's rule, infinite sequences and numerical series.
The final grade may be based on assignments, quizzes, class tests, and a final examination worth at least 30%.
Prerequisites: One of AS/SC/MATH 1000 3.0, AS/SC/MATH 1013 3.0, AS/SC/AK/MATH 1300 3.0, or, for nonScience students only, one of AS/MATH 1530 3.0 and AS/MATH 1540 3.0; or AS/AK/MATH 1550 6.0; or AS/ECON 1530 3.0 and AS/ECON 1540 3.0.
Degree Credit Exclusions: AS/SC/MATH 1010 3.0, AS/SC/MATH 1014 3.0, AS/SC/MATH 1505 6.0, SC/ACMS1030 6.0, SC/ACMS1050 6.0, AK/MATH1310 3.0, AK/MATH1410 6.0.
MATH 2090 3.0Logic is the "official" language of mathematics and is essential in establishing the foundations on which mathematics is built. In recent years, logic has also come to play a fundamental and major role in computer science. A knowledge of logic is now an absolute necessity for the computer professional. In this course we will introduce the student to the basics of mathematical logic and deductive reasoning. The course is primarily intended for Computer Science students but would be valuable to any student interested in formal reasoning. The topics covered will include the syntax and semantics of both propositional and predicate logic, an introduction to some axiomatic theories and a more detailed study of Peano arithmetic and induction.
There will be assignments using software for the PC computers; equipment will be available at the Steacie labs.
The final grade will be based on two class tests and a final examination (and possibly assignments).
Prerequisite: AS/SC/AK/MATH1090 3.0 or any 2000level MATH course (without second digit 5) or permission of the course director.
MATH 2221 3.0Linear algebra is a branch of mathematics which is particularly useful in other fields and in other branches of mathematics. Its frequent application in the engineering and physical sciences rivals that of calculus. Computer scientists and economists have long recognized its relevance to their discipline. Moreover, linear algebra is fundamental in the rapidly increasing quantification that is taking place in the management and social sciences. Finally, it is essential to higher mathematics courses in algebra, analysis, probability and statistics and geometry, where the ideas of linear algebra reappear.
This course and MATH2222 3.0 form a standard fullyear introduction to linear algebra. While the presentation is not excessively theoretical, proofs will be presented and the student is expected to master concepts as well as results. Applications will be left mainly for MATH 2222 3.0.
Topics to be studied include: systems of linear equations and matrices, determinants, linear dependence and independence of sets of vectors in Rn, vector spaces, inner product spaces and the GramSchmidt process.
The final grade will be based on term work and a final examination(with possible weights of 60% and 40% respectively).
Prerequisite: OAC algebra or any university mathematics course.
Degree Credit Exclusions: AS/SC/MATH1025 3.0, AS/SC/MATH2000 6.0; AS/SC/MATH 2021 3.0, SC/ACMS 1020 6.0; AK/MATH2220 6.0, AK/MATH2221 3.0.
MATH 2320 3.0This course is intended primarily, but not exclusively, for Computer Science students. It aims to provide an intensive introduction to a variety of algebraic and combinatorial structures which are needed in computer science. A student of mathematics should enjoy being introduced to this variety of mathematical topics, many of which are not covered elsewhere. The course does not require a previous knowledge of computer science.
In broad categories the topics to be covered include set theory (relations, functions, ...), combinatorics, graph theory and abstract algebra (posets, lattices, Boolean algebra, groups, ...). The emphasis will be on examples and on extracting common properties.
This course is a prerequisite for COSC 3101 3.0, COSC 3402 3.0, COSC 4101 3.0, COSC 4111 3.0.
The final grade may be based on two class tests (25% each), and a final examination (50%).
Prerequisite: AS/SC/AK/MATH 1090 3.0 or any 2000level MATH course (without second digit 5) or permission of the course director.
Degree Credit Exclusions: AK/MATH 2440 6.0, AK/MATH2442 3.0.
MATH 2560 3.0Displaying and describing distributions, normal distribution. Relationships between variables, regression and correlation. The need for design, experimental design and sampling design. Sampling distributions, bias, variability. Probability models, random variables, probability laws.
Prerequisite: Ontario Grade 12 Advanced Mathematics.
Degree Credit Exclusions: AS/SC/MATH 1131 3.0, SC/BIOL 3080 3.0, SC/BIOL 3090 3.0, AS/ECON 2500 3.0, AS/SC/GEOG 2420 3.0, AK/MATH 2442 3.0, AS/SC/PHED2050 3.0, AS/SC/PSYC 2202 3.0, AS/SOC/3030 6.0.
Not open to any student who has successfully completed AS/SC/MATH 2030 6.0.
