You are on page 1of 5

Lista de Atividades Pr aticas

Introdu c ao ` a L ogica de Programa c ao MATA37 Prof. Paul Regnier As atividades est ao organizadas em ordem de diculdade crescente. Recomenda-se fazer pelo menos 2/3 da lista, com os seguintes objetivos em mentes: Buscar e escrever a solu c ao no papel primeiro. Isto ser a inclusive o cen ario das tr es provas; Tentar achar solu c oes exatas, l ogicas, criativas, simples e ecientes; Usar os comandos adequadamente, buscando a clareza do c odigo e o respeito das regras de escrita de programa leg vel em Python, notadamente dos coment arios.

1. Escrever um programa que receba 3 n umeros reais em entrada e, caso estes n umeros possam ser os comprimentos dos lados de um tri angulo, calcule o per metro deste e escrev e-lo na tela. Lembrete: 3 n umeros reais s ao as medidas dos lados de um tri angulo se s o se cada um destes n umeros e menor que a soma dos dois outros). 2. Escreva um programa que calcule as ra zes de uma equa c ao do segundo grau, na forma Ax2 + Bx + C = 0. N ao se esque ca que a equa c ao pode ter nenhuma, uma ou duas ra zes reais. 3. Escreva um programa que ordena 3 n umeros inteiros, utilizando estrutura de sele c oes encadeadas. 4. Escreva um programa que receba 2 n umeros reais e um operador + , - , * ou / em entrada e utilize uma estrutura de sele c ao m ultipla para executar a opera c ao pedida. 5. Escreva um programa que determine o algarismo da casa das unidades de um inteiro fornecido pelo usu ario. 6. Escreva um programa que, dado um n umero inteiro de 3 d gitos, gere o n umero de forma invertida. O algoritmo deve gerar o n umero e n ao apenas imprimi-lo de forma invertida. 7. Escreva um programa que utilize uma estrutura de sele c ao m ultipla para receber os dados de entrada necess arios e executar uma das opera c oes abaixo:

Multiplica c ao de dois n umeros inteiros sem utilizar os operadores / (divis ao), // (divis ao inteira) ou * (multiplica c ao); Calculo do quociente e do resto da divis ao euclidiana de dois n umeros inteiros n ao nulos sem utilizar os operadores / (divis ao), // (divis ao inteira), % (m odulo) ou * (multiplica c ao); Pot encia de um n umero inteiro positivo por um expoente inteiro positivo sem utilizar operador/fun c ao de pot encia (elevado a); Fatorial de um n umero inteiro. Logaritmo com base 2 de um n umero inteiro positivo pot encia de 2. 8. Escreva um programa que solicite como entrada um n umero que represente a quantidade de segundos. O algoritmo deve converter esse n umero para o formato de rel ogio digital (hh:mm:ss). Por exemplo, caso o usu ario digite 10, o algoritmo deve gerar a seguinte sa da: 00:00:10. Se for digitado 745, por exemplo, o algoritmo deve gerar 00:12:25 (doze minutos e vinte cinco segundos). 9. Considere uma lista L de n umeros inteiros quaisquer e um n umero inteiro p qualquer. Escreva uma fun c ao contagem(L,p) que recebe L e p como par ametros e retorna o n umero de ocorr encias de p em L. Dicas: Se L = [7, 1, 7, 2], o tamanho da lista len(L) e 4, o elemento L[3] vale 2 e contagem(L,7) vale 2. 10. Escreva um programa que determine os ndices dos elementos m aximo e m nimo de uma lista de n n umeros inteiros. 11. Dados dois n umeros inteiros n e p, escreva um programa que determine se estes n umeros s ao primos entre si ou n ao. Dica: Dois n umeros s ao primos entre si se eles n ao tem nenhum divisor comum. 12. Escrever uma fun c ao que recebe como par ametro um n umero inteiro positivo n e retorna o menor n umero primo maior do que n. Por exemplo, ao ser chamada com par ametro 10, o valor de retorno deve ser 11. 13. Um n umero inteiro n e dito perfeito se a soma de todos os seus divisores vale 2n. Por exemplo, como os divisores de 6 s ao 1, 2, 3 e 6, de soma 1 + 2 + 3 + 6 = 12, 6 e perfeito. A Matem atica ainda n ao sabe se a quantidade de n umeros perfeitos e ou n ao nita. Escreva um programa que liste todos os n umeros perfeitos menores que um inteiro n dado.

14. (a) Escrever uma fun c ao cond de que recebe uma lista L qualquer em entrada e retorna o conjunto E associado (sem repeti c ao de elementos). (b) Usando esta fun c ao, escrever duas fun c oes inter de(L1, L2) e uniao de(L1, L2) que recebem duas listas L1 e L2 de inteiros em entrada e retornam os conjuntos interse c ao e uni ao de L1 e L2 . Exemplo: L1 = [2, 2, 1, 3], L2 = [4, 1, 4]. E 1 = {2, 1, 3}, E 2 = {1 , 4 }, U = E 1 E 2 = {2 , 1 , 3 , 4 } e I = E 1 E 2 = {1 }. 15. Escreva um programa que ordene uma lista de n n umeros inteiro em ordem crescente, utilizando o algoritmo de sele c ao do m aximo. 16. Escreva um programa que ordene uma lista de n n umeros inteiro em ordem crescente, utilizando o algoritmo por inser c ao - Dica: come car por ordenar os dois primeiros elementos. Em seguida, inserir, no devido lugar, o terceiro, o quarto... at eou ltimo. 17. Dado uma lista de n n umeros inteiros, escrever um programa que determine se esta lista forma uma permuta c ao de {1, 2, . . . , n}. Dica: Uma permuta c ao p de In = {1, 2, . . . , n} e uma fun c ao bijectiva de I em I . Desta forma, cada elemento de I tem uma u nica imagem por p e p( I ) e um embaralhamento de I . Por exemplo, as 6 permuta c oes de [1, 2, 3] s ao [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2] e [3, 2, 1]. 18. Escrever uma fun c ao recursiva que determine o maior elemento de uma lista de n umeros reais L. 19. Escrever uma fun c ao recursiva que calcule a soma dos n primeiros quadrados, para n inteiro maior que 1. 20. Escrever duas fun c oes, uma recursiva e outra n ao, que gere a sequ encia de Fibonacci at e o n- esimo termo, sendo n fornecido pelo usu ario. Dica: A sequ encia de Fibonacci e denida por indu c ao da seguinte maneira. Os dois primeiros termos vale 0 e 1. O termo i e igual a soma do termo i 1 e do termo i 2. Por exemplo, a sa da para n = 10 ser a: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55. 21. Escreve duas fun c oes, uma recursiva e outra n ao, que gerem todas as permuta c oes de {1, 2, . . . n} para n 1 um n umero inteiro qualquer. Compare o desempenho de ambas. 22. Escreve duas fun c oes, uma recursiva e outra n ao, que gerem as linhas do tri angulo de Pascal.

Dica: As primeiras linhas s ao: L[1] = [1], L[2] = [1, 1], L[3] = [1, 2, 1]. De maneira geral, se L[i] = [1, ai,1 , . . . , ai,i1 , 1] e L[i + 1] = [1, ai+1,1 , . . . , ai+1,i , 1], ent ao ai+1,k = ai,k1 + ai,k para 1 k i. 1 1 1 1 1 4 3 6 2 3 4 1 1 1 1

23. Escrever um algoritmo que implemente o crivo de Erat ostenes para determinar todos os n umeros primos menores do que um n umeros inteiro n qualquer. 24. Escreva um algoritmo que leia um vetor de 20 n umeros inteiros. Depois de ler o vetor, o algoritmo dever a gerar um segundo vetor com os mesmos dados do vetor lido, s o que na ordem invertida, ou seja, o primeiro elemento do vetor lido dever a car na u ltima posi c ao do segundo vetor, o segundo elemento na pen ultima posi c ao, e assim por diante. 25. Escreva um algoritmo que leia n umeros inteiros e armazene num vetor de tamanho dez. Depois leia um n umero qualquer. O algoritmo, ent ao, deve: (i) vericar se o n umero digitado pertence ao vetor, e informar a sua posi c ao, (ii) vericar se existem m ultiplos desse n umero no vetor, e informar a posi c ao de cada um. A sa da do algoritmo deve ser: N umero <n umero digitado> encontra-se na posi c ao <posi c ao desse n umero no vetor>. Depois aparece: M ultiplos de <n umero digitado>: <o m ultiplo do n umero> posi c ao: <posi c ao do m ultiplo>; <outro m ultiplo> posi c ao <a posi c ao do outro m ultiplo>, e assim por diante. Ex: L = [ 7, 3, 1, 14, 24, 21, 5, 9, 14, 4 ] Sa da gerada com a digita c ao de 3 N umero 3 encontra-se na posi c ao 1. M ultiplos de 3: 21 posi c ao 5; 9 posi c ao

26. Jogo de Craps Fa ca um programa de implemente um jogo de Craps. O jogador lan ca um par de dados, obtendo um valor entre 2 e 12. Se, na primeira jogada, voc e tirar 7 ou 11, voc e um naturale ganhou. Se voc e tirar 2, 3 ou 12 na primeira jogada, isto e chamado de crapse voc e perdeu. Se, na primeira jogada, voc e fez um 4, 5, 6, 8, 9 ou 10,este e seu Ponto. Seu objetivo agora e continuar jogando os dados at e tirar este n umero novamente. Voc e perde, no entanto, se tirar um 7 antes de tirar este Ponto novamente.

27. Embaralha palavra Construa uma fun c ao que receba uma string como par ametro e devolva outra string com os carateres embaralhados. As duas string dever ao conter os mesmos caracteres por em, embaralhados... Por exemplo: se a fun c ao receber a palavra python, pode retornar npthyo, ophtyn ou qualquer outra combina c ao poss vel, de forma aleat oria. Padronize em sua fun c ao que todos os caracteres ser ao devolvidos em caixa alta ou caixa baixa, independentemente de como foram digitados. Dica: usar a fun c ao randint da biblioteca random 28. Leet speak generator Leet e uma forma de se escrever o alfabeto latino usando outros s mbolos em lugar das letras, como n umeros por exemplo. A pr opria palavra leet admite muitas varia c oes, como l33t ou 1337. O uso do leet reete uma subcultura relacionada ao mundo dos jogos de computador e internet, sendo muito usada para confundir os iniciantes e armar-se como parte de um grupo. Pesquise sobre as principais formas de traduzir as letras. Depois, fa ca um programa que pe ca uma texto e transforme-o para a graa leet speak. 29. Jogo de Forca Desenvolva um jogo da forca. O programa ter a uma lista de palavras lidas de um arquivo texto e escolher a uma aleatoriamente. O jogador poder a errar 6 vezes antes de ser enforcado. 30. Torres de Hanoi S ao dados n discos de di ametro 1, 2, ..., n dispostos por ordem decrescente de di ametro num de 3 postes. Encontre um algoritmo (recursivo) que transfere todos os discos para um dos outros postes, utilizando o menor n umero de movimentos, de tal modo que as seguintes restri c oes sejam satisfeitas: (a) apenas um disco pode ser movido de cada vez, (b) apenas se podem mover os discos do topo (isto e, apenas discos que n ao t em um outro disco colocado em cima), (c) nenhum disco pode ser colocado sobre outro menor. Para aprofundamentos, consultar o texto da Professar Ros alia Rodrigues http://sweet.ua.pt/rosalia/cadeiras/TAD/THpaper.pdf por exemplo.

You might also like