Programação por blocos
Já programaste em blocos no 5.º e no 6.º ano. Agora vais rever a ideia e ganhar rigor, porque é com ela que, no apartado seguinte, vais criar aplicações para o telemóvel. Um programa por blocos constrói-se encaixando peças, como num puzzle: não escreves código, mas dizes ao computador exatamente o que fazer, em que ordem, quando repetir e quando decidir. No fim, vais perceber porque é que um jogo pode dar 20 pontos por uma só moeda.
As três estruturas básicas
Explica por palavras tuas o que fazem as três estruturas básicas de um programa — sequência, ciclo e condição — e dá um exemplo do dia a dia de cada uma que não esteja…
Explica por palavras tuas o que fazem as três estruturas básicas de um programa — sequência, ciclo e condição — e dá um exemplo do dia a dia de cada uma que não esteja relacionado com computadores.
Um programa tem estes blocos soltos: «dizer Adeus!», «ao clicar na bandeira», «esperar um momento», «dizer Olá!». Ordena-os na sequência correta e descreve o que…
Um programa tem estes blocos soltos: «dizer Adeus!», «ao clicar na bandeira», «esperar um momento», «dizer Olá!». Ordena-os na sequência correta e descreve o que acontecerá exatamente ao executar o programa.
Estes blocos de aparência estão soltos: «mudar para o traje de pirata», «dizer Olá, chamo-me Marco! durante 2 segundos», «ao clicar na bandeira», «esperar 1 segundo».…
Estes blocos de aparência estão soltos: «mudar para o traje de pirata», «dizer Olá, chamo-me Marco! durante 2 segundos», «ao clicar na bandeira», «esperar 1 segundo». Ordena-os para apresentar um ator que primeiro saúda e depois se disfarça, e descreve o que o utilizador verá.
Um programa tem esta sucessão de blocos: «ao clicar na bandeira», «dizer 3», «esperar um momento», «dizer 2», «esperar um momento», «dizer 1», «dizer Já!». Descreve com…
Um programa tem esta sucessão de blocos: «ao clicar na bandeira», «dizer 3», «esperar um momento», «dizer 2», «esperar um momento», «dizer 1», «dizer Já!». Descreve com detalhe o que o utilizador verá e ouvirá desde que clica na bandeira até ao final, e explica que utilidade têm as esperas.
Eventos, movimento e o palco
Um projeto pode ter vários conjuntos, cada um com o seu evento, a funcionar ao mesmo tempo e de forma independente.
O palco é um referencial cartesiano: o centro é $(0, 0)$, o $x$ dá a posição horizontal e o $y$ a vertical.
Os blocos de eventos determinam quando começa a funcionar um conjunto de blocos. Explica o que faz iniciar cada um destes três eventos: «ao clicar na bandeira», «ao…
Os blocos de eventos determinam quando começa a funcionar um conjunto de blocos. Explica o que faz iniciar cada um destes três eventos: «ao clicar na bandeira», «ao premir a tecla espaço» e «ao clicar na personagem», e descreve o que aconteceria se um projeto tivesse dois conjuntos diferentes com dois eventos distintos.
O programa da figura, formado por blocos encaixados, deveria fazer com que um ator percorra o quadrado tracejado e avise ao terminar, mas dentro do ciclo falta um bloco.…
O programa da figura, formado por blocos encaixados, deveria fazer com que um ator percorra o quadrado tracejado e avise ao terminar, mas dentro do ciclo falta um bloco.
Indica que bloco falta dentro do ciclo para que o ator complete o percurso do quadrado e explica o que faz cada parte do programa.
Num jogo, um gato corre pelo palco e um cão persegue-o. Explica onde colocarias o bloco «tocar o som miau» para que toque exatamente quando o cão alcança o gato, que…
Num jogo, um gato corre pelo palco e um cão persegue-o. Explica onde colocarias o bloco «tocar o som miau» para que toque exatamente quando o cão alcança o gato, que bloco de verificação o acompanha e o que aconteceria se o som estivesse fora dessa verificação.
O palco de um programa por blocos funciona como um referencial cartesiano: o «x» indica a posição horizontal e o «y» a vertical, e o centro é o ponto $(0, 0)$. Explica…
O palco de um programa por blocos funciona como um referencial cartesiano: o «x» indica a posição horizontal e o «y» a vertical, e o centro é o ponto $(0, 0)$. Explica onde aparecerá o ator com o bloco «vai para x: 0, y: 0» e para onde se moverá se o «x» aumentar ou se o «y» diminuir.
Variáveis e ciclos controlados
Um programa pretende contar de um a dez com estes blocos: «repetir 10 vezes: dizer o número; somar 1 ao número». Ao ser executado, a contagem não começa em um e, cada…
Um programa pretende contar de um a dez com estes blocos: «repetir 10 vezes: dizer o número; somar 1 ao número». Ao ser executado, a contagem não começa em um e, cada vez que é executado de novo, começa num número diferente. Explica que bloco falta e onde deveria ser colocado, e em que posição da sequência se deve definir o valor inicial do número.
A figura mostra um programa com uma variável chamada «pontos» que controla um ciclo. Faz o rastreio do programa: indica quantas vezes o ciclo é executado e quantos…
A figura mostra um programa com uma variável chamada «pontos» que controla um ciclo.
Faz o rastreio do programa: indica quantas vezes o ciclo é executado e quantos passos dá o ator no total. Depois, justifica o que aconteceria se o bloco «definir pontos para 0» estivesse dentro do ciclo em vez de estar antes.
Para animar um ator usa-se «repetir 4 vezes: próximo traje; esperar meio segundo». Explica o que se obtém com esse ciclo e calcula quanto tempo dura a animação completa…
Para animar um ator usa-se «repetir 4 vezes: próximo traje; esperar meio segundo». Explica o que se obtém com esse ciclo e calcula quanto tempo dura a animação completa se cada espera for de $0,5\ \text{s}$ e a mudança de traje for instantânea.
A figura mostra dois programas que movem um ator com dois tipos de ciclos diferentes. Explica que diferença existe entre os dois ciclos, apresenta uma situação em que…
A figura mostra dois programas que movem um ator com dois tipos de ciclos diferentes.
Explica que diferença existe entre os dois ciclos, apresenta uma situação em que seja conveniente usar cada um e fundamenta o que pode acontecer com o ciclo da direita se a meta não existisse.
Num jogo de contrarrelógio quer-se registar o recorde do menor tempo gasto a completar um circuito. Um aluno escreve este código ao chegar à meta: «se <Tempo_Partida <…
Num jogo de contrarrelógio quer-se registar o recorde do menor tempo gasto a completar um circuito. Um aluno escreve este código ao chegar à meta:
«se <Tempo_Partida < Recorde> então [altera Recorde para Tempo_Partida]»
No entanto, ao jogar pela primeira vez após criar a variável Recorde (que o Scratch inicializa por defeito em 0), o recorde nunca se atualiza, independentemente da velocidade do carro.
- a) Justifica por que razão falha esta verificação e explica a diferença de inicialização entre procurar um recorde de pontuação máxima e um de tempo mínimo.
- b) Desenha a estrutura de blocos que resolva este problema para a primeira partida e as seguintes sem ter de escrever manualmente um valor inicial fictício antes de clicar na bandeira verde.
Para medir a duração de uma partida, cria-se este cronómetro: «ao pressionar a bandeira verde: mudar Segundos para 0 para sempre: espera 1 s adiciona a Segundos 1» Ao…
Para medir a duração de uma partida, cria-se este cronómetro:
«ao pressionar a bandeira verde:
mudar Segundos para 0
para sempre:
espera 1 s
adiciona a Segundos 1»
Ao comparar este contador com um relógio real após 10 minutos de jogo intenso, o cronómetro do Scratch marca apenas 9 minutos e 35 segundos (uma discrepância de 25 segundos).
- a) Justifica por que razão um ciclo com o bloco «espera 1 s» acumula atraso quando o jogo processa muitas personagens e movimentos simultâneos.
- b) Desenha um cronómetro alternativo em blocos, utilizando o sensor «cronómetro» e variáveis, que não dependa da taxa de atualização do jogo e mostre o tempo decorrido em segundos com uma casa decimal (por exemplo: 14,2 s).
- c) Justifica por que razão a tua proposta mantém a precisão exata mesmo que haja abrandamentos no ecrã.
Condições e operadores lógicos
Bordas do palco e centro do traje
O bloco «se estiver a tocar na borda, ressaltar» verifica se o ator toca na borda do palco e, se tocar, inverte a direção. O ator roda e mede o contacto a partir do seu traje, e o ponto à volta do qual roda é o centro de rotação do traje. Se o traje não estiver bem centrado, o ator pode continuar a tocar na borda depois de ressaltar. Como o «para sempre» volta a mover e a verificar muitas vezes por segundo, a bola fica a tremer presa na borda.
Descreve por palavras tuas os blocos de um programa que pergunta a idade do utilizador e responde «podes passar» se tiver 14 anos ou mais, e «lamento» caso contrário.…
Descreve por palavras tuas os blocos de um programa que pergunta a idade do utilizador e responde «podes passar» se tiver 14 anos ou mais, e «lamento» caso contrário. Indica que tipo de bloco de decisão usarias e que verificação faria exatamente.
Um café do bairro oferece um café apenas aos membros e apenas antes das 10 horas da manhã. Descreve os blocos de decisão encadeados do programa que faz essa verificação…
Um café do bairro oferece um café apenas aos membros e apenas antes das 10 horas da manhã. Descreve os blocos de decisão encadeados do programa que faz essa verificação e explica a diferença entre colocar dois «se» um dentro do outro e colocar dois «se» seguidos, usando este exemplo.
Os blocos de operadores «e», «ou» e «não» combinam verificações. Explica o que faz cada um e descreve as condições completas destes dois sistemas: uma porta que se abre…
Os blocos de operadores «e», «ou» e «não» combinam verificações. Explica o que faz cada um e descreve as condições completas destes dois sistemas: uma porta que se abre se o cartão for válido e a impressão digital coincidir, e um alarme que toca se a janela se abrir ou se o vidro se partir.
Num videojogo, foi incluído este bloco dentro do ciclo «para sempre» do personagem principal: «se <a tocar em Moeda?> então [altera Pontos por 1]» «se <a tocar em…
Num videojogo, foi incluído este bloco dentro do ciclo «para sempre» do personagem principal:
Ao testá-lo, detetam-se duas falhas graves: ao tocar numa única moeda o contador sobe de repente entre 15 e 20 pontos, e ao roçar num inimigo as 3 vidas perdem-se de forma instantânea.
- a) Justifica tecnicamente por que razão isto acontece tendo em conta a velocidade de execução dos ciclos por segundo.
- b) Desenha a alteração necessária nos blocos da moeda e do personagem para corrigir ambos os comportamentos sem pausar o movimento geral do jogo (considera esconder/eliminar objetos e períodos de invulnerabilidade).
Um jogo de plataformas tem este script na personagem: «ao clicar na bandeira verde: mudar Vidas para 3 se <Vidas = 0> então [parar tudo] para sempre: se <a tocar em…
Um jogo de plataformas tem este script na personagem:
«ao clicar na bandeira verde:
mudar Vidas para 3
se então [parar tudo]
para sempre:
se <a tocar em Armadilha?> então:
adicionar a Vidas -2
esperar 0,5 s»
O jogo apresenta dois erros: a partida nunca termina mesmo que o jogador toque na armadilha repetidamente, e se um jogador cair na armadilha tendo 1 vida, o contador passa a -1 vidas sem parar o jogo.
- a) Justifica por que razão a verificação de fim de partida, tal como está colocada, não para o jogo em momento algum.
- b) Explica por que razão utilizar a condição estrita é um erro de design quando o dano subtrai mais de 1 vida.
- c) Desenha a solução reposicionando e modificando os blocos condicionais para garantir que a partida termine exatamente quando as vidas se esgotarem ou ficarem abaixo de zero.
Um aluno programa o movimento de uma bola com este código: «para sempre: move 10 passos se estiver a bater na borda, ressalta» Ao executar o programa com uma bola cujo…
Um aluno programa o movimento de uma bola com este código:
«para sempre:
move 10 passos
se estiver a bater na borda, ressalta»
Ao executar o programa com uma bola cujo traje não está perfeitamente centrado, observa que em certos ângulos a bola fica a tremer e presa na borda do ecrã sem conseguir sair.
- a) Explica passo a passo por que razão ocorre este bloqueio consoante o modo como o Scratch calcula a colisão com a borda e a posição do centro do traje.
- b) O problema resolver-se-ia simplesmente invertendo a ordem dos dois blocos dentro do ciclo? Justifica a tua resposta prevendo o que aconteceria em cada iteração.
- c) Desenha uma alteração nos blocos que garanta que a bola se descole da borda e continue a sua trajetória com normalidade.
Mensagens entre atores
Clones e mensagens: cuidado com a multiplicação
Um clone é uma cópia temporária de um ator, útil para asteroides ou balas. Se um ciclo «para sempre» cria clones e eles nunca desaparecem, o número cresce sem parar e o jogo fica lento. Cada clone deve apagar-se quando sai do palco ou cumpre a sua função (bloco «apagar este clone»). E atenção: um clone também recebe mensagens, por isso um «ao receber» que cria clones pode fazer com que os clones criem mais clones.
Num projeto existem dois atores: um botão e um mágico. Ao clicar no botão, o mágico deve aparecer. Explica para que servem os blocos «difundir mensagem» e «ao receber…
Num projeto existem dois atores: um botão e um mágico. Ao clicar no botão, o mágico deve aparecer. Explica para que servem os blocos «difundir mensagem» e «ao receber mensagem», descreve as sequências de blocos que cada ator teria e fundamenta por que razão não basta colocar os blocos do mágico dentro do botão.
Um colega programou o ciclo de um semáforo para carros (verde: 10 s; amarelo: 3 s; vermelho: 12 s) e um semáforo de peões sincronizado. Para isso, criou dois programas…
Um colega programou o ciclo de um semáforo para carros (verde: 10 s; amarelo: 3 s; vermelho: 12 s) e um semáforo de peões sincronizado. Para isso, criou dois programas independentes com «quando se clicar na bandeira verde» e ciclos «para sempre» com blocos de espera em cada objeto. Após um minuto de simulação, os carros e os peões têm luz verde ao mesmo tempo.
- a) Justifica por que razão ocorre esta desincronização perigosa ao usar ciclos com tempos de espera independentes.
- b) Desenha uma solução com blocos que garanta que nunca coincidam em verde, explicando se utilizas variáveis de estado ou mensagens («enviar mensagem e esperar») e detalhando a ordem exata das mudanças de luz.
Num jogo espacial, o objeto 'Asteroide' tem programadas estas três pilhas: Pilha 1: «ao clicar na bandeira verde: para sempre [espera 2 s; cria um clone de mim mesmo]»…
Num jogo espacial, o objeto 'Asteroide' tem programadas estas três pilhas:
Pilha 1: «ao clicar na bandeira verde: para sempre [espera 2 s; cria um clone de mim mesmo]»
Pilha 2: «ao receber Alerta_Meteoritos: cria um clone de mim mesmo»
Pilha 3: «quando começar como um clone: mostra-te; para sempre [altera y por -5; se <posição y < -170> então [esconde-te]]»
Depois de jogares alguns minutos, o jogo sofre abrandamentos graves, deixam de ser criados asteroides e, cada vez que chega a mensagem Alerta_Meteoritos, o número de clones multiplica-se de forma descontrolada.
- a) Justifica por que razão o bloco «esconde-te» faz com que o jogo deixe de responder e atinja o limite de clones do Scratch.
- b) Explica a falha da Pilha 2: por que razão os próprios clones existentes duplicam a quantidade de asteroides ao receber uma mensagem?
- c) Desenha a solução correta com blocos para a criação, movimento e eliminação definitiva dos clones.
Num jogo de Pong para dois jogadores (raquetes esquerda e direita), detetam-se estes erros de interação: 1. Ao ultrapassar a raquete, a bola ressalta no rebordo traseiro…
Num jogo de Pong para dois jogadores (raquetes esquerda e direita), detetam-se estes erros de interação:
-
Ao ultrapassar a raquete, a bola ressalta no rebordo traseiro e soma vários pontos consecutivos antes de o ponto ser reiniciado.
-
Enquanto a bola regressa ao centro após um golo, os jogadores podem continuar a bater-lhe somando pontos falsos.
-
Se a bola raspar na parte traseira da raquete quando esta sobe rapidamente, a bola sai disparada para dentro da própria baliza.
- a) Desenha a estrutura de blocos da bola para gerir o ponto: deteção do golo, paragem momentânea do jogo e comunicação com os marcadores através de mensagens.
- b) Desenha a condição de ressalto da raquete para que apenas devolva a bola para o campo adversário se o impacto ocorrer na sua face frontal, ou seja, quando a bola se dirigir para a raquete.
- c) Explica como devem reagir as raquetes e a bola à mensagem de 'novo ponto' para retomar o jogo de forma justa e sincronizada.