Lecture notes for CS 503, Advanced Programming I

Advanced Programming I Lecture Notes

23 January 2007 • Program Design


Outline

  • Design by Wishful Thinking

  • Design

  • Analysis

  • Testing

    A Problem

    What's a Solution?

    Are We Done?

    The Next Step

    Make A Wish

    Are We Done Now?

    find-maximal-collinear-subset(pts)
      lcs = { }
      for each subset ss in pts
        if collinear(ss)  and  #ss > #lcs
          lcs = ss
      return lcs
    

    Subsets

    Generating Subsets

    generate-subsets(s)
      if s ≠ {}
        for each e in s
          s' = s - {e}
          generate-subsets(s')    
    

    Revising The Design

    find-maximal-collinear-subset(pts, lcs)
      if collinear(pts)
        lcs = pts
      else 
        for each e in pts
          pts' = pts - {e}
          generate-subsets(pts', lcs)    
    

    Pseudocode Design

    Design

    Stepwise Refinement

    Design via Refinement

    Top-Down Design Advantages

    Top-Down Design Problems

    What's the Problem?

    Abstraction

    Details

    Testing

    Test Cases

    Collinearity Revisited

    The Next Solution

    find maximal collinear subset(points)
      max points = { }
      for p1 in points
        order points by increasing angle
        scan for similar angles
          similar angles mean collinear points
          remember the biggest set
      return max points
    

    Other Design Techniques

    Points to Remember


    This page last modified on 31 January 2006.

    This work is covered by a
    Creative Commons License.