Mudanças entre as edições de "PRG-2011-1-tiago"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 141: Linha 141:
  
 
'''Mãos à obra !'''
 
'''Mãos à obra !'''
 +
 +
== 24/03: Introduzindo algoritmos: variáveis e expressões ==
 +
 +
Variáveis são usadas em algoritmos para guardar dados. Dados podem ser:
 +
* Números inteiros ou reais
 +
* Letras ou textos
 +
* Valores lógicos (booleanos)
 +
* ... e outros que vocês descobrirão futuramente !
 +
 +
Uma variável possui um identificador, que nada mais é que seu nome. No Scratch as variáveis são criadas e podem ser modificadas com os comandos categorizados em ''Variáveis'' (comandos laranjas):
 +
 +
 +
[[imagem:Scratch-var1.png]]
 +
 +
 +
Variáveis podem ser ''globais'' ou ''locais'':
 +
* ''Globais:'' são visíveis e podem ser usadas por qualquer objeto do Scratch.
 +
* ''Locais:'' são visíveis e podem ser usadas somente pelo objeto do Scratch ao qual está vinculada.
 +
 +
Variáveis podem ser usadas em qualquer comando que precise de um valor numérico, como por exemplo o comando para mover um certo número de passos. No exemplo abaixo, um programa faz com que um objeto desenhe um triângulo no palco, sendo que o comprimento do lado do triângulo é informado pelo usuário.
 +
 +
[[imagem:Scratch-var2.png]]
 +
 +
 +
Variáveis podem ser usadas em ''expressões aritméticas'', que realizam algum cálculo com valores numéricos. No Scratch expressões são criadas combinando-se os blocos contidos em ''Operadores''(blocos verdes-claros):
 +
 +
 +
[[imagem:Scratch-operadores1.png]]
 +
 +
 +
Usando esses blocos podem-se calcular novos valores usando variáveis ou constantes. Por exemplo, um pequeno programa que desenha um polígono qualquer precisa calcular o ângulo de quina da figura dependendo de sua quantidade de lados:
 +
 +
 +
[[imagem:Scratch-operadores2.png]]
 +
 +
 +
Usando esses conceitos sobre variáveis e expressões, faça as atividades a seguir.
 +
 +
=== Pong ===
 +
 +
Outro jogo clássico chamado [http://pt.wikipedia.org/wiki/Pong Pong] mostrava uma bola que refletia em uma parede, voltando e devendo ser interceptada por uma pequena base (que funcionava como raquete) comandada pelo jogador. Se conseguir interceptá-la, a bola é refletida de novo em direção à parede oposta, continuando assim o jogo. Se falhar, o jogo termina. Esse é considerado o primeiro videogame lucrativo a ter sido criado ...
 +
 +
[[imagem:Pong1.jpg]]
 +
 +
 +
Tente fazer uma versão do Pong usando o Scratch, mas com duas pequenas modificações. Há apenas uma base, que fica no canto inferior do palco. O placar conta quantas vezes a bola tocou o chão (i.e. o jogador falhou em interceptá-la), e se chegar a 0 o jogo termina. A segunda modificação é uma aceleração gradual da bola, que deve deve aumentar de velocidade a cada 5 segundos de jogo.
 +
 +
 +
Para que serão necessárias variáveis nesse jogo ?
 +
 +
==== O problema da reflexão da bola na barra ====
 +
 +
Em aula vimos que para fazer a reflexão da bola com a barra deve-se calcular o ângulo de reflexão. No caso da barra estar na horizontal, esse ângulo deve ser calculado assim:
 +
 +
<math>NovaDirecao = 180^0 - Direcao</math>
 +
 +
No Scratch isso deve ser feito combinando-se o comando "Aponte para direção" e uma expressão para calcular a nova  direção. A direção atual do objeto está contida em sua variável local ''direção'' (predefinida nos comandos de ''Movimentos''):
 +
 +
 +
[[imagem:Scratch-reflexao.png]]
 +
  
 
== 31/03: Algoritmos ==
 
== 31/03: Algoritmos ==

Edição das 15h01min de 29 de março de 2011

Instrutor

Professor: Tiago Semprebom
Email: tisemp@ifsc.edu.br
Atendimento paralelo: 4a feira 14:30h - 15:30h e 5a feira 14:30h - 15:30h (Lab. de Desenvolvimento de Tele)

Lógica de Programação

16/03: Introdução

  • Tópicos: instrução, sequência, problemas do dia a dia.
  • Páginas da apostila: 4 a 7.

17/03: Resolução de exercícios

  • Resolução de exercícios propostos aos alunos na aula do dia 06/09
  • Apresentação dos trabalhos de Conclusão de Curso CST Telecomunicações (TCCII) - Auditório Campus São José

23/03: Desenvolvendo algoritmos

  • Tópicos: resolvendo problemas, linguagens e instrução disponíveis (vocabulário).
  • Páginas da apostila: 8 a 11.

Exemplificando com shell scripts:

#!/bin/bash

# Cada linha no script abaixo corresponde a uma instrução ...
# O conjunto de instruções na ordem apresentada forma uma sequência lógica ...

echo Iniciando o script ...
echo Vou procurar todos os arquivos de texto existentes neste diretório

find . -type f -name "*.doc" > .tmp
find . -type f -name "*.txt" >> .tmp
find . -type f -name "*.rtf" >> .tmp
find . -type f -name "*.odt" >> .tmp

echo Os arquivos são:

cat .tmp

rm -f .tmp

Videos sobre algoritmos:

Problemas exemplo

Problema dos três recipientes

Há três recipientes com tamanhos distintos: um com 8 litros, outro com 5 litros e o terceiro com 3 litros. O recipiente com 8 litros está completamente cheio. Deseja-se colocar 4 litros em dois recipientes. Considere que os recipientes não são graduados.


Problema da travessia

Um barqueiro precisa levar um saco de milho, uma galinha e uma raposa para o outro lado do rio. Porém o barco somente é capaz de levar uma coisa de cada vez (além do barqueiro). Qual a sequência de travessias necessário para atravessar o milho, a galinha e a raposa ?

Torres de Hanoi

Há três hastes. Uma das hastes serve de suporte para três discos de tamanhos diferentes. Um disco menor sempre é colocado sobre um disco maior. A figura abaixo ilustra as hastes e os discos:

Hanoi.png

Desejam-se mover os três discos para a haste da direita. Porém só pode se mover um disco por vez, e um disco maior nunca pode ficar sobre um disco menor.

Operação possível: Move disco para haste

Qual a sequência de operações para mover os discos de uma haste para outra ?

Atividade extra

  • O jogo LightBot mostra de uma forma divertida como criar pequenos algoritmos. Até que fase desse jogo você consegue chegar ?

Exercícios: desenho de figuras geométricas

  • kturtle é um software educacional para ajudar no ensino de matemática, geometria e introdução à programação. Ele possibilita fazer desenhos facilmente, seguindo um programa com instruções de desenho. Usando as instruções:

reset forward X turnright angulo turnleft angulo </syntaxhighlight> ... escreva algoritmos para desenhar as seguintes figuras:

    • triângulo equilátero
    • triângulo isósceles
    • triângulo escaleno
    • quadrado
    • hexágono
    • octógono
    • 7 hexágonos interligados (um central e seis periféricos).

24/03: Desenvolvendo algoritmos

Para criar algoritmos, deve-se primeiro entender o que são instruções e sequências lógicas;

O jogo LightBot mostra de uma forma divertida como criar pequenos algoritmos. Nesse jogo o robô deve se movimentar de acordo com uma sequência de instruções elementares definidas pelo jogador. Apesar de sua simplicidade, ele pode se tornar bastante desafiador ! Até que fase desse jogo você consegue chegar ?

Lightbot.png

Desenhando figuras geométricas

  1. Scratch é um software educacional para ajudar no ensino de matemática, geometria e introdução à programação. Com ele pequenos programas podem ser escritos de foram visual, com instruções representadas por blocos que se encaixam como Lego. Ele possibilita fazer desenhos facilmente, seguindo um programa com instruções de desenho. Use-o para desenhar estas figuras:
    • triângulo equilátero
    • triângulo isósceles
    • quadrado
    • hexágono
    • quadrado com vértices interligados
    • Um círculo

Scratch.png


  • Agora tente algo mais avançado:

Projeto: um jogo muito simples

Você conhece o jogo clássico Space Invaders ?

Spaceinvaders.jpg


Pros padrões atuais esse é um jogo muito simples. Você conseguiria reproduzi-lo, mesmo que simplificado, no Scratch ? Ele poderia começar assim:

Jogo1-scratch.gif


  1. O robô se movimenta na horizontal, comandado pelas teclas seta pra direita e seta pra esquerda.
  2. O helicóptero se movimenta de um lado a outro constantemente, refletindo nas bordas.
  3. Ao teclar espaço, um tiro sai do robô em direção ao topo do palco
  4. Se o tiro acertar o helicóptero, o jogo termina.


O que você precisa para fazer esse jogo ?

  1. Movimento do helicóptero.
  2. Movimento do robô comandado pelo teclado.
  3. Acionamento do tiro.
  4. Detecção se o tirou acertou o helicóptero.

Mãos à obra !

24/03: Introduzindo algoritmos: variáveis e expressões

Variáveis são usadas em algoritmos para guardar dados. Dados podem ser:

  • Números inteiros ou reais
  • Letras ou textos
  • Valores lógicos (booleanos)
  • ... e outros que vocês descobrirão futuramente !

Uma variável possui um identificador, que nada mais é que seu nome. No Scratch as variáveis são criadas e podem ser modificadas com os comandos categorizados em Variáveis (comandos laranjas):


Scratch-var1.png


Variáveis podem ser globais ou locais:

  • Globais: são visíveis e podem ser usadas por qualquer objeto do Scratch.
  • Locais: são visíveis e podem ser usadas somente pelo objeto do Scratch ao qual está vinculada.

Variáveis podem ser usadas em qualquer comando que precise de um valor numérico, como por exemplo o comando para mover um certo número de passos. No exemplo abaixo, um programa faz com que um objeto desenhe um triângulo no palco, sendo que o comprimento do lado do triângulo é informado pelo usuário.

Scratch-var2.png


Variáveis podem ser usadas em expressões aritméticas, que realizam algum cálculo com valores numéricos. No Scratch expressões são criadas combinando-se os blocos contidos em Operadores(blocos verdes-claros):


Scratch-operadores1.png


Usando esses blocos podem-se calcular novos valores usando variáveis ou constantes. Por exemplo, um pequeno programa que desenha um polígono qualquer precisa calcular o ângulo de quina da figura dependendo de sua quantidade de lados:


Scratch-operadores2.png


Usando esses conceitos sobre variáveis e expressões, faça as atividades a seguir.

Pong

Outro jogo clássico chamado Pong mostrava uma bola que refletia em uma parede, voltando e devendo ser interceptada por uma pequena base (que funcionava como raquete) comandada pelo jogador. Se conseguir interceptá-la, a bola é refletida de novo em direção à parede oposta, continuando assim o jogo. Se falhar, o jogo termina. Esse é considerado o primeiro videogame lucrativo a ter sido criado ...

Pong1.jpg


Tente fazer uma versão do Pong usando o Scratch, mas com duas pequenas modificações. Há apenas uma base, que fica no canto inferior do palco. O placar conta quantas vezes a bola tocou o chão (i.e. o jogador falhou em interceptá-la), e se chegar a 0 o jogo termina. A segunda modificação é uma aceleração gradual da bola, que deve deve aumentar de velocidade a cada 5 segundos de jogo.


Para que serão necessárias variáveis nesse jogo ?

O problema da reflexão da bola na barra

Em aula vimos que para fazer a reflexão da bola com a barra deve-se calcular o ângulo de reflexão. No caso da barra estar na horizontal, esse ângulo deve ser calculado assim:

No Scratch isso deve ser feito combinando-se o comando "Aponte para direção" e uma expressão para calcular a nova direção. A direção atual do objeto está contida em sua variável local direção (predefinida nos comandos de Movimentos):


Scratch-reflexao.png


31/03: Algoritmos

  1. kturtle é um software educacional para ajudar no ensino de matemática, geometria e introdução à programação. Ele possibilita fazer desenhos facilmente, seguindo um programa com instruções de desenho. Usando as instruções:
    reset (move a tartaruga para o centro da tela)
    clear (limpa a tela)
    pendown (põe a caneta no papel - acendeCaneta)
    penup (levanta a caneta - apagaCaneta)
    forward X (avança X posições)
    turnright angulo (gira pra direita)
    turnleft angulo (gira pra esquerda)
    
    ... escreva programas para os algoritmos para desenhar as seguintes figuras:
    • triângulo equilátero
    • triângulo isósceles
    • triângulo escaleno
    • quadrado
    • hexágono
    • octógono
    • quadrado com vértices interligados
    • Um círculo
    • 7 hexágonos interligados (um central e seis periféricos).
    • 7 círculos interligados (um central e seis periféricos), parecendo uma flor


Guia de referência completo do Kturtle


Kturtle.png


Atividade para casa

  1. Fractais são figuras nas quais cada pedacinho é semelhante à toda figura. Um fractal bastante simples de criar é o Floco de Neve Koch, cuja criação pode ser entendida na sequência de figuras abaixo:

Koch0.png
Primeira iteração

Koch1.png
Segunda iteração

Koch2.png
Terceira iteração

Koch3.png
Próximas iterações

Usando o kturtle desenhe essas figuras, reproduzindo o maior número de iterações que conseguir. Você consegue descobrir uma regra para gerá-las ?

Obs: fonte dessas figuras

Dicas para o kturtle

  1. Pode-se repetir uma sequência de instruções usando-se o comando repeat. Por exemplo, para desenhar um pentágono usando repeat:
    repeat 5 {
      forward 50
      turnleft 72
    }
    
  2. Podem-se usar variáveis para generalizar os algoritmos. Uma variável tem um identificador, que deve ser precedido do caractere $:
    $x=5
    $lado=50
    repeat $x {
      forward $lado
      turnleft 360/$x
    }
    
  3. Pode-se usar o comando ask para ler do teclado valores a serem usados no algoritmo de desenho:
    $x = ask "Quantos lados tem o polígono ?"
    $lado = ask "Qual o comprimento de cada lado ?"
    repeat $x {
      forward $lado
      turnleft 360/$x
    }
    
  4. Por fim, com o comando learn é possível criar novos comandos no kturtle. Por exemplo, para criar um comando que desenhe um triângulo:
    learn triangulo $lado {
     repeat 3 {
      forward $lado
      turnleft 120
     }
    }
    

Esse novo comando desenha um triângulo equilátero cujos lados tem comprimento dado pelo parâmetro $lado. Ele poderia ser usado assim em um algoritmo:

learn triangulo $lado {
 repeat 3 {
  forward $lado
  turnleft 120
 }
}
triangulo 50
triangulo 100
triangulo 100

Nesse exemplo, três triângulos são desenhados: um com lado 50, outro com lado 100, e um terceiro com lado 150. Veja que o número escrito logo após o comando triangulo irá aparecer no lugar de $lado no algoritmo que desenha o triângulo.