ECE Course Outline
ECE2036
Engineering Software Design (334)
 Prerequisites
 ECE 2020/2030 [min C] and ECE 2025/2026* [ min C]* Prerequisites indicated with an asterisk may be taken concurrently with ECE2036
 Corequisites
 None
 Catalog Description
 Objectoriented software methods for engineering applications. Numerical analysis methods; simulations and graphical presentation of simulation results; analysis of numerical precision. Programming projects.
 Textbook(s)
 Deitel and Deitel, C++, How to Program (10th edition), Prentice Hall. ISBN 9780134448848 (required)
Eckel, Thinking in C++: Introduction to Standard C++, Volume One (2nd edition), Prentice Hall, 2000. ISBN 0139798099, ISBN 9780139798092 (required) (comment: text is available free on line at http://original.jamesthornton.com/eckel/)  Course Objectives  As part of this course, students:

 Identify, formulate, and solve complex engineering problems by applying principles of eng/sci/math. (primary focus)
 Apply eng design to produce solutions to needs with public health/safety/welfare, global/cultural/economic factors. ( moderate focus)
 Acquire and apply new knowledge as needed, using appropriate learning strategies. (moderate focus)
 Course Outcomes  Upon successful completion of this course, students should be able to:

 Write a syntactically and semantically correct program using the objectoriented programming language chosen, such as C++.
 Define and develop a computer program to implement specific tasks associated with a welldefined engineering application.
 Choose the appropriate data structures to maintain the system state, and explain why the selected one is appropriate.
 Choose appropriate algorithms to maintain the progression of the system state, and explain why the selected algorithm is appropriate.
 Implement those data structures and algorithms using an objectoriented programming language such as C++.
 Use the developed program to analyze performance and behavior of the engineering application being studied .
 Create a class hierarchy of software objects with public inheritance and virtual functions to enable the use of polymorphism.
 Create class templates and function templates to be used in a generic programming style.
 Analyze the numerical error in floatingpoint calculations of linear equations of at least one multiplication and one addition.
 Use commonly available tools for software development, source code maintenance, and debugging.
 Implement their program using multiple threads in a shared memory, multiprocessor environment when appropriate.
 Recognize when and how an algorithm will benefit from parallelization.
 Topical Outline
Required Topics: 1.Review of C basic syntax, compilation, linking, libraries, etc. 2.Defining and implementing classes, constructors, destructors etc. 3.Member functions, virtual functions, pure virtual functions 4.Argument passing variations (by value, by pointer, by reference) 5.Managing dynamic memory (new, delete) 6.Inheritance and subclassing 7.Using common tools, gdb, make, gprof, valgrind, emacs etc. 8.Floating Point precision and numerical analysis 9.Introduction to Templates, including data structures and algorithms in the Standard Template Library 10.Parallel processing and concurrency Optional Topics: 11.Exceptions 12.Smart Pointers Typical Programming Projects: 1.One dimensional and two dimensional Fast Fourier Transforms, using the CooleyTukey algorithm 2.Matrix multiplication using dynamic memory allocation for arbitrary sized matrices, and efficient representation for sparse matrices. 3.Single variable numerical methods to solve firstorder differential equations, using forward Euler, backward Euler, and CrankNicolson methods 4.Embedded programming projects using sensor feedback, interupt driven I/O, PWM control of external devices, and graphical output 5. Optimal (and nonoptimal) search for solving problems with multiple solutions, including heuristic algorithms for approaching NPcomplete problems