*** This file is complete.***

The final exam covers the entire course.

Therefore, the hints for all previous 2013 quizzes
and the questions and answers for all 2011 and 2013 
quizzes will be helpful.

Also, you should review lecture notes, relevant sections
of the textbook, your old homeworks, and the posted 
comments/solutions for your homeworks.

There may be a true/false question.  If so, it will
have the format and scoring algorithm of question 1
on http://www.cs.umd.edu/~oleary/c460/q10.pdf, with
a max score of 20 and a min score of 0.

I will give you a copy of the IA32 instructions handout
and the floating point assembler instruction handout
if they are needed.

You will be allowed to bring in one sheet of paper,
8.5" x 11", with any notes you think will be helpful.

-- You may use both sides, but no "overlays". 

-- The paper must be handwritten by you.

-- You will submit the sheet with your exam.


In addition, be able to:

-- Given a task, identify it as performed by an operating system, 
   a compiler, or an applications code.

   Examples: allocate space on a disk. 
             interpret pragmas in a C code.
             handle overflow.

-- Identify the role of BIOS and the bootstrap loader.

-- Distinguish between tasks performed by hardware, operating system,
applications programs, and BIOS.

-- List 5 major themes from the course and 5 important
   things you have learned.

-- Explain the significance of the username for the website:
   what did she have to do with scientific computing?

-- Identify the tasks in the stages in gcc: preprocessor, compiler,
assembler, linker.

-- Distinguish local, global, and external symbols (linker slide 14),
and those the linker does not handle.

-- Explain why GPUs are good computational devices, and
why they can be difficult to use effectively.




From the student presentations, this is all that you
need to be able to do:


-- Know the capabilities of tools like debuggers, version control, 
   profilers, collaborative code repositories (Dropbox), and symbolic
   arithmetic systems.
   in your development of software.

-- Define a loop invariant, which is a property that holds before
   each iteration of a "for" loop, or before each repetition
   in a "while" loop.  Example: This Matlab program computes
   n-factorial.  The loop invariant is "For each value of j,
   f = (j-1)!".

           f = 1;
           for j=1:n,
             f = f * j;
           end
   Loop invariants are used in induction proofs to show that
   programs are correct.

-- Explain that (pseudo) random number generators (like the
   functions "rand" in C or Matlab generate a permutation
   of a list of numbers so that the sequence has properties
   that mimic truly random numbers, such as those generated
   by the intervals between decays of atomic particles.
   A "seed" is used to specify where in the sequence you
   wish to begin.

-- Explain what encryption is and why scientific data might
   need to be encrypted.

-- Define the halting problem.

-- Write a program for an out-of-core sorting algorithm
   or a parallel sorting algorithm.

-- Understand that some problems (e.g., prime factorization)
   are easy on quantum computers and hard on conventional
   machines.


*** This file is complete.***