(Also available in WeScheme)
Students learn how to define a function so that it behaves differently depending on the input.
Lesson Goals |
Students will be able to:
|
Student-Facing Lesson Goals |
|
Materials |
|
Supplemental Materials |
|
Key Points for the Facilitator |
|
🔗Intro to Piecewise Functions 15 minutes
Overview
Students are introduced to piecewise functions through a kinesthetic activity, and then brainstorm real world applications of piecewise functions.
Decide whether this activity would work better for your class if students stand up and spread out around the classroom or stay in their seats.
Launch
How would you explain a function to someone else? What are some rules that all functions follow?
A function has exactly one output for each input.
We are going to act out a special kind of function.
-
If your birthday is in the summer, make an O with your arms.
-
If your birthday is in the fall, make an X with your arms or body.
-
If your birthday is in the winter, put your hand on your head.
-
If your birthday is in the spring, flap your arms like a chicken.
Debrief how students decided what to do. You might do this while students are still in motion or it might work better with your class to stop the activity before discussing it. Example questions:
-
Ask a student with their hands on their head why they aren’t flapping their arms like a chicken.
-
Ask a student making an O with their arms how they knew what to do.
-
What is the input of the function we just acted out?
-
Student.
-
-
What is the output of the function we just acted out?
-
Action.
-
-
How do we know that you just acted out a function?
-
Since each student ("input") has only one action ("output"), it is still a function.
-
Up until now, all of the functions we have seen can be described by a single rule. In this activity their behavior followed a set of rules for which each input still had exactly one output.
Make a big deal about this, so students recognize how big of a shift this is!
The function we just acted out is called a piecewise function in math, and a conditional in programming. The world is full of piecewise functions and conditionals!
Let’s try acting out another set of rules.
-
Everyone wearing sneakers put your hands on your head.
-
Everyone wearing a T-shirt make a T with your arms.
-
Everyone wearing pants put your hands on your hips.
-
Everyone wearing a T-shirt make an O with your arms.
Some students should have nothing to do. Others should look confused as to what to do. They may be wearing sneakers and pants and not be able to put their hands on their head and on their hips at the same time. They may be wearing a T-shirt and not be able to make a T and an O with their arms simultaneously.
Observe that this set of rules doesn’t seem to have worked quite as well as the last. Debrief how students decided what to do. Example Questions:
-
Ask a student wearing a T-shirt with their arms making an O… "I see that you’re wearing a T-shirt - why aren’t you making a T with your arms?"
-
Ask a student wearing pants and sneakers… "Why don’t you have your hands on your head and your hips?"
-
Ask a student who isn’t doing anything… "Why aren’t you doing anything?"
A function has exactly one output for each input.
-
Why doesn’t this set of directions (above) represent a function?
-
People wearing T-shirts - and wearing sneakers and pants - were told to do two conflicting things.
-
Investigate
Work with you partner to think of examples of piecewise functions.
Here are a few examples to get you started:
-
Places like movie theaters and museums often have different ticket prices for students, children, and senior citizens. That means the total price can’t be determined simply by asking how many tickets there are — the price-per-person is conditioned on what kind of ticket is being purchased!
-
The US Postal Service charges a different rate for differently-sized letters and packages. That means the total price can’t be determined just by asking how many things are being mailed — the price is conditioned on what kind of things are being shipped!
-
Many phone plans include a certain price-per-gigabyte for data, but only up to a maximum cutoff amount. After that, the price-per-gigabyte gets a lot higher. That means we can’t calculate the cost simply by knowing how many gigabytes there are — the cost is conditioned on what the cutoff is!
Synthesize
What examples of piecewise functions did you come up with?
You may also want to discuss whether square root and absolute values are piecewise functions.
Partial Functions
Piecewise functions apply different rules over different "pieces" of their domains. Sometimes those pieces string together to be continuous, but what happens if there’s an "empty piece", for which there is no rule?
For Algebra 2 or pre-calculus teachers, this is a useful time to address partial functions. These are functions which are undefined over parts of their domain (like division, which is undefined when the denominator is zero). These definitions are independent from one another: a function can be piecewise and partial, just piecewise, or just partial. But partiality comes up much more frequently when defining piecewise functions, because students need to think through all the possible inputs.
In the USPS example, the cost to mail tiny cards is undefined because the postal service doesn’t ship packages that are too small.
🔗Conditionals in Programming 20 minutes
Overview
Having acted out a piecewise function, students take the first step towards writing one, by exploring one or two programs that make use of piecewise functions, developing their own understanding, and modifying the programs.
Launch
So far, all of the functions we’ve written had a single rule. For example, the rule for gt
was to take a number and make a solid, green triangle of that size. And the rule for bc
was to take a number and make a solid, blue circle of that size.
What if we want to write functions that apply different rules, based on certain conditions?
Investigate
-
Open the Red Shape Starter File.
-
Complete Red Shape - Explore.
-
Not all piecewise functions are one-to-one! If you’re ready to think about Onto Functions, try Decide & Defend - Piecewise Onto Functions.
If you have more time to devote to piecewise functions, we have additional materials in Additional Resources.
Synthesize
-
What happened when you gave
red-shape
a shape that wasn’t defined in the program?-
The program told us that the shape was unknown. Think about other functions that don’t work when we give them an invalid input, like dividing by zero!
-
-
What is the syntax for writing piecewise functions?
-
Pyret allows us to write if-expressions, which contain:
-
the keyword
if
, followed by a condition. -
a colon (
:
), followed by a rule for what the function should do if the condition istrue
-
an
else:
, followed by a rule for what to do if the condition isfalse
-
We can chain them together to create multiple rules, with the last
else:
being our fallback in case every other condition isfalse
.
-
🔗Extending the Design Recipe 20 minutes
Overview
Students think through how much of the Red Shape program we could have written using the Design Recipe.
Launch
Let’s see how the Design Recipe could help us to write a piecewise function.
Investigate
Turn to Word Problem: red-shape.
-
How do the Contract and Purpose Statement compare to other Contracts we’ve seen?
-
The Contract and Purpose Statements don’t change: we still write down the name, Domain and Range of our function, and we still write down all the information we need in our Purpose Statement (of course, now we have more important information to write - like our condition(s)!).
-
Pedagogy Note
Up until now, there’s been a pattern that students may not have noticed: the number of things in the Domain of a function was always equal to the number of labels in the example step, which was always equal to the number of variables in the definition. Make sure you explicitly draw students' attention to this here, and point out that this pattern no longer holds when it comes to piecewise functions. When it doesn’t hold, that’s how we know we need a piecewise function!
-
How are the examples similar to other examples we’ve seen?
-
The examples are also pretty similar: we write the name of the function, followed by some example inputs, and then we write what the function produces with those inputs.
-
-
How are these examples different from other examples we’ve seen?
-
Instead of every example being the same, each one is different.
-
Circle and label everything that is changeable.
-
What changes? What did you label?
-
In this case, there are more things to circle-and-label in the examples than there are things in our Domain.
-
If there are more unique labels in the examples than there are things in the Domain, we’re probably looking at a piecewise function. And if the examples cannot be explained by a single pattern or rule, it’s definitely a piecewise function!
Think back to our examples of piecewise functions (ticket sales, postage, cell-phone data plans, etc)… knowing the input isn’t enough - we also need to know the conditions, and all the possible patterns!
Once we know that we’re dealing with multiple patterns, we’re ready to define them as a piecewise function!
In this example, we have four patterns:
-
sometimes we produce
circle(20, "solid", "red")
-
sometimes we produce
triangle(20, "solid", "red")
-
sometimes we produce
rectangle(20, 20, "solid", "red")
-
sometimes we produce
star(20, "solid", "red")
-
sometimes we produce
text("Unknown shape name!", 20, "red")
To define a piecewise function, each condition has both a result ("what should we do") and a question ("when should we do it?").
-
When should we make circles?
-
When
shape == "circle"
-
-
When should we make triangles?
-
When
shape == "triangle"
-
-
When should we make rectangles?
-
When
shape == "rectangle"
-
-
When should we make stars?
-
When
shape == "star"
-
-
When should we draw the "Unknown shape name" text?
-
When
shape
is….anythingelse
-
Adding the questions to our pattern gives us:
-
When
shape == "circle"
…we producecircle(20, "solid", "red")
-
When
shape == "triangle"
…we producetriangle(20, "solid", "red")
-
When
shape == "rectangle"
…we producerectangle(20, 20, "solid", "red")
-
When
shape == "star"
…we producestar(20, "solid", "red")
-
When
shape
is anythingelse
…we producetext("Unknown shape name!", 20, "red")
This practically gives away the body of our function definition!
fun red-shape(shape):
if shape == "circle": circle(20, "solid", "red")
else if shape == "triangle": triangle(20, "solid", "red")
else if shape == "rectangle": rectangle(20, 20, "solid", "red")
else if shape == "star": star(20, "solid", "red")
else: text("Unknown shape name!", 20, "red")
end
end
-
If you have more time for working with Piecewise Functions, you may want to have students create a visual representation of how the computer moves through a conditional function.
-
We also have another starter file and Design Recipe that use emojis with piecewise functions:
-
Mood Generator Starter File
Note: Although emojis look like images, they are actually characters in a string!
More than one Way to Define Piecewise Functions!
There are several conditional expressions in Pyret. For those who are curious, check out this Alternate Version of the Mood Generator Starter File, which makes use of ask
instead of if
. Pyret’s ask
construct is similar to the switch
or case
statements in other languages.
Writing a second Red Shape program using ask
could be a good extension for some students!
Synthesize
-
How many examples are needed to fully test a piecewise function with four "pieces"?
-
More than two! In fact, we need an example for every option - every "piece"! (And in some cases there is a "default"
else
orotherwise
option, which we should write an example to test, too!)
-
-
What changes in a piecewise function?
-
The input, and also the rule the function applies to the input.
-
🔗Additional Exercises:
We have one more program for your students to explore and scaffolded pages to support them through the process!
These materials were developed partly through support of the National Science Foundation, (awards 1042210, 1535276, 1648684, 1738598, 2031479, and 1501927). Bootstrap by the Bootstrap Community is licensed under a Creative Commons 4.0 Unported License. This license does not grant permission to run training or professional development. Offering training or professional development with materials substantially derived from Bootstrap must be approved in writing by a Bootstrap Director. Permissions beyond the scope of this license, such as to run training, may be available by contacting contact@BootstrapWorld.org.