Lista 3 - Estruturas elementares em Python

Variáveis e tipos

  1. Escolha um tipo de variável adequado para armazenar as seguintes informações:

    a) A idade de uma pessoa.

    b) A quantidade de chuva média no mês de fevereiro.

    c) O tamanho do seu quintal.

    d) O número de estrelas do universo.

  2. Faça um programa que leia um número real x e calcule o valor de $f(x) = \sqrt{x + (x/2) + x^x}$.

  3. Faça um programa que leia dois valores inteiros nas variáveis x e y e troque o conteúdo das variáveis.

  4. Faça um programa que leia o valor da base e altura de um triângulo e calcule o valor da sua área.

  5. Faça um programa que leia os valores correspondentes aos três lados $a$, $b$ e $c$ de um triângulo. O programa deve então calcular a área A do triângulo utilizando a fórmula de Herão:

    $$ A = \sqrt{s(s − a)(s − b)(s − c)} $$

    onde $s = \frac{a + b + c}{2}$ é semiperímetro.

  6. Faça um programa que lê o raio de um disco e imprime sua área e seu perímetro.

  7. Escreva um programa que leia um número real $x$ e imprima o terceiro dígito antes e depois da vírgula da raiz quadrado do número lido (ex., para $x = 12345678$, temos $\sqrt{12345678}=3513{,}641700572…$, então o terceiro antes da vírgula é $5$ e o terceiro depois da vírgula é $1$.

    Entrada:

    12345678
    

    Saída:

    5 1
    
  8. Faça um algoritmo que dados os 4 elementos de uma matriz 2×2. Calcule e escreva o valor do determinante desta matriz.

    $$ \left| \begin{array}{cc} a11 & a12\\
    a21 & a22 \end{array} \right| = a11 \cdot a22 − a21 \cdot a12 $$

  9. Uma locadora de charretes cobra R$ 10,00 de taxa para cada três horas de uso e R$5,00 para cada hora restante abaixo de três horas. Faça um algoritmo que, dada a quantidade de horas que a charrete foi usada, calcule e escreva o quanto o cliente deve pagar.

  10. Faça um algoritmo que leia a idade de uma pessoa expressa em anos, meses e dias e mostre-a expressa apenas em dias.

  11. Faça um algoritmo que leia o tempo de duração de um evento expresso em segundos e mostre-o expresso em horas, minutos e segundos.

  12. Pedro comprou um saco de ração com peso em quilos. Ele possui dois gatos, para os quais fornece a quantidade de ração em gramas. Os gatos recebem quantidades diferentes de ração. A quantidade diária de ração fornecida para cada gato é sempre a mesma. Faça um algoritmo que receba o peso do saco de ração e a quantidade de ração fornecida para cada gato, calcule e mostre quanto restará de ração no saco após cinco dias.

Execução condicional

  1. Faça um programa que lê dois números do teclado e em seguida um caractere que representa uma operação: +, −, ∗, /. Seu programa então deve imprimir o resultado da operação.

  2. Faça um algoritmo que leia um dado número X inteiro e verifique se esse número é divisível por 3 e 5 simultaneamente.

  3. O número $3025$ possui a seguinte propriedade:

    $$ 30+25 = 55 \mbox{ e } 55^2 = 3025. $$

    Faça um algoritmo que leia um número de 4 dígitos e mostre se esse número tem essa propriedade ou não.

  4. Escreva um programa que lê um número inteiro do teclado e imprime “sim” se o número for par e maior do que 10, ou for ímpar e menor do que 50. Caso contrário, o programa deve imprimir “não”.

    a) Primeiro, escreva uma versão em que não são utilizados operadores lógicos.

    b) Depois, simplifique utilizando operadores lógicos.

  5. Defina grande par um número inteiro maior que 100 que é o dobro de um número ímpar. Escreva um programa que leia um número e imprime “sim” quando ele for grande par e, “não” caso contrário. Escreva um programa mais simples que conseguir.

  6. Escreva um programa que ordene três números.

    a) Escreva duas versões para o programa acima: uma sem utilizar operadores lógicos e outra utilizando operadores lógicos.

    b) Depois responda: existem problemas que não podem ser resolvidos sem utilizar operadores lógicos, mesmo estando disponíveis estruturas condicionais?

  7. Faça um algoritmo que, dados os lados de um triângulo $a$, $b$ e $c$, diga se ele é um triângulo equilátero, isósceles ou escaleno

  8. Faça um algoritmo que, dados os lados de um triângulo $a$, $b$ e $c$, diga se ele é retângulo (se $a^2 = b^2 + b^2$), obtusângulo (se $a^2 > b^2 + c^2$) ou acutângulo (se $a^2 < b^2 + c^2$).

  9. Faça um algoritmo resolve que recebe coeficientes $a$, $b$ e $c$ e resolve a equação $ax^2 + bx + c = 0$. O programa deve mostrar o valor das raízes e a classificação delas: raiz única, raízes distintas ou raízes imaginárias.

  10. Faça um programa que lê um caractere ’F’ ou ’C’, que indica se o próximo número a ser digitado corresponde a temperatura em Fahrenheit ou Celsius. Em seguida o programa deve ler o valor da temperatura e então imprimir o valor correspondente da temperatura na outra unidade de medida. A fórmula de conversão entre as medidas é $C = 5/9 \cdot (F − 32)$.

  11. Um usuário deseja escolher um tipo de média e calculá-la a partir de 3 números de ponto flutuante. Faça um algoritmo que leia as notas, a opção escolhida pelo usuário e calcule a média desejada entre:

    1. aritmética;
    2. ponderada com pesos 3, 3, 4;
    3. harmônica;
    4. geométrica.
  12. Corrija o programa para que a saída seja consistente com a entrada.

    a = int(input("Digite um número inteiro:"))
    if a % 2 == 0 and a < 100:
        print("O número é par e menor que 100")
    elif a >= 100:
        print("O número é par e maior ou igual a 100")
    if a % 2 == 1 and a < 100:
        print("O número é ímpar e menor que 100")
    elif a >= 100:
        print("O número é ímpar e maior que 100")
    
  13. Faça um programa que leia um ano (valor inteiro) e imprima se ele é bissexto ou não. São bissextos todos os anos múltiplos de 400. Não sendo múltiplo de 400, são bissextos todos os anos múltiplos de 4 mas que não são múltiplos de 100.

  14. Escreva um programa que determina a data cronologicamente maior de duas datas fornecidas pelo usuário. Cada data deve ser fornecida por três valores inteiros onde o primeiro representa um dia, o segundo um mês e o terceiro um ano.

  15. Escreva um programa que lê uma coordenada (x, y) do teclado e imprima como resposta o quadrante em que a coordenada está.

  16. Uma pessoa podia se aposentar pelo INSS caso estivesse em alguma das situações abaixo:

    • É do sexo masculino, possui pelo menos 65 anos e pelo menos 10 anos de contribuição.
    • É do sexo masculino, possui pelo menos 63 anos e pelo menos 15 anos de contribuição.
    • É do sexo feminino, possui pelo menos 63 anos e pelo menos 10 anos de contribuição.
    • É do sexo feminino, possui pelo menos 61 anos e pelo menos 15 anos de contribuição.

    Infelizmente os direitos estão cada vez mais reduzidos e essas regras já não valem mais. Faça um programa que receba o sexo, a idade e o tempo de contribuição e decida se é possível aposentar-se pelas regras acima.

Repetição condicional

  1. Uma pergunta fundamental é um expressão aritmética com dois operandos inteiros não negativos, cujas operações permitidas são soma (+), subtração(-), multiplicação (*) e divisão (/) e que cujo resultado é 42. Escreva um programa que só termine quando o usuário digitar uma pergunta fundamental (um operando, um operador aritmético e outro operando). Dica: você pode ler os dados do teclado com a seguinte instrução:

    operando1, operador, operando2 = input().split()
    operando1 = int(operando1)
    operando2 = int(operando2)
    

    Exemplo de execução:

    Digite uma pergunta fundamental: 2 + 2
    Essa não é uma pergunta fundamental, tente de novo: 1 * 44
    Essa não é uma pergunta fundamental, tente de novo: 0 - 42
    Essa não é uma pergunta fundamental, tente de novo: 84 / 2
    Obrigado!
    
  2. Considere um programa para determinar se uma sequência de $n$ números digitados pelo usuário está ordenada ou não. Implemente um programa usando uma variável contadora.

  3. Lembre-se de que a conversão de graus Fahrenheit para graus Celsius é dada pela fórmula $C = \frac{5}{9}(F - 32)$. Escreva um programa que construa uma tabela de conversão, com graus Celsius variando de 50° a 150° (inclusive).

  4. Um homem está começando a criar coelhos e quer saber quantas parelhas ele terá em $n$ meses. Suponha que no primeiro mês ele compra uma parelha de coelhos jovens. Uma parelha só se reproduz quando adulta e torna-se adulta depois de um mês de vida. A cada mês, uma parelha adulta se reproduz, dando origem a uma outra parelha jovem.

    No primeiro mês, ele terá apenas 1 parelha. No segundo mês, ainda terá apenas 1 parelha. No terceiro mês, ele terá 2 parelhas (uma nova e uma adulta). No quarto mês, ele terá 3 parelhas (uma nova e duas adultas). Os números de parelhas dão origem à chamada sequência de Fibonacci, que tem a seguinte lei de formação:

    $$F_1 = 1, \quad F_2 = 1 \quad\mbox{e}\quad F_{i} = F_{i-1} + F_{i-2}.$$

    Assim,

    $$F = (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …)$$

    a) Escreva um programa que leia um número $n$ e devolva o número de parelhas em $n$ meses.

    b) Modifique o algoritmo anterior, de forma que o programa imprima os 20 primeiros elementos da sequência de Fibonacci.

  5. Faça um programa que imprima um menu de 4 pratos na tela e uma quinta opção para sair do programa. O programa deve imprimir o prato solicitado. O programa deve terminar quando for escolhido a quinta opção.

  6. Faça um programa que lê dois números inteiros positivos $a$ e $b$. Utilizando laços, o seu programa deve calcular e imprimir o valor $a^b$.

  7. Séries:

    a) Faça um programa que lê um número $n$ e que compute e imprima o valor

    $$ \sum_{i=1}^n i. $$

    Na primeira versão, não utilize a fórmula fechada de progressão aritmética. Depois, modifique o programa utilizando uma fórmula fechada para a soma. Qual versão executa mais rapidamente? Por quê?

    b) Agora, faça um programa que lê um número $n$ e imprima os valores da soma

    $$ \sum_{i=1}^j i $$

    para cada valor de $j$ variando de 1 até $n$. Você usaria uma fórmula fechada para imprimir cada elemento da série? Por quê?

Strings

  1. Escreva um programa que lê uma string e imprime “Palíndromo” caso a string seja um palíndromo e “Não é palíndromo” caso contrário. Um palíndromo é uma palavra ou frase, que é igual quando lida da esquerda para a direita ou da direita para a esquerda (presuma que só são usados caracteres minúsculos e sem acentos e que espaços em brancos são ignorados na leitura). Exemplo de palíndromo: saudavel leva duas.

  2. Escreva um programa que imprime uma string até a primeira ocorrência de uma letra

    Entrada:

    gitlab.ic.unicamp.br/ra123456
    /
    

    Saída:

    gitlab.ic.unicamp.br
    
  3. Faça um programa que leia um texto t e uma palavra p e, em seguida, imprima todas as posições onde ocorrem a palavra p em t.

    Entrada:

    t = "Duas bananas e 4 abacates. Não haverá mais bananas.
    p = "bananas"
    

    Saída:

    A palavra ocorre nas posições:
    5
    43
    
  4. Escreva um programa que receba um texto como entrada e um número n de linhas, então imprima o texto em n linhas.

    Entrada:

    O Luiz está assistindo TV.
    3
    

    Saída:

    O Luiz es
    tá assist
    indo TV.
    
  5. Escreva um programa que devolva o tamanho da maior cadeia de 0’s de uma string

    Entrada:

    11111010000011100111
    

    Saída:

    5
    
  6. Escreva um programa que converte os caracteres maiúsculos de uma string para minúsculos e os minúsculos para maiúsculos. Dica: pesquise sobre métodos de string lower() e upper().

    Entrada:

    São Paulo
    

    Saída:

    sÃO pAULO
    

Exercícios criativos

  1. É possível trocar os valores de duas variáveis inteiras x e y sem usar nenhuma outra variável adicional, fazendo apenas operações aritméticas e atribuições. Explique como. Isso, no entanto, nunca é recomendado em programas reais. Você consegue dizer por quê?

  2. Suponha que um filme pode ser classificado como livre, moderado ou violento. O seguinte trecho decide se uma pessoa pode assistir a um filme.

    idade = int(input("Qual sua idade?"))
    classificacao = input("Qual a classificação do filme?")
    acompanhado = input("Você está acompanhado?") == "sim"
    if classificacao == "livre":
        print("sim")
    elif classificacao != "violento" and idade >= 14:
        print("sim")
    elif acompanhado and not idade < 14:
        print("sim")
    elif idade >= 16:
        print("sim")
    else:
        print("não")
    

    Utilizando os teoremas de De Morgan, complete o código seguinte de forma que ele seja equivalente ao trecho anterior. Depois tente simplificar.

    idade = int(input("Qual sua idade?"))
    classificacao = input("Qual a classificação do filme?")
    acompanhado = input("Você está acompanhado?") == "sim"
    if _______________:
        print("não")
    else:
        print("sim")
    
  3. Um capicua é um número palíndromo, i.e., um número decimal que lido da esquerda para a direita é o mesmo que quando lido da direita para a esquerda. Exemplos:

    • 10201
    • 2002
    • 565
    • 99
    • 7

    Faça um algoritmo que leia um número inteiro arbitrário e verifique se esse número é ou não capicua utilizando apenas operações para números inteiros.