MAC2166 - Introdução à Computação

21/03/2017 - Aula 3

Operador de divisão inteira: //

O operador // realiza a divisão inteira de dois números.

Veja um exemplo a seguir.

In [1]:
minutos = 252
horas = minutos // 60
print(minutos, "minutos contêm", horas, "horas completas")
252 minutos contêm 4 horas completas

Operador de resto de divisão inteira: %

O operador % devolve o resto da divisão inteira entre dois números.

Veja exemplos de uso a seguir:

In [2]:
resto = 13 % 5
print(resto)
3

In [3]:
minutos = 252
horas = minutos // 60
minutos_excedentes = minutos % 60
print(minutos, "minutos =", horas, "horas e", minutos_excedentes, "minutos")
252 minutos = 4 horas e 12 minutos

Comandos para a execução condicional: if - else

Comandos para a execução condicional dão ao programador a habilidade de verificar condições e mudar o comportamento do programa de acordo com isso.

O comando if é a forma mais simples de se fazer uma execução condicional. Veja o exemplo a seguir.

In [4]:
def main():
    x = int(input("Digite um número: "))
    if x > 0:
        print(x, "é um número positivo.")

    print("Tchau!")
    
#-----
main()
Digite um número: 45
45 é um número positivo.
Tchau!

A expressão lógica depois do if é chamada de condição. Se ela for verdadeira, o bloco de comandos indentados será executado. Se ela for falsa, nenhum comando de dentro do bloco indentado será executado.

Não há um limite para a quantidade de comandos que podem aparecer dentro de um bloco do if, mas sempre deve haver pelo menos um comando no bloco.

Uma segunda forma do comando if é a execução alternativa, ou comando if-else, em que há duas possibilidades de execução e é a condição quem determina qual delas será realizada. Os comandos relacionados a uma das possibilidades aparecem como um bloco indentado do if e serão executados quando a condição for verdadeira. Os comandos da outra possibilidade aparecem como um bloco indentado do else e serão executados quando a condição do if for falsa. Veja um exemplo de uso a seguir:

In [5]:
def main():
    x = int(input("Digite um número: "))
    if x > 0:
        print(x, "é um número positivo.")
    else:
        print(x, "NÃO é um número positivo.")
    
    print("Tchau!")
    
#-----
main()
Digite um número: -45
-45 NÃO é um número positivo.
Tchau!

Criação de laços com o comando for e a função range

Na Aula 2, vimos como usar o comando while para criar laços para executar repetidamente blocos de comandos.

Quando se sabe exatamente quantas vezes é preciso repetir a execução de um bloco, uma alternativa ao uso do while é o uso do comando for combinado à função range. Veja um exemplo de programa que usa o for a seguir:

In [6]:
def main():
    print("Iniciando contagem:")
    for i in range(5):
        print(i)
    print("Bum!")

#-----
main()
Iniciando contagem:
0
1
2
3
4
Bum!

Usando while, o programa acima ficaria duas linhas mais longo:

In [7]:
def main():   
    print("Iniciando contagem:")
    i = 0
    while i < 5 :
        print(i)
        i = i + 1
    print("Bum!")

#-----
main()
Iniciando contagem:
0
1
2
3
4
Bum!

Problema 3.1

Dados um número inteiro n, n > 0, e uma sequência com n números inteiros, determinar quantos números da sequência são pares e quantos são ímpares. Por exemplo, para a sequência

6 -2 7 0 -5 8 4

o seu programa deve escrever o número 4 para o número de pares e 2 para o de ímpares.

Solução 1

Nessa primeira solução apresentada, exercitaremos o uso do operador % e do comando if:

In [8]:
def main():
    n = n_salvo = int(input("Digite o tamanho da sequência: "))    # atribuição múltipla 
    conta_par = 0
    while n > 0:
        num = int(input("Digite um número da sequência: "))
        n = n - 1
        if num % 2 == 0:
            conta_par = conta_par + 1
    print(conta_par,   "números pares")
    print(n_salvo-conta_par, "números ímpares")

#-----
main()
Digite o tamanho da sequência: 5
Digite um número da sequência: 3
Digite um número da sequência: 6
Digite um número da sequência: 8
Digite um número da sequência: 1
Digite um número da sequência: 2
3 números pares
2 números ímpares

Um número é par quando ele é divisível por 2. Isso equivale a dizer que um número é par quando o resto da divisão inteira dele por 2 é zero. No programa acima, a linha que verifica se o número digitado é par é a seguinte:

if num % 2 == 0:

Quando a condição desse if é satisfeita (ou seja, quando o resto da divisão inteira do número por 2 é zero), então a contagem dos números pares é incrementada.

Ao final do programa, teremos que quantidade de números ímpares pode ser obtida subtraindo a quantidade de pares da quantidade total de números lidos como entrada.

Atenção: A primeira linha da Solução 1 acima se trata de um comando de atribuição múltipla. Em uma atribuição desse tipo, uma sequência de variáveis recebe um mesmo valor (o que aparece do lado direito do operador de atribuição = mais à direita no comando).

Solução 2

Nessa segunda solução, exercitaremos o uso do else:

In [9]:
def main():
    n = int(input("Digite o tamanho da sequência: "))
    conta_par = 0
    conta_impar = 0
    while n > 0:
        num = int(input("Digite um número da sequência: "))
        n = n - 1
        if num % 2 == 0:
            conta_par = conta_par + 1
        else:
            conta_impar = conta_impar + 1
    print(conta_par,   "números pares")
    print(conta_impar, "números ímpares")
    
#-----
main()
Digite o tamanho da sequência: 5
Digite um número da sequência: 3
Digite um número da sequência: 6
Digite um número da sequência: 8
Digite um número da sequência: 1
Digite um número da sequência: 2
3 números pares
2 números ímpares

No programa acima, quando a condição do if é satisfeita (ou seja, quando o número lido é divisível por 2), então o contador de pares é incrementado. Entretanto, como esse if possui um comando else associado a ele, quando o número lido não é divisível por 2, o bloco de comandos associado ao else é executado, causando um incremento na contagem de números ímpares.

Solução 3

Na Solução 3, substituiremos o laço while usado nas duas soluções anteriores por um laço for + range:

In [10]:
def main():
    n = int(input("Digite o tamanho da sequência: "))
    conta_par = 0
    conta_impar = 0
    for i in range(n): 
        num = int(input("Digite um número da sequência: "))
        if num % 2 == 0:
            conta_par = conta_par + 1
        else:
            conta_impar = conta_impar + 1
    print(conta_par, "números pares")
    print(conta_impar, "números ímpares")

#-----
main()
Digite o tamanho da sequência: 5
Digite um número da sequência: 3
Digite um número da sequência: 6
Digite um número da sequência: 8
Digite um número da sequência: 1
Digite um número da sequência: 2
3 números pares
2 números ímpares

Problema 3.2

Dados um número inteiro n, n > 0, e um dígito d (0 ≤ d ≤ 9), determinar quantas vezes d ocorre em n.

Exemplo 1:

Digite o valor de n (n > 0): 63543 Digite o valor de d (0<=d<=9): 3 O dígito 3 ocorre 2 vezes em 63543

Exemplo 2:

Digite o valor de n (n > 0): 0 Digite o valor de d (0<=d<=9): 0 O dígito 0 ocorre 0 vezes em 0

Exemplo 3:

Digite o valor de n (n > 0): 0110 Digite o valor de d (0<=d<=9): 0 O dígito 0 ocorre 1 vezes em 110

Solução

Nessa solução, mais uma vez exercitamos o uso dos operadores // e %, e do comando if:

In [11]:
def main():
    n = int(input("Digite o valor de n (n > 0): "))
    d = int(input("Digite o valor de d (0<=d<=9): "))
    conta_digito = 0
    n_salvo = n
    while n > 0:
        dig = n % 10
        n = n // 10
        if dig == d:
            conta_digito = conta_digito + 1

    print("O dígito", d, "ocorre", conta_digito, "vezes em ", n_salvo)

#-----
main()
Digite o valor de n (n > 0): 63543
Digite o valor de d (0<=d<=9): 3
O dígito 3 ocorre 2 vezes em  63543

É importante observar que, nessa solução, os operadores % e // estão sendo usados para "descascar" um número inteiro (ou seja, para obter cada um dos seus dígitos separadamente).

Se n é um número na base decimal, o resultado da operação n % 10 é o dígito menos significativo de n, ao passo que o operação n // 10 devolve como resultado o próprio n sem o seu dígito menos significativo.

Problema Extra

Dizemos que um número inteiro positivo é triangular se ele é o produto de três números inteiros consecutivos. Por exemplo, 120 é triangular, pois 4 × 5 × 6 é igual a 120.

Dado um número inteiro positivo n, verificar se n é triangular.

Obs.: Este problema corresponde ao exercício 10 da lista de exercícios sobre inteiros.

Solução

In [13]:
'''
Programa que lê um inteiro positivo n e imprime uma mensagem
indicando se ele é ou não triangular
'''
def main():
    print("Determina se um número n é triangular\n")

    # leia o valor de n
    n = int(input("Digite o valor de n: "))

    i = 1
    while i * (i+1) * (i+2) < n:
        i = i + 1

    if i * (i+1) * (i+2) == n:
        print("%d é o produto %d*%d*%d" %(n,i,i+1,i+2))
    else:
        print("%d não é triangular" %(n))

#----------
main()
Determina se um número n é triangular

Digite o valor de n: 120
120 é o produto 4*5*6

Tópicos vistos na Aula 3

  • Execução condicional if
  • Execução alternativa if-else
  • Operador de divisão inteira //
  • Operador de resto de divisão inteira %