MAC2166 - Introdução à Computação

01/04/2014 - 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]:
 
x = int(input("Digite um número: "))  # Considere que o número digitado foi 10
if x > 0:
    print(x, "é um número positivo.")
    
print("Tchau!")
10 é 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]:
 
x = int(input("Digite um número: "))  # Considere que o número digitado foi -10
if x > 0:
    print(x, "é um número positivo.")
else:
    print(x, "NÃO é um número positivo.")
    
print("Tchau!")
-10 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 a seguir:

In [6]:
 
print("Iniciando contagem:")
for i in range(5):
    print(i)
print("Bum!")
Iniciando contagem:
0
1
2
3
4
Bum!

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

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

Problema 4

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 [7]:
 
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")
 

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 [8]:
 
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")

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. Entretando, 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]:
 
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")

Problema 5

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 [10]:
 
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)

É 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 6

Dado um número natural na base binária, transformá-lo para a base decimal.

Exemplo:

Dado 10010, a saída será 18, pois 1 × 24 + 0 × 23 + 0 × 22 + 1 × 21 + 0 × 20 = 18.

Obs.: Esse exercício corresponde ao exercício 16 da lista de exercícios sobre inteiros.

Solução

In [10]:
 
n = n_binario = int(input("Digite o número na base binária: "))   # Considere que o número digitado foi o 10010
n_decimal = 0
pot2 = 1
while n > 0:
    digito_binario = n % 10
    n = n // 10
    
    n_decimal = n_decimal + digito_binario * pot2
    pot2 = pot2 * 2
    
print("O número decimal correspondente ao número binário", n_binario, "é o", n_decimal)

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 %

Referências e outros materiais para estudo