The Design of Software Learning Environments Using Symbolic Computation: Two Case Studies in Pre-calculus