Courses in Computer Science (Division 353)

280(270). Computer Science I. Math. 115 or equivalent. Credit is granted for only one course from among CS 280 and 283. (3). (NS).

This is the first course in Computer Science for prospective concentrators. It introduces some of the basic concepts of algorithm and program preparation, using the PASCAL language as a vehicle. Students will be required to attend recitations and to prepare a number of computer programs of increasing complexity. Most of the programs will support the concepts that were introduced, and will be mainly non-numeric in nature. This course is not intended to be simply a course in programming. It is intended for people who will major in Computer Science, Computer Engineering, or Mathematics. Course work involves writing and running between five and eight computer programs. There may be several quizzes and/or exams. CS majors must complete course with a grade of B- or better. No prior experience with computers is necessary or assumed. If enrollment is greater than class size, a screening exam will be administered. A screening examination may be given to enroll people from the waiting list.

283(274). Elementary Programming. Math. 105 or the equivalent. Credit is granted for only one course from among CS 280 and 283. (3). (NS).

This course is an introduction to programming for people who intend to use the computer as a tool in their profession. The PASCAL Language is used as a vehicle for teaching structured programming methodologies. Students are required to participate in recitation and write five to eight computer programs of varying complexity. The course is a service course and is not considered appropriate for prospective computer science concentrators. There may be several quizzes and/or exams. No prior experience with computers is necessary or assumed.

383(374). Programming and Computer Systems. CS 283 or the equivalent. (4). (NS).

This is the second course in the programming sequence for non-concentration students and is normally preceded by CS 283 and followed by CS 480. The course focus is on advanced programming language concepts and hardware/software support for programming and programming languages. The programming language taught and used in the course is the same as in CS 283 and students without knowledge of the Pascal language can enroll in CS 387 concurrently. The four or five required programming exercises are solved in the programming language; other languages may be used to provide examples. Examples of machine organization are taken from the machine being used at the Computing Center; other organizations will be useful for some examples. Homework consists of work problems (not involving programming) and four or five programming exercises. Course format is two lectures per week (one-and-a-half hours each) plus one discussion/problem session each week. Course content is divided into four parts: (1) machine organization (computer structure and machine language; addressing techniques, representation of data; assembly systems; logic, micro-programming, emulation; computer systems organization; and utility and support systems), (2) advanced programming language concepts (review of basic concepts, subprograms, data structures, parallel processing), (3) programming language translation (BNF syntax specification, in-fix and post-fix notation, translation of arithmetic expression from in-fix to post-fix, and structures of compilers), and (4) comparative programming languages (relation to language features to problem domain and programming languages for special domains). (Frisque)

476(400). Foundations of Computer Science. EECS 303 or Math. 312 or permission of instructor. (3). (NS).

This is a basic course in the theory of Computer Science. It is required for CS concentration. Prerequisites are EECS 303 or Math 312 only. However, a certain math culture is necessary for a successful study. The recommended textbook is: Elements of the Theory of Computation, by H.R. Lewis and C.H. Papadimitriou, Prentiss-Hall. Methods of instruction are: lectures, intermediate exam, final exam and a lot of homework. Syllabus: (1) A survey of the necessary math tools, (2) Finite automata and regular languages, (3) Context-free languages and pushdown automata, (4) Turing machines and recursive functions, (5) Uncomputability, (6) Introduction to computational complexity.

480(476). Data Structures. CS 380 or 383 and 476 or the equivalent. (4). (NS).

This is the fourth course in the programming sequence for CS concentrators and is normally preceded by CS 280, 381, and 380. Data structuring principles of use in a wide variety of problem solving areas are covered. Alternatives are considered with respect to utilization of storage and time. Lectures and discussion sections.

481(478). Introduction to Software Architecture. CS 380 or 383; or permission of instructor. (4). (NS).

The purpose of the course is to teach the student the skills and techniques involved in the design and implementation of large software systems. The format of the course is a lecture for approximately 3/4 of the term, and a work on a project under the guidance of a TA. The grade will be based on two midterms and the project. The course is available to CS concentrators. Students are recommended (but not required) to take CS 480 before enrolling in this course. Textbook: R.S. Pressman, Software Engineering: A Practitioner's Approach.

485(472). Principles of Programming Languages. CS 380, and EECS 303 or Math 312. (4). (NS).

This course deals with the principles and techniques used in the design and implementation of programming languages. Several standard languages such as FORTRAN, ALGOL, PASCAL, SIMULA and LISP will be used for illustrative purposes. Review of basic concepts: formal languages, syntax and semantics, compilers and interpreters, hardware machine organization, basic language elements: data and control structures, procedures, statements and expressions; expression evaluation; control structures: iteration, recursion, coroutines and tasks; name management: parameter passing, non-local references, static and dynamic scoping, static-chains and displays, referencing in coroutines and tasks; storage management: stack- and heap-based, storage for coroutines; elementary translation concepts: lexical and syntax analysis, symbol tables, static type-checking, code-generation. Advanced topics concurrency; semantics. Textbook now recommended but not required: Design and Implementation. Required text: Ellis Ho;rowitz, Fundamentals of Programming Languages; Computer Science Press, 1983.

492. Artificial Intelligence for Undergraduates. Permission of instructor. (3). (NS).

Artificial Intelligence students enrolling in CS 492 this term must have completed CS 476, and it is recommended that students should also have completed CS 480. CS 492 will provide an introduction to research in Artificial Intelligence. The two basic themes of AI, Representation and Search, will be studied in abstract and in some of the many application areas of AI. The course will consist of three hours a week of lecture plus one hour a week of tutorial/problem-solving session given by a TA, both starting after the initial four weeks of CS 385. It is anticipated that the course will cover the following areas (not necessarily in non-overlapping fashion): (a) An historical outline: based on papers by Turing and Nilsson; (b)Representation: State-space (graph) representation, Problem- reduction (Hypergraph) representation. Macro-moves. Representation transformation (Gaschnig, Amarel, Korf); (c) Search: Backtracking (Depth-first, Breadth-first, Best-first), Forward-Checking, Branch and Bound, A*, AO*, SSS*; (d) Applications: Computer vision (Waltz, Rosenfeld, Haralick), Symbolic Integration (Slagle) Theorem Proving, Games and Puzzles. Expected work: Students may be required to implement algorithms, run experiments, solve problems, and/or survey research papers. No exam will be required. Text: Problem-Solving Methods in Artificial Intelligence by Nilsson (1971, McGraw-Hill). Recommended: Techniques in Artificial Intelligence, Shapiro (1979, Van Nostrand).) A course pack will be provided. Corequisites: CS 385: LISP short course. If not already taken, this should be taken. (Nudel)

574(520). Theoretical Computer Science I. Graduate standing in EECS or permission of the instructor. (4). (NS).
Theoretical Computer Science I.
A review of the automata theory and context-free grammars. General grammars, recursive functions, logic, complexity theory and applications of the above.

575(522). Theoretical Computer Science II. CS 476 or 574, or Math. 481. (4). (NS).

Universal algebra and probability theory with applications in computer science. The rest of the course consists of special topics. This winter special topics will include temporal logic with application to concurrent computations, and the theory of semantics. This is a continuation of CS 574. Lectures: three hours per week. Tutorials: one hour per week.

583(575). Compiler Construction. CS 480 or the equivalent. (4). (NS).

Introduction to compiling techniques including parsing algorithms, semantic processing, and code generation. With the aid of a compiler writing system, students implement a compiler for a substantial programming language. Other topics include portability, bootstrapping, parser generation, compiler writing systems. Very heavy programming load. (Kortesoja)

lsa logo

University of Michigan | College of LS&A | Student Academic Affairs | LS&A Bulletin Index

This page maintained by LS&A Academic Information and Publications, 1228 Angell Hall

The Regents of the University of Michigan,
Ann Arbor, MI 48109 USA +1 734 764-1817

Trademarks of the University of Michigan may not be electronically or otherwise altered or separated from this document or used for any non-University purpose.