Homework #5: Simple Loops and Ifs

Homework #5: Simple Loops and Ifs
CSE 7, Winter 2015
Before beginning this homework, create a new Notepad++, H5_LastName.txt, file in your cs7wXX
home directory. If you are completing Homework#5 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 "H5_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: SIMPLE FUNCTIONS AND LOOPS
1. Let’s do some work with for-loops. For-loops are a form of iteration that allow you to perform
the same instructions a fixed number of times. The instructions that get performed are those in
the loop-body. In MATLAB, the loop body is the part that is (often) indented and between the
keywords for and end.
2. For example, enter the following code into the command prompt:
k=1;
for i = 1:20
k = k * i %this is the loop body
end
3. The above code will multiply up the numbers 1 through 20 and store it in a variable k. During
each iteration the variable k is being updated so that its new value is equal to its old value
multiply i.
k = k*i %NOTICE THERE IS NO SEMICOLON HERE
It follows the following pattern: new_k_value = old_k_value * i
4. Notice that we don’t put a semicolon at the end of the line in the loop body. This is NOT normal
and is only for demonstration purposes. Usually, you DO NOT want to print meaningless
information out during every iteration of the loop. QUESTION #1. Why might you not want to
print our information in a loop body? HINT: Think about loops that go from 1 to 1000 or 1
million.
5. Let’s go ahead and turn this into a more general function. Create new function called
multiply_up_numbers, and have it take in two parameters, finish and start which should both
be integers.
6. Your function should output a single value which is the total number you get when you multiply
up the integers between finish and start.
7. For example, if I passed in 5 and 1 in to my function. I want my function to return 120 since 1 *
2 * 3 * 4 * 5 = 120
8. Add comments explaining how your function works and what all the input parameters mean
9. QUESTION #2. Call your function so that it calculates the product of all the integers between 1
and 100. Write the answer as well as the function call.
PART TWO: FUNCTIONS, LOOPS AND SEARCHING FOR VALUES AND LOOPS
1. Now let’s write a function that loops over all the rows in a matrix and checks to see if the value
in the first column is equal to some specified value.
2. Why might we do this? Let’s say we have a matrix with two columns. The first contains a list of
students’ Gradesource secret number, the second contains their score on the first exam and the
third column contains their score on the second exam. Suppose, I only want the scores for
student with ID 1234.
3. Then I should be able to call my function (let’s call it find_score) with the parameters 1234 and
the matrix of scores as the input and the function should return their first and second exam
scores.
4. Here’s the start of the function header. Go ahead and fill in the missing parameters with names
of your choosing.
function [score1, score2] = find_score(studentid , score_mat)
5. Before implementing the function (writing the function body), let’s consider some test cases.
This is common practice in software engineering, and thinking about the tests before writing the
function allows us to really understand the function’s behavior.
6. First we have to make up a small list of test scores
score_mat = [1252, 80, 74; 1234, 86, 49 ; 2347, 72, 71 ; 3450, 98, 64 ; 4569, 90, 77];
7. QUESTION #3. What should our function return if we call it with the following parameters:
(1234, score_mat)
(4569, score_mat)
8. QUESTION #4. What do you think our function should return if we call it with (5678,
score_mat)? Should we return a result if the specified student didn’t take the test? What should
it be?
9. Now let’s go ahead and implement the function. Start by creating a simple for-loop outline that
starts at 1 and goes until the number of rows of the second input parameter.
function header
for index = 1: <HOW MANY TIMES DO WE LOOP?>
%INSERT BODY HERE
end
end
10. QUESTION #5. What is the built-in matlab function that gives us the number of rows in a
matrix? HINT: It’s NOT length. If you are unsure type in help size for help.
11. Now in the function body, we need to use our loop variable which in my example is called
index. Since the loop variable is being increased by one at each iteration of the loop, we can
use it to move through each row of our score matrix and check if the value in the first column is
equal to student ID we’re looking for.
Score Mat. First Time through the Loop. index = 1
(index,1)
COLUMN 1 (ID)
1252
1234
2347
3450
4569
COLUMN 2 (SCORE 1)
80
86
72
98
90
COLUMN 3 (SCORE 2)
74
49
71
64
77
Score Mat. Third Time through the loop. index = 3
COLUMN 1 (ID)
1252
1234
2347
3450
4569
COLUMN 2 (SCORE 1)
80
86
72
98
90
COLUMN 3 (SCORE 2)
74
49
71
64
77
(index,3)
12. QUESTION #6. What is the equality comparison operator in MATLAB?
13. Using an if statement, check to see if the value at (index, 1) is equal to the student ID we’re
looking for.
14. If it is, return score1 and score2. In other words, if the student ID matches row 1, you should
return score1 = 80, score2 = 74.
PART THREE: APPENDING TO A MATRIX
1. For next week’s lab we are going to need to know how to build an matrix up by iterating through
a loop, so let’s go ahead and learn that now. We don’t need to write a function for this, so go
ahead and put the following commands into a script called build_mat.m.
2. Building a matrix implies adding either a new row or a new column to it.
3. Let’s start with the matrix my_mat = [1, 2, 3; 2:4];
4. QUESTION #7. What are the dimensions of my_mat?
5. Now let’s add 10 new rows to my_mat using a for loop that follows the pattern we have created
before. Each new row must have the same number of columns as the original my_mat matrix.
Type the following lines of code into your script.
for i = 3:13
my_mat(i,:) = [i, i+1, i+2]
end
6. Notice that each time through the loop, we are growing the my_mat matrix (there are ways to
improve Matlab’s performance with this later, but for now this works just fine).
7. The right hand side of the assignment creates a 1x3 vector that gets appended to the bottom of
our my_mat matrix.
8. Your Turn. Clear your workspace and comment out the above loop.
9. Create a loop in your script that works just like the above loop ONLY this time it appends a new
column to the my_mat matrix. Change the loop so that it adds 20 new columns.
10. QUESTION #8. What does your final output look like? Copy and paste your loop body into
your Notepad++ report AND save your m file.
PART FOUR: SAVING and SUBMITTING
1. SUBMIT *FOUR* THINGS: Save your Notepad++ file. If you worked with a partner, you must
both have the file. Save a copy of your build_mat.m file, your multiply_up_numbers.m and
find_score.m file into your cs7wXX directory. You are welcome to stay and work on the
assignment portion with your partner.
HOMEWORK #5

The Homework#5 assignment is due next week in YOUR lab section at the BEGINNING of
Lab.


You will be graded individually.
You will need to show the Tutor/TA that you are able to use the MATLAB commands from
the homework assignment. He/She will ask questions to determine how knowledgeable you
are.

You may work with a partner or individually for the homework assignment.

You should have one file named “Hw5_LastName”, saved in your cs7wXX home directory.
(See Homework # 1 details)

Note: If partner programming, name your file: “Hw5_Partner1LastName_Partner2LastName:
Make sure each of you has a copy of this file in your home directory to access for individual
grading in next week’s lab.
See “sftp” (Secure File Transfer Protocol) steps in Homework#1.

You are free to go, or you are welcome to stay and work on the assignment (posted on the
website) portion in the remainder of your enrolled lab section.