design and write algorithms and subprograms to solve a variety of problems;