MAC2166 - Introdução à Computação (1º Semestre de 2023)

Grande áreas Civil, Mecânica, Química e Petróleo

Guia de Estudos - Semana 6

Tópicos

Antes de sua aula síncrona desta semana, estude os conteúdos abaixo e os materiais recomendados e tente resolver os exercícios. Os assuntos e exercícios serão discutidos pelo(a) professor(a) na aula.



Funções

Veja a videoaula do prof. Fabio Kon (IME-USP) sobre Funções:

Uma função é uma unidade de código de programa autônoma desenhada para cumprir uma tarefa particular.

A chamada de uma função desvia a execução do código para o corpo da função (bloco de código da função):

chamada_funcao

Motivação:

Exemplo 1: Coeficiente binomial

Exemplo 2: Fórmula de Bhaskara


Exercícios

Problema 1:

  1. Escreva a função fatorial(n) que recebe um inteiro n e devolve o fatorial de n.

  2. Escreva uma função que recebe dois inteiros n e k e calcula o coeficiente binomial, do número n, na classe k, isto é, o número de combinações de n termos, k a k, dado por n!/(k!(n-k)!). Escreva essa função usando a função fatorial(n) do item anterior.

  3. Faça um programa que lê um número inteiro n, com n > 0, e que imprime o Triângulo de Pascal com n linhas.

    Exemplo: para n = 5, o programa deve escrever:

    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1

  4. Clique aqui para saber o que é o Triângulo de Pascal.

Solução:

    def fatorial(n):
        fat = 1
        i = 2
        while i <= n:
            fat *= i
            i += 1
        return fat

    def binomial(n,k):
        return fatorial(n)//(fatorial(k)*fatorial(n-k))

    def main():
        print("Triângulo de Pascal")
        n = int(input("Digite o número de linhas: "))
        i = 0
        while i < n:
            j = 0
            while j <= i:
                b = binomial(i,j)
                print("%3d "%b,end="")
                j+= 1
            print()
            i += 1

    main()
    

Problema 2:

Faça um programa que lê um número inteiro n, com n > 0, e para cada número entre 1 e n indica se ele é soma de dois primos.

Por exemplo, para n = 8 o programa deve escrever

1 não é soma de primos
2 não é soma de primos
3 não é soma de primos
4 é soma dos primos 2 e 2
5 é soma dos primos 2 e 3
6 é soma dos primos 3 e 3
7 é soma dos primos 2 e 5
8 é soma dos primos 3 e 5

Solução:


    def primo(n):
        div = 2
        ehprimo = True
        while div < n:
            if n % div == 0:
                ehprimo = False
            div += 1
        if n <= 1:
            ehprimo = False
        return ehprimo

    def main():
        n = int(input("Digite n: "))
        i = 1
        while i <= n:
            encontrou = False
            j = 2
            while j < i and not encontrou:
                if primo(j) and primo(i-j):
                    encontrou = True
                    p1 = j
                    p2 = i-j
                j += 1
            if encontrou:
                print("%d é soma dos primos %d e %d"%(i,p1,p2))
            else:
                print("%d não é soma de primos"%i)
            i += 1

    main()
    

Problema 3:

Em Python, existem várias funções matemáticas prontas do módulo math. Um exemplo de função desse módulo é a factorial, que calcula o fatorial de um número. Para usar uma função do módulo math, devemos primeiramente importar o módulo no código, usando o comando import math, e depois chamar a função. O exemplo abaixo mostra uma chamada à função factorial.

      import math
      n = int(input("Digite o valor de n: "))
      fat = math.factorial(n)
      print("Fatorial de",n,"é",fat)
    

  1. Usando a função math.sqrt(x) do módulo de matemática da linguagem Python (import math), escreva uma função que recebe as coordenadas cartesianas de dois pontos no plano e devolve a distância entre os pontos.

  2. Faça um programa que lê um ponto origem (x0, y0) e uma sequência de n > 1 pontos e determina o ponto mais próximo do ponto origem.

Solução:

    import math

    def distancia(x1,y1,x2,y2):
        return math.sqrt((x2-x1)**2 + (y2-y1)**2)

    def main():
        print("Digite as coordenadas do ponto de origem", end="")
        x0 = float(input("x: "))
        y0 = float(input("y: "))

        n = int(input("Digite a quantidade de pontos: "))

        print("Digite as coordenadas de um novo ponto", end="")
        x_menor = float(input("x: "))
        y_menor = float(input("y: "))
        menor_distancia = distancia(x_menor,y_menor,x0,y0)

        while n>1:
            print("Digite as coordenadas de um novo ponto", end="")
            x = float(input("x: "))
            y = float(input("y: "))

            d = distancia(x,y,x0,y0)
            if  d < menor_distancia:
                x_menor = x
                y_menor = y
                menor_distancia = d

            n -= 1

        print("O ponto mais próximo de (%.2f,%.2f) é (%.2f,%.2f)" %(x0,y0,x_menor,y_menor))

    main()
    

Problema 4:

Escreva uma função que recebe dois inteiros positivos e que calcula o máximo divisor comum (MDC) entre eles usando o algoritmo de Euclides.

O MDC de dois números inteiros é o maior número inteiro que divide ambos sem deixar resto.

Exemplos:

Algoritmo de Euclides: Para dois números A e B:

  1. Se A ≥ B: MDC(A,B) = MDC(A-B, B) = MDC(A%B, B) = MDC(B, A%B)
  2. Se A < B: MDC(A,B) = MDC(B,A)
A repetição deste processo irá gerar sucessivamente números menores, até convergir em zero. Nesse momento, o MDC é o outro número inteiro, maior que zero.


Solução:

      def MDC(a, b):
          if a < b:
              a,b = b,a
          while b > 0:
              r = a % b
              a = b
              b = r
          return a

      def main():
          print("MDC entre a e b:")
          a = int(input("Digite a: "))
          b = int(input("Digite b: "))
          print("MDC =", MDC(a,b))

      main()
    

Problema 5:

Dados um número inteiro n>0 e uma sequência com n números inteiros maiores do que zero, determinar o máximo divisor comum entre eles. Por exemplo, para a entrada

    3 42 30 105
    
o seu programa deve escrever o número 3.

DICA: O MDC é uma operação associativa.

Exemplo: MDC(A,B,C,D) = MDC(MDC(A,B),C,D) = MDC(MDC(MDC(A,B),C),D)


Solução:

      def MDC(a, b):
          if a < b:
              a,b = b,a
          while b > 0:
              r = a % b
              a = b
              b = r
          return a

      def main():
          n = int(input("Digite n: "))
          mdc = int(input("Digite o primeiro número: "))
          i = 1
          while i < n:
              num = int(input("Digite o próximo número: "))
              a = mdc
              b = num
              mdc = MDC(a, b)
              i += 1
          print("MDC =",mdc)

      main()