xMAC2166 - Introdução à Computação
x01/04/2014 - Aula 3
xOperador de divisão inteira: //
xO operador // realiza a divisão inteira de dois números.
Veja um exemplo a seguir.
minutos = 252
horas = minutos // 60
print(minutos, "minutos contêm", horas, "horas completas")
252 minutos contêm 4 horas completas
xOperador de resto de divisão inteira: %
xO operador % devolve o resto da divisão inteira entre dois números.
Veja exemplos de uso a seguir:
resto = 13 % 5
print(resto)
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
xComandos para a execução condicional: if - else
xComandos 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.
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!
xA 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:
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!
xCriação de laços com o comando for e a função range
xNa 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:
print("Iniciando contagem:")
for i in range(5):
print(i)
print("Bum!")
Iniciando contagem: 0 1 2 3 4 Bum!
xUsando while, o programa acima ficaria duas linhas mais longo:
print("Iniciando contagem:")
i = 0
while i < 5 :
print(i)
i = i + 1
print("Bum!")
Iniciando contagem: 0 1 2 3 4 Bum!
xProblema 4
xDados 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.
xSolução 1
xNessa primeira solução apresentada, exercitaremos o uso do operador % e do comando if:
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")
xUm 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).
xSolução 2
xNessa segunda solução, exercitaremos o uso do else:
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")
xNo 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.
xSolução 3
xNa Solução 3, substituiremos o laço while usado nas duas soluções anteriores por um laço for + range:
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")
xProblema 5
xDados 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
xSolução
xNessa solução, mais uma vez exercitamos o uso dos operadores // e %, e do comando if:
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)
xÉ 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.
xProblema 6
xDado 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.
xSolução
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)
xTópicos vistos na Aula 3
x- Execução condicional
if - Execução alternativa
if-else - Operador de divisão inteira
// - Operador de resto de divisão inteira
%
xReferências e outros materiais para estudo
x- Computer Science Circles >> http://cscircles.cemc.uwaterloo.ca/
- Think Python - How to Think Like a Computer Scientist >> http://www.greenteapress.com/thinkpython/thinkpython.html
- Projeto MacMulti - Listas de exercícios (Introdução à Computação) >> http://www.ime.usp.br/~macmulti/exercicios/
