Sistemas Operacionais e Introdução a Programação - atividades extraclasse 2010-1

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Lógica de Programação

Semana 1

São vistos os conceitos básicos de lógica de programação: instrução, algoritmo, sintaxe.

Para fins didáticos, pode-se usar a linguagem Logo através do programa Kturtle.

Para desenhos simples, bastam apenas as seguintes instruções:

  • reset
  • forward NÚMERO
  • turnright NÚMERO
  • turnleft NÚMERO

Baseado nesse conjunto de instruções, desenhe:

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

Agora, o processo reverso: que desenho será gerado a partir do algoritmo abaixo?

reset
repeat 6
{
   forward 70
   turnleft 60
}
repeat 6
{
   forward 70
   turnright 60
}
turnleft 120
repeat 6
{
   forward 70
   turnleft 60
}
forward 70
turnright 60
repeat 6
{
   forward 70
   turnleft 60
}
forward 70
turnright 60
repeat 6
{
   forward 70
   turnleft 60
}
forward 70
turnright 60
repeat 6
{
   forward 70
   turnleft 60
}
forward 70
turnright 60
repeat 6
{
   forward 70
   turnleft 60
}

Jogo: Light Bot

Neste jogo, Light Bot, deve-se programar os movimentos do personagem para avançar à próxima fase.

Semana 2

  • A partir dessa semana, seré usado o Portugol IDE como ferramenta didática.

Portugol

  • Construa um programa que mostre, em sequência: 9, 9^2 (ao quadrado), 9^3 (ao cubo) e a soma desses 3 números.
inicio

   inteiro VAR1
   VAR1 <- 9
   escrever VAR1

   escrever "\n"

   inteiro VAR2
   VAR2 <- 9 * 9
   escrever VAR2
    
   escrever "\n"
    
   inteiro VAR3
   VAR3 <- 9 * 9 * 9
   escrever VAR3

   escrever "\n"
    
   inteiro SOMA
   SOMA <- VAR1 + VAR2 + VAR3
   escrever SOMA
fim
  • Construa um programa que escreverá, na tela, os 10 primeiros números da sequência de Fibonacci. Utilize, para tal, 10 variáveis.
    • Variante: utilize apenas 3 variáveis para resolver o problema.
    • Variante: utilize apenas 2 variáveis para resolver o problema.
  • Crie um conversor de decimal para binário (limite: 4 bits). Ex.: tendo o número 10 (decimal) de entrada, deve-se obter o número 1010 (binário) de saída.
  • Um equipamento conta o tempo desde que foi ligado. No entanto, essa contagem é feita em segundos. Faça um algoritmo que converta o valor desse contador para horas, minutos e segundos. Ex: se o contador tiver o valor 43397, o seu programa deve mostrar: 12:03:17.
  • Crie um gerador automático de código Logo para desenhar polígonos:
    • Ler um número do usuário.
    • Calcular o ângulo interno.
    • Apresentar como resultado o código Logo a ser inserido no programa Kturtle. Ex.: se o usuário digitar o número 3, o código será de um triângulo equilátero, cuja soma dos ângulos internos é 180 - logo, cada ângulo será de 60 graus (no Logo, lembre-se que o ângulo a ser usado é o complemento de 180, conforme visto em aula). Se o usuário digitar 5 ao invés de 3, teremos um pentágono. Abaixo temos soluções para triângulo e pentágono:
reset
repeat 3
{
  forward 100
  turnright 120
}
reset
repeat 5
{
  forward 100
  turnright 72
}

Semana 3

  • Construa o mesmo programa anterior, o gerador automática de código Logo, baseado na seguinte fórmula:, onde é o ângulo interno do polígono regular (obs: essa fórmula pode ser simplificada para 360/numeroDeLados). Porém, dessa vez, algumas restrições:
    • Se o usuário informar o número 0 (zero), o programa deve alertá-lo de que não será possível prosseguir com o cálculo, uma vez que não é possível divisão por zero.
    • Se o usuário informar os números 1 ou 2, o programa deve alertá-lo de que não será possível desenhar um polígono regular com tal quantidades de lados.
    • Nos demais casos, o tamanho da passada (forward) dependerá da quantidade de lados:
      • Entre 3 e 6 lados: passada com tamanho 100 (forward 100).
      • Entre 7 e 10 lados: passada com tamanho 50.
      • Mais que 10 lados: passada com tamanho 25.
    • Se a quantidade de lados for par, o desenho deverá deslocar-se para a esquerda (turnleft); ímpar, para a direita (turnright). Exemplo: um polígono regular de 18 lados terá o seguinte código Logo:
reset
repeat 18
{
  forward 25
  turnleft 20
}

pois 18 é um número par maior que 10.

  • Escreva um algoritmo para mostrar quantos dias há em um determinado mês de um ano. Note que em anos bissextos, que têm 366 dias, o mês de fevereiro possui 29 dias. Seu algoritmo portanto precisa de dois dados de entrada: o mês e o ano. A regra para determinação de ano bissexto segue abaixo:
    1. De 4 em 4 anos é ano bissexto.
    2. De 100 em 100 anos não é ano bissexto.
    3. De 400 em 400 anos é ano bissexto.
    4. Prevalecem as últimas regras sobre as primeiras.
  • Faça um jogo de par ou ímpar, em que o jogador aposta contra o computador. O jogador deve digitar um número entre 0 e 5 e optar entre par ou ímpar. O computador deve sortear um número também entre 0 e 5. Se a paridade da soma dos números do jogador e do computador for a mesma que o jogador optou, então ele ganha a partida, senão o computador vence.
  • Escreva um algoritmo para identificar se há, dentre três palavras lidas do teclado, ao menos duas palavras distintas que pertençam ao conjunto {azul, preto, vermelho}. Exemplos:
    • Se o usuário digitar verde, preto, vermelho, o programa deve mostrar na tela verdadeiro
    • Se o usuário digitar verde, preto, preto, o programa deve mostrar na tela falso
    • Se o usuário digitar azul, preto, azul, o programa deve mostrar na tela verdadeiro
  • Escreva uma calculadora para as quatro operações aritméticas básicas (+, -, *, /). Essa calculadora deve ler (nesta ordem) um número real, o símbolo da operação aritmética, e um segundo número real. Em seguida deve mostrar o resultado da operação solicitada.

Semana 4

  1. Escreva um algoritmo para fatorar um número. Quer dizer, ele deve mostrar todos os fatores primos que dividem esse número, e com as respectivas multiplicidades. Ex:
    • 15 tem fatores 3, 5
    • 18 tem fatores 2, 3, 3
    • 150 tem fatores 2, 3, 5, 5
  2. Escreva um algoritmo para calcular o MMC (Mínimo Múltiplo Comum) de dois números. O MMC de dois números é um número que pode ser dividido por qualquer um deles sem deixar resto. Ex:
    • MMC de 8 e 6 = 24
    • MMC de 3 e 5 = 15
    • MMC de 3 e 27 = 27
  3. Escreva um algoritmo para calcular o MDC (Máximo Divisor Comum) de dois números. O MDC de dois números é um número capaz de dividi-los sem deixar resto. Ex:
    • MDC de 24 e 16 = 8
    • MDC de 5 e 3 = 1
    • MDC de 60 e 150 = 30
  4. Faça um algoritmo para descobrir os dois maiores números dentre 6 números lidos do teclado.
  5. Faça um algoritmo para converter um número entre 0 e 16777215 para sua representação em hexadecimal.
  6. Escreva o algoritmo para uma calculadora aritmética (operações +, -, * e /) que lê continuamente do teclado números e operadores. A calculadora deve ler continuamente uma sequência do tipo número operador_aritmético, até que o operador informado seja =, quando então o resultado da conta deve ser mostrado na tela. Ex:
    • 1 + 2 * 5 / 3 = 5
    • 2 * 5 - 1 / 3 = 3
  7. Em uma máquina de contar moedas, o dispositivo que identifica as moedas as classifica segundo esses códigos:

Moeda Código
1 Real 10
50 centavos 8
25 centavos 7
10 centavos 5
5 centavos 3
1 centavo 1


Assim, um algoritmo dentro da máquina recebe do dispositivo de classificação um código para cada moeda, e faz a totalização dos valores em reais. O dispositivo de classificação informa o código -1 quando não houver mais moedas para serem classificadas.
Escreva o algoritmo que faz a contagem e totalização de moedas dessa máquina. Ele deve ao final mostrar as seguintes informações:

  • Valor total em reais
  • Quantidade total de moedas
  • Quantidade total de moedas de cada tipo
  • DESAFIOZINHO: faça um algoritmo que conta quantos elementos de um vetor são encontrados também em outro vetor. Valores repetidos devem ser contados apenas uma vez.
  • DESAFIOZÃO: no jogo "Senha", a senha é composta de quatro pinos que podem ter essas cores: verde, amarelo, azul, vermelho, roxo, rosa, laranja. O jogador deve tentar descobrir a senha, e para isto ele escolhe quatro pinos. A cada tentativa, o dono da senha deve informar quantos pinos correspondem a cores certas nas posições corretas, e quantos são cores certas mas em posições erradas. fazendo comparações entre suas tentativas, e usando lógica, o jogador deve ser capaz de descobrir a senha após um certo número de jogadas. Uma das versões desse jogo pode ser vista abaixo:

Supersenha2.jpg

Faça um algoritmo para a verificação de uma jogada. Ele deve ler as cores dos quatro pinos do jogador, comparar com a senha, e então mostrar quantas cores há em posições certas e quantas em posições erradas.

Semana 5

  1. Escreva um algoritmo que retire os números repetidos de um vetor, deixando apenas um valor de cada número.
  2. Seja um vetor ordenado com 16 números inteiros. Escreva um algoritmo que teste se um determinado número existe dentro desse vetor, porém usando no máximo 4 comparações. Dica: pesquise sobre busca binária.
  3. Um vetor de números inteiros contém apenas valores 0 e 1. Esses valores aparecem agrupados dentro do vetor, como nesses exemplos:
    • 001110110011110
    • 110111000001111
    • 011110000011100

      Escreva um algoritmo que leia um número do teclado, e verifique se a opsição indicada por esse número contém o valor 1. Caso sim, deve-se indicar em que grupo de 1s consecutivos está essa posição. Tomando como base o primeiro dos exemplos acima:

    • Se for digitado 3, o resultado será: verdadeiro, e está no grupo 1"
    • Se for digitado 5, o resultado será: falso"
    • Se for digitado 12, o resultado será: verdadeiro, e está no grupo 3"

Linguagem de Programação C

Obs.: essas atividades podem - e DEVEM - ser resolvidas em conjunto com o monitor da disciplina, o Jonas.

Semana 2

Tópicos: variáves e constantes, entrada e saída de dados, vetores e matrizes.

  • Construa um programa, em C, para ler 5 números inteiros e apresentá-los em ordens crescente e decrescente.
  • Construa um programa, em C, para colocar as iniciais das palavras em maiúsculo. A frase "Amanhã vai ser maior.", por exemplo, deve ficar assim: "Amanhã Vai Ser Maior". A frase pode ficar armazenada dentro do programa - não é preciso ler do usuário.
  • Assim como o programa anterior, armazene internamente um frase dentro do programa (para facilitar a atividade). Em seguida, conte quantas vezes aparecem as letras "a" e "m" e informe o usuário.
  • Construa em programa, em C, para calcular o preço final de um produto. O usuário informará o valor de entrada, a quantidade de parcelas (12, 24 ou 36) e o juro. Ao final, o programa deve informar o valor médio da parcela, bem como o valor final a ser pago (entrada + quantidade de parcelas X parcela média).
  • Complementando o exercício anterior, modifique-o de forma que o usuário poderá ver a evolução das parcelas (aplicação do juro composto) na tela e, ao final, o valor médio da parcela.

Semana 3

Semana 4

Semana 5

Semana 6

Semana 7

Semana 8