CMPT 120 Introduction to Computer Science and Programming I Chris Schmidt Algorithms What is an algorithm? An algorithm is a set of instructions on how to accomplish something The basic idea can be applied to many typical activities Recipes, assembly instructions, directions on how to get somewhere could all be viewed as types of algorithms Algorithms 1. 2. 3. 4. 5. Recipe Example from Study Guide Combine the room-temperature butter and the sugar. Mix until light and fluffy. Add the eggs to the creamed butter and mix to combine. In another bowl, combine the liquid ingredients and mix to combine. Sift together the flour and other dry ingredients. Alternately add the dry and liquid ingredients to the butter-egg mixture. Mix just enough to combine. Algorithms Aspects of a proper algorithm Solves a problem Unambiguous instructions How to make muffins Step 5 isn’t entirely clear Completes in a finite amount of time given proper input This clearly does Algorithms What sort of problems are algorithms created for? Sorting and searching We’ll be looking at some well known algorithms for this later in the semester Encryption and Decryption Mathematical: factoring, finding prime numbers Idea can be applied to any problem you want to write code to solve Algorithms 1. 2. 3. 4. 5. Check if a user entered number is prime Ask the user for a number to check the primeness of. Start with divisor equal to 2. If the user’s number is divided evenly by the divisor, it is not prime. You are done. If the divisor squared is less than the user’s number, increase it by one and go to step 3. If you’ve reached this step, the user’s number is prime. Algorithms Aspects of a proper algorithm Solves a problem Tests if a user entered number is prime Unambiguous instructions Completes in a finite amount of time given proper input What if step 4 didn’t compare the divisor with the square root of the user’s number? Pseudocode So far we’ve used natural language to describe algorithms It is helpful to describe algorithms in pseudocode (almost code) An algorithm written in pseudocode is then easily coded in any give programming language Pseudocode Digital Clock Example from Study Guide set hour to 0 set minute to 0 set second to 0 repeat forever: set second to second + 1 if second is more than 59, then set second to 0 set minute to minute + 1 if minute is more than 59, then set minute to 0 set hour to hour + 1 if hour is more than 23, then set hour to 0 write “hour :minute:second” wait for 1 second Pseudocode Pseudocode for prime number example set divisor to 2 write “Enter an integer greater than 2” read userNumber repeat while divisor2 < userNumber if userNumber % divisor is equal to 0 write “The number is not prime, it is divisible by :” write divisor exit program set divisor to divisor +1 write “The number is prime.” Writing a Program Define the problem Create a plan (algorithm) to solve the problem Translate your algorithm into code Test and make adjustments to your code and algorithm as neede Creating an Algorithm What to keep in mind when creating your algorithm Read in all needed input Proper output What are the normal cases (possibilities) based on the input? Are there any special cases? Algorithm Example Problem: Find the roots (real) of a quadratic equation. Quadratic Equation: ax2 + bx + c The roots are where this formula is equal to 0, ax2 + bx + c = 0 Ex. a=1,b=0,c=-1 x2 – 1 = (x-1) * (x+1) = 0 roots at x=1,x=-1 Algorithm: Roots of Quadratic Formula How do we find the roots? Quadratic equation Does this formula always work? Algorithm: Roots of Quadratic Formula Input: the coefficients a,b,c Output: the roots of ax2 + bx + c What cases do we need to handle? Algorithm: Roots of Quadratic Formula What cases do we need to handle? Normal Two distinct roots One root But what special cases do we need to be careful of? No roots 4ac > b2 a=0 (straight line bx+c=0 root at –c/b) a=0,b=0 (horizontal line, no roots unless c =0) a=0,b=0,c=0 (infinite roots) Algorithm: Roots of Quadratic Formula Pseudocode write “Enter the coefficients of the formula:” read a,b,c if a,b,and c equal 0 write “infinite roots” exit if a and b equal 0 write “no roots” exit if a equals 0 root = -c/b write “One root at x=“, root exit . . . Testing Remember once you’ve translated your pseudocode into actual code that you need to test every possible case