Unidade 6:   Comparando Funções

imageUnidade 6Comparando Funções
Unit Overview

Os alunos descobrem tipos Booleanos, e os usam para criar programas que testam valores, e então modelam o cenário usando esses programas.

Product Outcomes:
  • Estudantes detectam quando elementos do jogo movem-se para fora da tela (então podem reaparecer no outro lado da tela)

Standards and Evidence Statements:

Standards with prefix BS are specific to Bootstrap; others are from the Common Core. Mouse over each standard to see its corresponding evidence statements. Our Standards Document shows which units cover each standard.

  • 7.EE.3-4: The student uses numerical and algebraic expressions and equations to solve real-life and mathematical problems

    • use of positive and negative rational numbers in any form (whole numbers, fractions, and decimals) to solve multi-step real-life and mathematical problems

    • estimation of answers using mental computation to assess the reasonableness of solutions

    • use of variables to represent quantities in a real-world or mathematical problem

    • construction of simple equations and inequalities to solve problems by reasoning about the quantities

    • interpretation in context of solutions of word problems leading to inequalities

  • 8.F.1-3: The student defines, evaluates, and compares functions

    • description of a function as a rule that assigns to each input exactly one output

  • A-CED.1-4: The student solves equations and inequalities in one or more variable that describe numbers or relationships

    • creation of equations and inequalities in one variable, including linear and quadratic functions, and simple radical and exponential functions

  • A-SSE.1-2: O aluno interpreta a estrutura de expressões para resolver problemas no contexto

    • manipulation of the structure of an expression, for example, writing x4 _ y4 as a difference of squares

  • F-IF.1-3: The student uses function notation to describe, evaluate, and interpret functions in terms of domain and range

    • description of a function using terms domain and range

  • F-IF.4-6: The student interprets the behavior of functions that arise in applications in terms of the context

    • interpretation of a relationship between two quantities in a table or graph in terms of key features

    • relation of the domain of a function to its graph and, where applicable, to the quantitative relationship it describes

  • BS-DR.2: The student can derive test cases for a given contract and purpose statement

    • given a Contract and a Purpose Statement, write multiple examples or test cases

    • given multiple examples, identify patterns in order to label and name the variables

  • BS-DR.3: Given mutiple test cases, the student can define a function

    • given examples and labeled variable(s), define the function

  • BS-IDE: The student is familiar with using a REPL, entering expressions properly, and interpreting error messages

    • enter and evaluate expressions on the computer

  • BS-PL.1: The student is familiar with declaring values and applying built-in functions using the programming language

    • representing (numeric, string, boolean, or image) values in the programming language

  • BS-PL.2: The student is comfortable using and writing Contracts for built-in functions

    • representing a function’s input and output using a contract

    • using a function by refering to its contract

Length: 90 minutes
Glossary:
  • assinatura: uma declaração com o nome, domínio, e imagem de uma função

  • booleano: um tipo de dado com dois valores: verdadeiro/true ou falso/false

  • retornam

  • string: qualquer sequência de caracteres entre aspas (exemplos:"olá", "42", "isto é uma string!")

Materials:
  • Caneta/lápis para os alunos, giz fresquinho para professores

  • Class poster (List of rules, language table, course calendar)

  • Language Table (see below)

  • Pens/pencils for the students, fresh whiteboard markers for teachers

  • Student workbook

Preparation:

Types

Functions

Numero

+ - * / sq sqrt expt

String

string-append string-length

Figura

rectangle circle triangle ellipse star text scale rotate put-image


Revisão

Overview

Learning Objectives

    Evidence Statements

      Product Outcomes

        Materials

        • Caneta/lápis para os alunos, giz fresquinho para professores

        • Class poster (List of rules, language table, course calendar)

        • Language Table (see below)

        Preparation

        Revisão (Time 15 minutos)

        • Quais tipos de dados você viu até agora? Você pode pensar em valores do tipo Número? Do tipo String? Do tipo Figura? Quais são algumas expressões que produzem um Número? E quanto aos outros tipos de dados?

          Antes de apresentar um novo tipo dado (Booleano), esta pode ser uma boa hora para revisar rapidamente os três principais cenários onde vocês aprenderam a trabalhar com expressões: Círculos de Avaliação, Assinatura e Receita de Projeto. Nesta lição, alunos irão aplicar cada um destes cenários aos Booleanos, descobrindo que tudo que já aprenderam ainda aplica-se mesmo em um novo tipo.

        Booleanos

        Overview

        Students are introduced to a new type (Boolean), and practice using it with Circles of Evaluation, Contracts and Code.

        Learning Objectives

        • Students learn about Boolean values and functions that manipulate them

        Evidence Statements

        • Students will know the two Boolean values (true and false)

        • Students will write Circles of Evaluation for Boolean-producing functions

        • Students learn how to use arithmetic operators (like < and >) that produce Booleans

        Product Outcomes

          Materials

          • Pens/pencils for the students, fresh whiteboard markers for teachers

          • Class poster (List of rules, language table, course calendar)

          • Language Table (see below)

          Preparation

            Booleanos (Time 10 minutos)

            • O que cada uma das seguintes expressões retornam a você? (Se você não tem certeza, você pode digitar e descobrir!)

              • (+ 1 4)

              • (/ 4 2)

              • (circle 10 "solid" "blue")

              • (< 3 4)

            • A última expressão, (< 3 4), usa uma nova função que compara Números, retornando verdadeiro se 3 é menor do que 4. O que você acha que a expressão retornaria se os números forem trocados de lugar?

              A função < testa se o primeiro número é menor que o outro. Você pode pensar em alguns outros testes? Experimente-os na Janela de Iterações.

              Funções como <, > e = sempre recebem dois números em seu Domínio, e produzem um valor especial chamado de Booleano como sua Imagem. Booleanos são respostas para perguntas do tipo sim/não, e funções Booleanas são usadas para realizar testes. Em um videogame, você pode testar se um jogador tem caminhado sobre uma parede, ou se sua vida é igual à zero. Uma máquina em um consultório médico pode usar Booleanos para testar se a frequência cardíaca de um paciente está acima ou abaixo de determinado nível.

              Tente digitar um Número na Janela de Iterações e aperte Enter. O que você espera receber de volta? E quanto a uma String? Agora tente um Booleano, como false. Assim como todos estes valores, Booleanos retornam eles mesmos. Círculos de Avaliação podem serem usados com Booleanos: tente converter cada uma das expressões em Círculo de Avaliação, e então converta os Círculos em código:

              Dê aos alunos muita prática aqui! Você pode ver um video de demonstração de Introdução em Video Aula: Intro to Booleans/Introdução a Booleanos

            • Existem muitas outras funções que produzem Booleanos. Aqui está uma que pode ser usada para comparar duas Strings:  

              Certifique-se de escrever a Assinatura completa destas quatro funções Booleanas.

              Certifique-se de que os alunos estão confortáveis usando Booleanos para comparar subexpressões mais complexas, em vez de apenas comparar dois Números.

            esta-na-tela? 1.0

            Overview

            Alunos usam a Receita de Projeto para escrever uma simples função que produz Booleanos

            Learning Objectives

            • Students use Booleans to determine whether a game element is partly visible onscreen

            • Students write functions that use other functions they have written to compute answers

            Evidence Statements

            • Students can write functions that consume a single-axis coordinate and determine whether it is within the boundary of a fixed screen size

            • Students can use one function they have written to compute the answer for another function

            Product Outcomes

              Materials

              • Pens/pencils for the students, fresh whiteboard markers for teachers

              • Student workbook

              • Class poster (List of rules, language table, course calendar)

              • Language Table (see below)

              Preparation

              esta-na-tela? 1.0 (Time 25 minutos)

              • Abra o programa "Gaiola"(Gaiola.rkt de source-files.zip ou no WeScheme) em seu computador, e clique "Run". A tela que aparece contém uma borboleta, que você pode mover usando as setas do seu teclado. O nome da borboleta é Sam, e a tela em que ela está é seu quintal. Assim como a tela de um videogame, este quintal tem 640 pixels de largura e 480 de altura! Como você pode ver, Sam é livre para andar livre pelo quintal, e suas coordenadas aparecem no topo da tela nos dizem sua localização.

                Esta pode ser uma boa oportunidade para rever coordenadas, para estudantes que precisam praticar.

              • imageA mãe de Sam disse que ela pode sair do quintal, mas por uma curta distância! Especificamente, ela quer ter certeza de que sempre pode vê-la, ao menos uma parte dela. Sam está segura desde que alguma parte dela esteja na tela. Isso significa que ela pode ir um pouco além do zero pela esquerda, ou passar um pouco de 640 pela direita - mas quão longe ela pode ir?

                Vá para Page 17, e leia a metado superior da página. Usando as setas de direção, veja quanto Sam pode ir para a esquerda ainda aparecendo na tela. Você encontrará que Sam está na tela enquanto sua coordenada-x for maior que -50, que é exatamente o código que está preenchido no primeiro problema da página.

                • Descubra o quão longe Sam pode ir pela direita ainda aparecendo na tela.

                • Preencha o código do segundo problema.

                • Converta as duas expressões em Círculos de Avaliação, usando os círculos vazios na parte de baixo da página.

                Preste muita atenção nos casos de canto: Sam aparece na tela em 690? E em 680?

              • Infelizmente, até agora não existe nada que impeça que Sam saia do quintal! Olhando para o código encontramos três definições de funções:

                • esquerda-salvo?, que recebe a coordenada-x de Sam e verifica se Sam está segura do lado esquerdo da tela. Neste momento a função sempre retornará true.

                • direita-salvo?, recebe a coordenada-x de Sam e verifica se Sam está segura do lado direito da tela. Neste momento a função sempre retornará true.

                • esta-na-tela?, recebe a coordenada-x de Sam e verifica se pelo menos uma parte dela está visível na tela. Neste momento, essa função somente pergunta para esquerda-salvo? se a coordenada-x recebida é segura.

                Até agora, todas as três funções retornam true não importando qual seja a coordenada-x de Sam!

                É de grande importância neste momento que três alunos voluntários representem e demonstrem como elas funcionam:

                • Peça a cada aluno para dizer o Nome, Domínio e Imagem. Se eles se embaraçarem, relembre eles todas as informações escritas na Assinatura!

                • Pratique chamando cada função, dizendo seu nome e em seguida dando-lhes uma coordenada-x. Por Exemplo, "esquerda-salvo? vinte" significa que o número 20 está sendo passado para esquerda-salvo?. Que o aluno deve retornar "true", pois o código está retornando atualmente true para todos os valores de x.

                • Faça isso para as três funções, e tenha a prática de chama-las com valores diferentes.

                • Nota: no exemplo de esta-na-tela? deve primero chamar esquerda-salvo?, antes de responder com o valor.

              • Neste momento esquerda-salvo? está ignorando a coordenada-x de Sam, e retornando true cegamente não importando onde ela esteja. O que a função deveria fazer ao invés disso?

                Vá para Page 18 em sua apostila. Use a Receita de Projeto para corrigir esta função, de modo a função esquerda-salvo receba a coordenada-x de Sam e retorne true ou false dependendo se ela for maior que -50.

                Depois de ter digitado Exemplos e a definição para esquerda-salvo?, clique em "Run" e veja se Sam está impedida de voar para fora do lado esquerdo da tela. Certifique-se de testar sua função na Janela de iterações, por exemplo:  

                Lembre os alunos que eles já escreveram o teste para isso na página 19!

                Peça aos três voluntários de antes que, representem o código de esquerda-salvo? para ver se está escrito corretamente. Como antes, assugure-se que os alunos pratiquem chamando cada função individualmente: agora esquerda-salvo? será capaz de retornar true ou false, (como será esta-na-tela?), enquanto direita-salvo? ainda retorna apenas true.

              • Vá para Page 19 em sua apostila. Use a Receita de Projeto para corrigir esta função, para que direita-salvo? receba a coodernada-x de Sam e retorne true ou false dependendo se o valor for menor que 690.

                Depois de passear por direita-salvo? seção por seção, os alunos devem ser capazes de completar esta atividade por conta própria. Se eles estão se dando bem com a programação, você pode discutir se comparar a coordenada-x com 690 ou com (+ 640 50); ambos produzem o mesmo resultado, mas o segundo revela ce onde o 690 vem(comprimento da tela mais 50).

              • Depois de ter digitado Exemplos e a definição para direita-salvo?, clique "Run" e veja se Sam está impedida de voar para fora do lado direito. Você pode se surpreender com o que acontece! Tese sua função na Janela de Iterações:   A direita-salvo? está funcionado como esperado? E esta-na-tela? está funcionando como esperado? A função esta-na-tela está apenas perguntando para esquerda-salvo?, isso significa que Sam está protegida apenas do lado esquerdo da tela.

                Altere o código de esta-na-tela? para que ela chame direita-salvo? ao invés de (esquerda-salvo?). Agora Sam será protegida do lado direito da tela, mas não do esquerdo. O que esta-na-tela deve fazer?

                Chame os três voluntários novamente, e repita a atividade. Agora direita-salvo? e esquerda-salvo? comportam-se corretamente, mas esta-na-tela? ainda está perguntando somente para esquerda-salvo!

              and/or e/ou

              Overview

              Estudantes são apresentados a e/ou, duas funções que consomem Booleanos

              Learning Objectives

              • Alunos aprendem a combinar valores Booleanos com and e or

              Evidence Statements

              • Alunos entendem quando usar and ou or

              • Alunos escrevem Círculos de Avaliação para expressões que usam and e or

              • Alunos podem escrever expressões que usam and e or

              • Alunos podem definir as respostas produzidas por expressões que usam and e or

              Product Outcomes

                Materials

                • Pens/pencils for the students, fresh whiteboard markers for teachers

                • Class poster (List of rules, language table, course calendar)

                • Language Table (see below)

                Preparation

                  and/or e/ou (Time 10 minutos)

                  • Você já aprendeu algumas funções que permitem que você crie Booleanos. As funções < e >, por exemplo, retornam um booleano cada um quando aplicadas com a entrada adequada. O que acontece quando você quiser combinar esses testes, para ver se mais de um coisa é verdade?

                    Considere as seguintes afirmações - elas são verdadeiras ou falsas?:

                    • Açucar é doce

                    • Gelo é quente

                    • Açucar é doce e Gelo é frio

                    • Açucar é doce e Gelo é quente

                    • Açucar é doce ou Gelo é frio

                    • Açucar é doce ou Gelo é quente

                    Desafiar os alunos em suas respostas aqui - pedir-lhes para explicar porque escolheram "verdadeiro" ou "falso" para as afirmações, especialmente se a estrutura for composta de uma mistura de verdadeiro e falso.

                  • and e or são duas novas funções.  

                    Complete a Page 20 em sua apostila.

                  esta-na-tela? 2.0

                  Overview

                  Os alunos usam a Receita de Projeto ao lado de seu novo conhecimento de and/or, para escrever a função que realiza dois testes booleanos.

                  Learning Objectives

                  • Alunos serão capazes de compor resultados de funções Booleanas usando and e or

                  • Alunos entenderão como Booleanos e funções Booleanas são usadas para controlar o comportamento de elementos do jogo

                  • Alunos vão começar a apreciar do porque de programas serem compostos de várias funções menores

                  Evidence Statements

                  • Students will be able to write functions that combine screen-boundary tests using and and or

                  • Students will understand why and is necessary to check for two boundaries

                  • Students will be able to explain why re-using existing functions is better than reproducing their computations

                  • Students will understand how they use Booleans and conditional to control how game elements behave at the screen boundaries

                  Product Outcomes

                  • Estudantes detectam quando elementos do jogo movem-se para fora da tela (então podem reaparecer no outro lado da tela)

                  Materials

                  • Pens/pencils for the students, fresh whiteboard markers for teachers

                  • Student workbook

                  • Class poster (List of rules, language table, course calendar)

                  • Language Table (see below)

                  Preparation

                    esta-na-tela? 2.0 (Time 25 minutos)

                    • Agora que você já sabe como combinar testes, como esta-na-tela? pode combinar ambos os testes para manter Sam na tela?

                      Vá para Page 21 em sua apostila e escreva a função completa de esta-na-tela?, para que ela teste ambos esquerda-salvo? e direita-salvo?. Digite os Exemplos e a definição, e quando estiver feito, clique em "Run", e veja se Sam está protegida dos dois lados!

                      Chame os voluntários novamente, e peça para a classe o que esta-na-tela? deve fazer. Devemos usar and ou or? Certifique-se de dar exemplos específicos de pontos que estejam na tela, pontos além da esquerda e pontos além da direita, e desafie os alunos a justificarem suas respostas.

                    • Existem duas maneiras de resolver a questão de esta-na-tela?:   e...   Tem diferença entre usar uma das duas?

                    • Há mais em ser um escritor do que apenas ter uma boa ortografia e gramática. Há muito mais em ser um arquiteto ou um artista do que apenas construir uma ponte ou pintar uma tela. Todas essas atividades envolvem um elemento de design. Da mesma forma, há mais em ser um programador do que apenas escrever código. Você se tornou bom em escreve código, e agora você é capaz de escrever programas sofisticados que incluem várias funções - parabéns! Mas isso também significa que você está pronto para considerar o que significa projetar o código que você escreve.

                    • Suponha que você acabou de construir um carro, mas ele não está funcionando direito. O que deve ser feito? O ideal, você gostaria de testar cada parte do carro(o motor, transmissão, etc) uma de cada vez, para ver qual está quebrada. O mesmo vale para o código! Se você tem um erro, é mais fácil de encontrar quando cada função é simples e fácil de testar, e as únicas funções complexas serão construídas a partir das funções simples. Neste exemplo, você pode testar a esquerda-salvo? e direita-salvo? de forma independente, antes de colocar elas para trabalharem juntas na esta-na-tela?.

                    • Outra razão de definir várias funções simples, é o fato de que permitem o programador ser preguiçoso. Suponha que você tem alguns personagens em um videogame, todos precisam ser mantidos na tela. Alguns podem precisar apenas de esquerda-salvo?, outros apenas de direita-salvo?, e alguns poucos podem precisar de esta-na-tela?. O que acontece se o jogo precisa ser executado em computadores com monitores de diferentes tamanhos, onde o limite da tela é 1000 ao invés de 690? Se você tem funções simples e complexas espalhadas pelo código, terá que mudar todas elas. Se sua função complexa apenas usa as funções simples, você só precisará mudá-los em um só lugar!

                    • Programas mau projetados podem funcionar bem, mas são difíceis de ler, difícil de testar, e estragam fácil se as coisas mudam. A medida que você crescer e se desenvolver como programador, você precisará pensar além de "fazer o código funcionar". Não é bom o suficiente se apenas funciona - como os artistas, devemos nos atentar se o código é bem projetado também. Isso é o que as funções nos permitem fazer! Todos desde programadores a matemáticos usam funções para dividir problemas complexos em partes mais simples, o que torna possível projetar soluções elegantes para problemas difíceis.

                      Você pode listar três outros motivos para ter várias funções simples, ao invés de ter uma única função complexa?

                    • O cídgo de detecção de limites que você escreveu (através de esquerda-salvo? e direita-salvo?) é muito usado em videogames. Ele pode ser usado para parar um personagem que iria atravessar uma parede, ou recolocar um personagem na tela quando ele saísse dos limites.

                      Abra o arquivo do jogo, e role para baixo passando pelas funções update- até ver as definições de esquerda-salvo?, direita-salvo? e esta-na-tela?. Agora todas elas retornam verdadeiro, desde que sua tela de jogo tenha as mesmas dimensões do quintal de Sam(640x480), você pode usar o mesmo código para cada uma das trẽs funções! Certifique-se de incluir Exemplos, para que seu código possa ser testado separadamente.

                    Encerramento

                    Overview

                    Learning Objectives

                      Evidence Statements

                        Product Outcomes

                          Materials

                            Preparation

                              Encerramento (Time 5 minutos)

                              • Você aprendeu como usar Booleanos para delimitar onde os elementos do jogo podem se mover. Na próxima aula, vamos ver como usar Booleanos para movimentar elementos do jogo quando o usuário pressionar teclas de movimento.