Homework #6:
Transcription
Homework #6:
Homework #6: CSE 7, Winter 2015 Before beginning this homework, create a new Notepad++, H6_LastName.txt, file in your cs7wxx home directory If you are completing Homework#6 with a partner, following the sftp instructions from HW#1. To determine your cs7wxx account name, see UCSD ACMS account lookup: https://sdacs.ucsd.edu/~icc/index.php PARTNER PROGRAMMING (Refer to Homework#1 – password privacy and saving Partner2’sfiles) Please name your document "H6_Partner1Lastname_Partner2Lastname.txt". Be sure you have both partners' names, cs7wxx names, and PIDs at the top of your document. Please record your answers in Notepad++ txt files only. You must save Partner2’s file in their ieng6 home directory as well. You must use different partners for EACH lab and homework assignment. PART ONE: While-loops 1. Let’s practice a little bit with while loops. While loops are another form of iteration that allow the same set of instructions to be repeated multiple times. Just like for-loop, while loops execute instructions that are in the loop body multiple times. UNLIKE for-loops, while loops do not execute a fixed number of times. Instead, as the name implies, while loops continue while some condition is true. 2. For example, enter the following code into a script file called whiles.m : 3. The above code first creates a variable called my_mat that contains some numbers and another variable called i that is set to 8. Then, the while loop begins! The first thing that happens is MATLAB checks the condition to see if it is true. 4. So in this case, it checks to see if i > 0. Since 8 > 0, MATLAB starts executing the code in the body of the loop. The body of the loop in this case contains two statement: my_mat[i] and i = i – 1 meaning that the variable i is decremented, and after the first time through the loop, the value of i will be 7. 5. When the end of the while loop body is reached, MATLAB will go back up to the top of the while loop and check the condition statement. If the condition is still true, the body will execute again. 6. So at iteration 2, MATLAB checks to see if i > 0. i is equal to 7, and since 7 > 0, the loop body executes again. Iteration Number 1 2 3 4 5 6 7 8 Starting i value 8 7 6 my_mat[i] Condition Value Ending i Value 15 13 True True 7 6 7. QUESTION #1 In Notepad++, fill in the table, by separate values with TAB character. So for iterations 1 and 2, you would type 1 8 15 True 7 2 7 13 True 6 8. QUESTION #2 At the completion of the loop, what is the value of i? 9. You don’t have to write this part in Notepad++, but can you guess what the loop is doing without looking at the explanation below? 10. Why is that useful you might ask? Imagine a scenario where you need to go through a list from the end instead of from the start. For example, a list of names is listed in alphabetical order. I would waste a lot of time if the name that I want to find starts with a W like William. Therefore searching from the end of the list will drastically save a lot of time. 11. Suppose now I want to go through the list from the beginning… 12. QUESTION #3 What do you think you need to change in the loop now? Go ahead and modify the code in the script so that my_mat reads from the beginning. 13. So now what if we write a new buggy loop where we want to simply print out the numbers from 1 to 50. Add the following lines of code to your script, and just execute the selected lines by highlighting them, right-clicking and selecting Evaluate Selection. 14. This is appropriately called an infinite loop, because you guessed it, the loop body continues to execute forever (infinitely). Press Ctrl and C together to stop the infinite loop. 15. QUESTION #4 Modify the loop condition so that the loop only prints out the numbers from 1 to 50. Write the new condition down as the answer to this question. PART TWO: Diving AND LOOPS 1. On the course webpage, we have a csv file titled dive.csv. CSV stands for comma separated values and it is a format of data that works really well with MATLAB. Make sure to download the file and store it into your MATLAB folder. We will NOT be using it in the function definition, but we will need it later to test out our function 2. Let’s get started by creating a function in MATLAB, called find_winner that takes in a single input parameter called score_data. The function is going to find and return the candidate number of the person who has the highest score. 3. score_data has two columns. The first column is going to contain the candidate number for each athlete, and the second column is going to contain their dive scores. 4. Our function header is going to have the following structure function [index , candidate_num ] = find_winner(score_data) 5. Recall that the orange part represents the output arguments, the purple represents the function name and the green represents the input argument 6. So what goes in the function body? Well we are going to use a while loop to find the index of the maximum score. 7. Tricky tricky. We have a while loop AND condition. Let’s see if we can figure out what the while loop is doing. 8. QUESTION #5 For this assignment, what should i be initialized to? Write it in English, do NOT write the code. 9. Now what is happening with the if statement. The if statement returns true if the score for the current athlete is greater than the maxScore. During the first iteration, maxScore is set to -999, so the condition evaluates to true. Then, inside the if-body, the variable maxScore is reassigned to whatever the first score was, and the variable index is set to 1. 10. This process is repeated until the all rows have been looped over, when maxScore reaches its largest value, the if condition will never evaluate to true again, so the value of index will stay fixed at the value associated with the maxScore. 11. After all rows have been considered, whatever was inside of index should contain the index of the athlete with the highest score. The last line of the function assigns the output variable called candidate_num to the correct index. 12. A bit confused? Imagine a simpler case, where you have a matrix that looks like: 1 2 3 100 1 1 13. The first time through the loop, maxScore will get set to 100 (remember scores are in the second column shown in brown), and after that, the if condition will never evaluate to true again. PART THREE: TESTING OUR FUNCTION AND REUSE 1. So how do we test it? Just like all the other functions we’ve written in this class, we have to call it to get it to work. 2. Our function expects a single input that it calls score_data. You should have already downloaded the dive data from the class website. Make sure to put it in the MATLAB folder. In order to use it, we have to load it into MATLAB. Fortunately MATLAB has a simple command called load that allows us to load the data. 3. QUESTION #6 What is the candidate number of the gold medalist? 4. Cool, we wrote a useful function using a while loop. But what if we wanted to find the silver and bronze medalist. Another really GREAT idea in programming is to reuse functions that we’ve already written. Our function returns the best performer of the dataset AND the index. Can you think of a way to reuse the function to get the second best performer, the silver medalist. 5. Well, here’s the cool part. If we just remove the gold medalist from the dataset, we can simply call our same function again to get the silver medalist (because the silver medalist will now be the best performer in the new dataset). Give it a try: 6. QUESTION #7 Who won the silver medalist for the diving event? Using the same procedure as above but by cutting out the silver and gold medalist, can you use our function to find the bronze medalist and candidate number? Write the code you’d use in this part. PART FOUR: SAVING and SUBMITTING 1. SUBMIT *THREE* THINGS: Save your Notepad++ H6_LastName.txt file. If you worked with a partner, you must both have the file. Save a copy of your whiles.m file, and your find_winner.m function file into your cs7wxx directory. You are welcome to stay and work on the assignment portion with your partner.