Aula Prática 2 - Variáveis e Estruturas de Controlo

O objetivo desta aula é experimentar a definição de funções envolvendo algoritmos simples, utilizando variáveis e estruturas de controlo. Após a realização da prática, deverá ter sido adquirida uma noção básica dos seguintes conceitos:

  • Variável dos tipos básicos int, float, bool
  • Instrução de atribuição: ... = ...
  • Estrutura de seleção: if
  • Estrutura de repetição: while
  • Bloco de instruções

Tal como na prática anterior, será necessário criar um projeto. Uma boa forma de organizar os exercícios das práticas é criar um projeto por cada aula prática.

Trabalho prévio

Desenvolva um módulo com funções que permitam:

1. Obter o máximo entre dois números.

Exemplo:

    maximum(7, 9) → 9 

2. Verificar se um número é múltiplo de um outro número, sem recurso ao operador de resto da divisão (%).

Exemplo:

    is_multiple(25, 5) → True
In [1]:
def maximum(a, b):
    if a < b:
        return b
    else:
        return a
In [3]:
def is_multiple(a, b):
    resto = a
    divisor = b
    while resto >= divisor:
        resto = resto - divisor
    return resto == 0
In [4]:
def is_multiple(a, b):
    return a/b == int(a/b)

Exercícios

Defina funções que permitam:

1. Obter o valor absoluto de um número.

Exemplos:

    absolute(-2) → 2 
    absolute(4) → 4 
In [3]:
def absolute(x):
    if x < 0:
        return -x
    return x
In [4]:
absolute(-2)
Out[4]:
2

2. Obter o quociente da divisão inteira, sem recorrer ao operador de divisão inteira (//).

Exemplos:

    divide(31, 5) → 6
    divide(35, 7) → 5
In [1]:
def divide(a, b):
    resto = a
    quociente = 0
    while resto > b:
        resto = resto - b
        quociente = quociente + 1
    return quociente
In [2]:
divide(31, 5)
Out[2]:
6

3. Obter uma potência de 2, i.e. 2n (sem usar o operador **), dado o expoente num argumento que se assume ser um número natural n (diferente de zero).

Exemplo:

    power_of_two(4) → 16
    power_of_two(8) → 256
In [11]:
def power_of_two(n):
    power = 1
    i = 0
    while i != n:
        power = power*2
        i = i + 1
    return power
In [12]:
power_of_two(8)
Out[12]:
256

4. Obter o somatório dos números naturais até um dado n.

Exemplo:

    sum_of_naturals_up_to(5) → 15     (1 + 2 + 3 + 4 + 5)
In [15]:
def sum_of_naturals_up_to(n):
    total = 0
    i = 1
    while i != n + 1:
        total = total + i
        i = i + 1
    return total
In [16]:
def sum_of_naturals_up_to(n):
    return (n + 1)*n//2

5. Obter o somatório dos números naturais pares compreendidos num dado intervalo fechado.

Exemplo:

    sum_of_even_numbers_between(3, 8) → 18     (4 + 6 + 8)
In [3]:
def sum_of_even_numbers_between(a, b):
    soma = 0
    if a%2 == 0:
        i = a
    else:
        i = a + 1
    while i <= b + 1:
        soma = soma + i
        i = i + 2
    return soma
In [4]:
sum_of_even_numbers_between(3, 8)
Out[4]:
18

6. Obter o primeiro algarismo da representação decimal de um número inteiro.

Exemplos:

    first_digit(2011) → 2
    first_digit(1998) → 1
In [18]:
def first_digit(n):
    while n >= 10:
        n = n // 10
    return n
In [19]:
def first_digit(n):
    digit = n
    while digit//10 != 0:
        digit = digit//10
    return digit
In [20]:
first_digit(2020)
Out[20]:
2

7. Obter o n-ésimo número da sequência de Fibonacci, considerando que o primeiro número da sequência tem número de ordem zero.

Recorde que os primeiros números da sequência de Fibonacci são 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
Exemplo:

    fibonacci(7) → 13
In [5]:
def fibonacci(n):
    a1 = 0
    a2 = 1
    a3 = 1
    i = 0
    while i < n:
        a1 = a2
        a2 = a3
        a3 = a1 + a2
        i = i + 1
    return a1
In [6]:
fibonacci(7)
Out[6]:
13

Exercícios extra

8. Defina uma função que recebe como argumento dois números naturais m e n e que calcula o máximo divisor comum desses dois números, usando o algoritmo de Euclides.

Exemplo:

    gcd(25, 30) → 5 
In [ ]: