Mudanças entre as edições de "Sistemas Operacionais e Introdução a Programação - atividades extraclasse 2010-1"
(15 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 128: | Linha 128: | ||
==Semana 3== | ==Semana 3== | ||
− | * Construa o mesmo programa anterior, o gerador automática de código Logo, baseado na seguinte fórmula:<math>\alpha=180-\frac{(numeroDeLados-2)*180}{numeroDeLados}</math>, onde <math>\alpha</math> é o ângulo interno do polígono regular. Porém, dessa vez, algumas restrições: | + | * Construa o mesmo programa anterior, o gerador automática de código Logo, baseado na seguinte fórmula:<math>\alpha=180-\frac{(numeroDeLados-2)*180}{numeroDeLados}</math>, onde <math>\alpha</math> é 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 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. | ** 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. | ||
Linha 143: | Linha 143: | ||
} | } | ||
pois 18 é um número par maior que 10. | 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 [http://pt.wikipedia.org/wiki/Ano_bissexto 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: | ||
+ | *# De 4 em 4 anos é ano bissexto. | ||
+ | *# De 100 em 100 anos não é ano bissexto. | ||
+ | *# De 400 em 400 anos é ano bissexto. | ||
+ | *# 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. | * 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: | * 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 | + | ** 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 | + | ** 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 | + | ** 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. | * 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== | ==Semana 4== | ||
+ | |||
+ | # 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 | ||
+ | # 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 | ||
+ | # 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 | ||
+ | # Faça um algoritmo para descobrir os dois maiores números dentre 6 números lidos do teclado. | ||
+ | # Faça um algoritmo para converter um número entre 0 e 16777215 para sua representação em hexadecimal. | ||
+ | # 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 | ||
+ | # Em uma máquina de contar moedas, o dispositivo que identifica as moedas as classifica segundo esses códigos: <br><br> | ||
+ | {| border="1" cellpadding="2" | ||
+ | !Moeda | ||
+ | !Código | ||
+ | |- | ||
+ | |1 Real||10 | ||
+ | |- | ||
+ | |50 centavos||8 | ||
+ | |- | ||
+ | |25 centavos||7 | ||
+ | |- | ||
+ | |10 centavos||5 | ||
+ | |- | ||
+ | |5 centavos||3 | ||
+ | |- | ||
+ | |1 centavo||1 | ||
+ | |}<br>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.<br>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: | ||
+ | |||
+ | [[Imagem: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 == | ||
+ | |||
+ | # Escreva um algoritmo que retire os números repetidos de um vetor, deixando apenas um valor de cada número. | ||
+ | # 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.'' | ||
+ | # 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<br><br>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:<br><br> | ||
+ | #* 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= | =Linguagem de Programação C= | ||
− | + | Obs.: essas atividades podem - e DEVEM - ser resolvidas em conjunto com o monitor da disciplina, o Jonas. | |
+ | |||
==Semana 2== | ==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 3== | ||
==Semana 4== | ==Semana 4== |
Edição atual tal como às 04h52min de 21 de maio de 2010
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.
Linguagem Logo
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:
- De 4 em 4 anos é ano bissexto.
- De 100 em 100 anos não é ano bissexto.
- De 400 em 400 anos é ano bissexto.
- 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
- 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
- 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
- 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
- Faça um algoritmo para descobrir os dois maiores números dentre 6 números lidos do teclado.
- Faça um algoritmo para converter um número entre 0 e 16777215 para sua representação em hexadecimal.
- 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
- 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:
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
- Escreva um algoritmo que retire os números repetidos de um vetor, deixando apenas um valor de cada número.
- 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.
- 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.