Você está na página 1de 16

Instituto de Computação Universidade Estadual de Campinas

Questão Nota
MC102—Algoritmos e Programação de Computadores 1
2
Prova I 3
Turmas K L M N 4 5 6 7 4
5
Primeiro Semestre de 2018 Total

Nome: RA:

Importante: As respostas deverão ser escritas nos espaços demarcados, opcionalmente a lápis. Não é per-
mitida a consulta a qualquer material, nem o uso de celulares ou outros dispositivos eletrônicos de comu-
nicação/computação. Não se esqueça de indentar corretamente os códigos solicitados. Boa prova!

1. (1 ponto) Maria e Marcos irão viajar e precisam escolher o destino da viagem. A filha deles, Carla, está muito
ansiosa para ir para a praia! O casal percebeu que, para a famı́lia poder viajar, as seguintes condições devem ser
atendidas:

• Maria e Marcos recebem autorização para tirar férias em dezembro.


• Carla não fica em recuperação. Em sua escola, a nota mı́nima para aprovação é 7!
• O 13o salário de Maria ou o 13o salário de Marcos são liberados antes do dia 11 de dezembro.
• O valor total da reserva do hotel e das passagens de avião é igual ou inferior a R$ 10.000.

O quadro a seguir apresenta uma série de cenários possı́veis. Preencha a coluna “Irão Viajar” com SIM ou
NÃO, indicando se para aquela determinada situação a famı́lia irá ou não viajar. Uma resposta errada, exceto se
deixada em branco, anula uma correta.

Notas da Carla Férias Liberação do 13o Valores


Irão Viajar?
Ciências Mat. Port. Maria Marcos Maria Marcos Hotel Passagens
10 10 10 Sim Sim 01/12 01/12 R$ 3.000 R$ 3.500 Sim
9 9 9 Sim Não 05/12 01/12 R$ 4.000 R$ 3.000 Não
8 8 8 Sim Sim 10/12 11/12 R$ 2.150 R$ 7.800 Sim
7 7 7 Não Sim 02/12 09/12 R$ 3.450 R$ 6.250 Não
6.9 7 8 Sim Sim 25/12 03/12 R$ 2.750 R$ 4.250 Não
7 7 7 Sim Sim 12/12 08/12 R$ 4.500 R$ 5.500 Sim
7.5 7.4 7.3 Não Não 02/12 08/12 R$ 5.500 R$ 4.500 Não
6.9 10 10 Sim Sim 04/12 05/12 R$ 1.500 R$ 3.300 Não
9.1 9.2 7.9 Sim Sim 11/12 11/12 R$ 3.200 R$ 4.800 Não
7 7 7.1 Sim Sim 11/12 10/12 R$ 3.208 R$ 6.792 Sim

Notas da Carla na primeira linha facilitam a identificação da versão da prova do aluno.

0.1 por linha da tabela. Uma resposta errada anula uma certa.
2. (1 ponto) Para cada um dos seguintes trechos de código, indique o que será exibido pelo programa:

0.1 por item no bloco superior e 0.2 por item no bloco inferior. Em itens que pedem a impressão de vários
valores, considerar apenas a pontuação se todos os itens estiverem corretos (pela facilidade de se chutar valores bo-
oleanos). Considerar metade do valor se não constar not c no quarto item ou se constarem strings não solicitadas,
mas valores corretos nos outros itens.
n = 10 - 5 * 3 n = 10 - 5 n = 10 // 5 n = 4**2
c = 9 > n c = 9 > n c = 9 > n c = 9 > n
print(n) print(c) print(n, c) print("not c =", not c)

-5 True 2 True not c = True

n = 5 - 10 n = 10 % 2 n = 2 + 3 * 5
c1 = -10 > n c1 = 9 > n r1 = not not True
c2 = -15 > n c2 = 0 > n r2 = not (10 < n or n == 17)
r1 = c1 or c2 r1 = not c1 and c2 c1 = 20 < n or 20 > n and n > 10
r2 = c1 and c2 r2 = c1 or not c2 c2 = n > 0 or 12 <= n and monty python
print(c1, c2) print(c1, c2) print(n, r1, r2)
print(r1, r2) print(r1, r2) print(c1, c2)

False False True False 17 True False


False False False True True True

3. (2 pontos) Maria recebeu a seguinte especificação: Codifique um programa em Python que leia dois números
inteiros do teclado, exibindo Maior se o primeiro número for maior que o segundo, Igual se ambos os números
forem iguais e Menor se o primeiro número for menor que o segundo. Veja o código de Maria e indique:
• uma entrada que ao ser digitada pelo usuário fará com que ∀ float ou str
a = int(input()) o programa apresente erro de execução.
b = int(input()) 0.2 caso apresente um float ou string.
if (a > b):
print("Menor") • dois possı́veis valores a serem digitados pelo usuário que ∀ int x
if (a == b): farão com que o programa exiba na tela a palavra Maior.
print("Maior") 0.4 caso valores sejam coerentes. x
else:
print("Igual") • o que será impresso caso o usuário digite 4 e 3:
Menor Pontuar 0.4 apenas se a resposta
Igual incluir as duas strings
Reescreva o programa seguindo as especificações dadas e utilizando no máximo duas comparações.

a = int(input())
b = int(input())
if (a > b):
print("Maior")
elif (a == b):
print("Igual")
else:
print("Menor")

1.0 se a estrutura if-elif-else foi utilizada corretamente. A critério do corretor, descontar pontuação caso
outros erros tenham sido inseridos.
4. (3 pontos) Mário quer escrever um programa que imprime todos os números ı́mpares entre 10 e 9
1, um por linha. A saı́da esperada por Mário está indicada na tabela ao lado. Ele se lembra que em 7
Python o uso do operador % retorna o resto da divisão de um número por outro. Por exemplo, 5 % 2 5
resulta em 1. Mário escreveu o programa abaixo. O que será impresso quando o código for executado? 3
1

n = 10 10
while (n >= 1): 10
if (n % 2) == 0: 10
print(n) ...
Loop infinito
0.5 pela impressão de pelo menos um 10 e indicação de loop infinito

Sem usar laços (for ou while), escreva um programa que produza a saı́da esperada por Mário utilizando
um único comando print.
print(“9\n7\n5\n3\n1”)
0.5 para sequência de números com \n e 0.2 para sequência de números sem \n. 0.0 caso tenha utilizado mais
de um comando print.

Escreva um programa que produza a saı́da espe- Considere que Mário quer imprimir os números
rada por Mário imprimindo um número a cada múltiplos de 3 de 1 a 11, em ordem crescente, um
iteração em um laço for. por linha. Escreva um programa que produza esta
saı́da imprimindo um número a cada iteração em
um laço while.

for n in range(9, 0, -2) : n = 3


print(n) while (n <= 11):
print(n)
1.0 para for com range correto e passo -2. 0.5 para n += 3
passo -1 e verificação se o número é ı́mpar ou par.
0.0 para código com comando while 1.0 para inicialização e laço correto, com incre-
mento 3. 0.5 para incremento 1 e verificação se
o número é múltiplo de 3. 0.0 para código com
comando for.

Dica: A função range() gera uma lista de números útil para iteração em laços do tipo for. Você pode usá-la
da seguinte forma: range(fim), range(inı́cio, fim) ou range(inı́cio, fim, passo), como exercitado
na tarefa de laboratório 04. Observe os exemplos:

for i in range(2) : for i in range(1,3) : for i in range(3,1,-1) :


print(i) print(i) print(i)

0 1 3
1 2 2
5. (3 pontos) João codificou o programa abaixo. Mário, que é amigo de João, disse que o programa não iria
compilar, já que a lista declarada na linha 1 é composta por inteiros e strings. Apresente uma justificativa se você
concorda com Mário ou indique qual seria a saı́da do programa.

0
1. lista = [0, 1, "Jo~
ao", "Maria"] 1
2. tamanho = len(lista) João
3. for i in range(tamanho): Maria
4. print(lista[i])

0.6 para impressão dos elementos da lista, um elemento por linha. 0.3 para impressão dos elementos da lista,
um ao lado do outro. 0.0 para justificativa.

Mário escreveu uma variação do programa codificado por João. Indique o que será exibido na tela quando o
programa for executado.

1. lista = ["Mário", "Mároi", "Mário", "Maria"]


3
2. for a in lista:
4
3. if (a == "Mário"):
3
4. for n in range(3,5):
4
5. print(n)
Fim
6. print("Fim")

0.6 para impressão de todos os elementos. Para nota parcial cada par 3 4 vale 0.2 e a palavra Fim 0.1. Desconto
de 50% se imprimiu os elementos um ao lado do outro.

Para os dois próximos itens, as caixas de resposta pequenas podem ter induzido as pessoas a não colocar
indentação. Sugiro considerar apenas o range.
Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números inteiros de 50 (inclusive)
a 60 (inclusive).
Linha 4 for i in range(50,61) :

0.4 para linha completa e range correto. 0.2 para limite superior = 60.

Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números pares de 50 (inclusive)
a 60 (inclusive).
Linha 4 for i in range(50,61,2) :

0.4 para linha completa e range correto. 0.2 para limite superior = 60. 0.0 se não apresentou passo 2.

O código abaixo lê uma lista com n nomes. Complete o programa para percorrer esta lista e imprimir quantos
nomes têm mais de 9 caracteres. Dica: a função len(s) retorna o número de caracteres da string s.
n = int(input())
lista = []
for i in range(n) :
lista.append(input())
c = 0
for s in lista :
if len(s) > 9 :
print(s)

1.0 para código correto e completo. 0.0 caso não tenha percorrido corretamente os elementos da lista ou
o tamanho comparado seja um número relativo às outras versões da prova. A critério do corretor, descontar
pontuação caso outros erros tenham sido encontrados.
Instituto de Computação Universidade Estadual de Campinas

Questão Nota
MC102—Algoritmos e Programação de Computadores 1
2
Prova I 3
Turmas K L M N 4 5 6 7 4
5
Primeiro Semestre de 2018 Total

Nome: RA:

Importante: As respostas deverão ser escritas nos espaços demarcados, opcionalmente a lápis. Não é per-
mitida a consulta a qualquer material, nem o uso de celulares ou outros dispositivos eletrônicos de comu-
nicação/computação. Não se esqueça de indentar corretamente os códigos solicitados. Boa prova!

1. (1 ponto) Maria e Marcos irão viajar e precisam escolher o destino da viagem. A filha deles, Carla, está muito
ansiosa para ir para a praia! O casal percebeu que, para a famı́lia poder viajar, as seguintes condições devem ser
atendidas:

• Maria e Marcos recebem autorização para tirar férias em dezembro.


• Carla não fica em recuperação. Em sua escola, a nota mı́nima para aprovação é 7!
• O 13o salário de Maria ou o 13o salário de Marcos são liberados antes do dia 11 de dezembro.
• O valor total da reserva do hotel e das passagens de avião é igual ou inferior a R$ 10.000.

O quadro a seguir apresenta uma série de cenários possı́veis. Preencha a coluna “Irão Viajar” com SIM ou
NÃO, indicando se para aquela determinada situação a famı́lia irá ou não viajar. Uma resposta errada, exceto se
deixada em branco, anula uma correta.

Notas da Carla Férias Liberação do 13o Valores


Irão Viajar?
Ciências Mat. Port. Maria Marcos Maria Marcos Hotel Passagens
10 10 9 Sim Sim 01/12 01/12 R$ 3.000 R$ 3.500 Sim
8 8 8 Sim Sim 10/12 11/12 R$ 2.150 R$ 7.800 Sim
9 9 9 Sim Não 05/12 01/12 R$ 4.000 R$ 3.000 Não
7 7 7 Não Sim 02/12 09/12 R$ 3.450 R$ 6.250 Não
7 7 7 Sim Sim 12/12 08/12 R$ 4.500 R$ 5.500 Sim
6.9 7 8 Sim Sim 25/12 03/12 R$ 2.750 R$ 4.250 Não
7 7 7.1 Sim Sim 11/12 10/12 R$ 3.208 R$ 6.792 Sim
7.5 7.4 7.3 Não Não 02/12 08/12 R$ 5.500 R$ 4.500 Não
6.9 10 10 Sim Sim 04/12 05/12 R$ 1.500 R$ 3.300 Não
9.1 9.2 7.9 Sim Sim 11/12 11/12 R$ 3.200 R$ 4.800 Não

Notas da Carla na primeira linha facilitam a identificação da versão da prova do aluno.

0.1 por linha da tabela. Uma resposta errada anula uma certa.
2. (1 ponto) Para cada um dos seguintes trechos de código, indique o que será exibido pelo programa:

0.1 por item no bloco superior e 0.2 por item no bloco inferior. Em itens que pedem a impressão de vários
valores, considerar apenas a pontuação se todos os itens estiverem corretos (pela facilidade de se chutar valores bo-
oleanos). Considerar metade do valor se não constar not c no quarto item ou se constarem strings não solicitadas,
mas valores corretos nos outros itens.
n = 6 - 2 * 3 n = 10 - 10 n = 10 // 6 n = 2**3
c = 9 == n c = 9 > n c = 2 > n c = 10 > n
print(n) print(c) print(n, c) print("not c =", not c)

0 True 1 True not c = False

n = 20 - 10 n = 11 % 2 n = 3 + 4 * 5
c1 = 19 > n c1 = 1 > n r1 = not not True
c2 = -12 > n c2 = 0 < n r2 = not (20 < n or n == 23)
r1 = c1 or c2 r1 = not c1 and c2 c1 = 30 < n or 20 > n and n > 10
r2 = c1 and c2 r2 = c1 or not c2 c2 = n > 0 or 12 <= n and monty python
print(c1, c2) print(r1, r2) print(n, r1, r2)
print(r1, r2) print(c1, c2) print(c1, c2)

True False True False 23 True False


True False False True False True

3. (2 pontos) Maria recebeu a seguinte especificação: Codifique um programa em Python que leia dois números
inteiros do teclado, exibindo Maior se o primeiro número for maior que o segundo, Igual se ambos os números
forem iguais e Menor se o primeiro número for menor que o segundo. Veja o código de Maria e indique:
• uma entrada que ao ser digitada pelo usuário fará com que
o programa apresente erro de execução. ∀ float ou str
a = int(input()) 0.2 caso apresente um float ou string.
b = int(input())
if (b < a): • dois possı́veis valores a serem digitados pelo usuário que ∀ int x
print("Maior") farão com que o programa exiba na tela a palavra Maior.
elif (b < a): 0.4 caso valores sejam coerentes.
print("Menor") ∀ int y < x
if (a >= b): • o que será impresso caso o usuário digite 13 e 10:
print("Igual") Maior Pontuar 0.4 apenas se a resposta
Menor incluir as duas strings
Igual
Reescreva o programa seguindo as especificações dadas e utilizando no máximo duas comparações.

a = int(input())
b = int(input())
if (a > b):
print("Maior")
elif (a == b):
print("Igual")
else:
print("Menor")

1.0 se a estrutura if-elif-else foi utilizada corretamente. A critério do corretor, descontar pontuação caso
outros erros tenham sido inseridos.
4. (3 pontos) Mário quer escrever um programa que imprime todos os números ı́mpares entre 10 e 11
20, um por linha. A saı́da esperada por Mário está indicada na tabela ao lado. Ele se lembra que em 13
Python o uso do operador % retorna o resto da divisão de um número por outro. Por exemplo, 5 % 2 15
resulta em 1. Mário escreveu o programa abaixo. O que será impresso quando o código for executado? 17
19

n = 11
while (n <= 19):
if (n % 2) == 0: Nada. Loop infinito.
print(n)

0.5 pela indicação de que nada será impresso e loop infinito

Sem usar laços (for ou while), escreva um programa que produza a saı́da esperada por Mário utilizando
um único comando print.
print(“11\n13\n15\n17\n19”)
0.5 para sequência de números com \n e 0.2 para sequência de números sem \n. 0.0 caso tenha utilizado mais
de um comando print.

Escreva um programa que produza a saı́da espe- Considere que Mário quer imprimir os números
rada por Mário imprimindo um número a cada múltiplos de 3 de 10 a 20, em ordem decrescente,
iteração em um laço for. um por linha. Escreva um programa que produza
esta saı́da imprimindo um número a cada iteração
em um laço while.

for n in range(11, 20, 2) : n = 18


print(n) while (n >= 12):
print(n)
1.0 para for com range correto e passo 2. 0.5 para n -= 3
passo 1 e verificação se o número é ı́mpar ou par.
0.0 para código com comando while 1.0 para inicialização e laço correto, com decre-
mento -3. 0.5 para decremento -1 e verificação se
o número é múltiplo de 3. 0.0 para código com
comando for.

Dica: A função range() gera uma lista de números útil para iteração em laços do tipo for. Você pode usá-la
da seguinte forma: range(fim), range(inı́cio, fim) ou range(inı́cio, fim, passo), como exercitado
na tarefa de laboratório 04. Observe os exemplos:

for i in range(2) : for i in range(1,3) : for i in range(3,1,-1) :


print(i) print(i) print(i)

0 1 3
1 2 2
5. (3 pontos) João codificou o programa abaixo. Mário, que é amigo de João, disse que o programa não iria
compilar, já que a lista declarada na linha 1 é composta por inteiros e strings. Apresente uma justificativa se você
concorda com Mário ou indique qual seria a saı́da do programa.

0
1. lista = [0, 2, "Maria", "José"] 2
2. tamanho = len(lista) Maria
3. for i in range(tamanho): José
4. print(lista[i])

0.6 para impressão dos elementos da lista, um elemento por linha. 0.3 para impressão dos elementos da lista,
um ao lado do outro. 0.0 para justificativa.

Mário escreveu uma variação do programa codificado por João. Indique o que será exibido na tela quando o
programa for executado.

1. lista = ["Mário", "Mároi", "Mário", "Maria"]


4
2. for a in lista:
5
3. if (a == "Mário"):
4
4. for n in range(4,6):
5
5. print(n)
Fim
6. print("Fim")

0.6 para impressão de todos os elementos. Para nota parcial cada par 4 5 vale 0.2 e a palavra Fim 0.1. Desconto
de 50% se imprimiu os elementos um ao lado do outro.

Para os dois próximos itens, as caixas de resposta pequenas podem ter induzido as pessoas a não colocar
indentação. Sugiro considerar apenas o range.
Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números inteiros de 6 (inclusive)
a 160 (inclusive).
Linha 4 for i in range(6,161) :

0.4 para linha completa e range correto. 0.2 para limite superior = 160.

Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números pares de 28 (inclusive)
a 56 (inclusive).
Linha 4 for i in range(28,57,2) :

0.4 para linha completa e range correto. 0.2 para limite superior = 56. 0.0 se não apresentou passo 2.

O código abaixo lê uma lista com n nomes. Complete o programa para percorrer esta lista e imprimir quantos
nomes têm 7 ou mais caracteres. Dica: a função len(s) retorna o número de caracteres da string s.
n = int(input())
lista = []
for i in range(n) :
lista.append(input())
c = 0
for s in lista :
if len(s) >= 7 :
print(s)

1.0 para código correto e completo. 0.0 caso não tenha percorrido corretamente os elementos da lista ou
o tamanho comparado seja um número relativo às outras versões da prova. A critério do corretor, descontar
pontuação caso outros erros tenham sido encontrados.
Instituto de Computação Universidade Estadual de Campinas

Questão Nota
MC102—Algoritmos e Programação de Computadores 1
2
Prova I 3
Turmas K L M N 4 5 6 7 4
5
Primeiro Semestre de 2018 Total

Nome: RA:

Importante: As respostas deverão ser escritas nos espaços demarcados, opcionalmente a lápis. Não é per-
mitida a consulta a qualquer material, nem o uso de celulares ou outros dispositivos eletrônicos de comu-
nicação/computação. Não se esqueça de indentar corretamente os códigos solicitados. Boa prova!

1. (1 ponto) Maria e Marcos irão viajar e precisam escolher o destino da viagem. A filha deles, Carla, está muito
ansiosa para ir para a praia! O casal percebeu que, para a famı́lia poder viajar, as seguintes condições devem ser
atendidas:

• Maria e Marcos recebem autorização para tirar férias em dezembro.


• Carla não fica em recuperação. Em sua escola, a nota mı́nima para aprovação é 7!
• O 13o salário de Maria ou o 13o salário de Marcos são liberados antes do dia 11 de dezembro.
• O valor total da reserva do hotel e das passagens de avião é igual ou inferior a R$ 10.000.

O quadro a seguir apresenta uma série de cenários possı́veis. Preencha a coluna “Irão Viajar” com SIM ou
NÃO, indicando se para aquela determinada situação a famı́lia irá ou não viajar. Uma resposta errada, exceto se
deixada em branco, anula uma correta.

Notas da Carla Férias Liberação do 13o Valores


Irão Viajar?
Ciências Mat. Port. Maria Marcos Maria Marcos Hotel Passagens
10 9 10 Sim Sim 01/12 01/12 R$ 3.000 R$ 3.500 Sim
9.1 9.2 7.9 Sim Sim 11/12 11/12 R$ 3.200 R$ 4.800 Não
8 8 8 Sim Sim 10/12 11/12 R$ 2.150 R$ 7.800 Sim
9 9 9 Sim Não 05/12 01/12 R$ 4.000 R$ 3.000 Não
7 7 7 Não Sim 02/12 09/12 R$ 3.450 R$ 6.250 Não
7 7 7 Sim Sim 12/12 08/12 R$ 4.500 R$ 5.500 Sim
6.9 7 8 Sim Sim 25/12 03/12 R$ 2.750 R$ 4.250 Não
7.5 7.4 7.3 Não Não 02/12 08/12 R$ 5.500 R$ 4.500 Não
7 7 7.1 Sim Sim 11/12 10/12 R$ 3.208 R$ 6.792 Sim
6.9 10 10 Sim Sim 04/12 05/12 R$ 1.500 R$ 3.300 Não

Notas da Carla na primeira linha facilitam a identificação da versão da prova do aluno.

0.1 por linha da tabela. Uma resposta errada anula uma certa.
2. (1 ponto) Para cada um dos seguintes trechos de código, indique o que será exibido pelo programa:

0.1 por item no bloco superior e 0.2 por item no bloco inferior. Em itens que pedem a impressão de vários
valores, considerar apenas a pontuação se todos os itens estiverem corretos (pela facilidade de se chutar valores bo-
oleanos). Considerar metade do valor se não constar not c no quarto item ou se constarem strings não solicitadas,
mas valores corretos nos outros itens.
n = 12 - 7 * 2 n = 20 + 20 n = 19 // 6 n = 10**2
c = 9 < n c = 40 >= n c = 10 > n c = 10 > n
print(n) print(c) print(n, c) print("not c =", not c)

-2 True 3 True not c = True

n = 15 + 12 n = 12341 % 2 n = 20 - 4 * 4
c1 = 30 > n c1 = 10 > n r1 = not not False
c2 = 50 > n c2 = 1 == n r2 = not (5 < n or n == 4)
r1 = c1 or c2 r1 = not c1 and c2 c1 = 100 < n or 20 > n and n > 10
r2 = c1 and c2 r2 = c1 or not c2 c2 = n > 0 or 23 <= n and monty python
print(c1, c2) print(c1, c2) print(n, r1, r2)
print(r1, r2) print(r1, r2) print(c1, c2)

True True True True 4 False False


True True False True False True

3. (2 pontos) Maria recebeu a seguinte especificação: Codifique um programa em Python que leia dois números
inteiros do teclado, exibindo Maior se o primeiro número for maior que o segundo, Igual se ambos os números
forem iguais e Menor se o primeiro número for menor que o segundo. Veja o código de Maria e indique:
• uma entrada que ao ser digitada pelo usuário fará com que ∀ float ou str
a = int(input()) o programa apresente erro de execução.
b = int(input()) 0.2 caso apresente um float ou string.
if (a <= b):
print("Maior") • dois possı́veis valores a serem digitados pelo usuário que ∀ int x
elif (a >= b): farão com que o programa exiba na tela a palavra Igual.
print("Igual") 0.4 caso valores sejam coerentes. y<x
if (a == b):
print("Menor") • o que será impresso caso o usuário digite 25 e 25:
Maior Pontuar 0.4 apenas se a resposta
Menor incluir as duas strings
Reescreva o programa seguindo as especificações dadas e utilizando no máximo duas comparações.

a = int(input())
b = int(input())
if (a > b):
print("Maior")
elif (a == b):
print("Igual")
else:
print("Menor")

1.0 se a estrutura if-elif-else foi utilizada corretamente. A critério do corretor, descontar pontuação caso
outros erros tenham sido inseridos.
4. (3 pontos) Mário quer escrever um programa que imprime todos os números pares de 1 a 11, em
ordem decrescente, um por linha. A saı́da esperada por Mário está indicada na tabela ao lado. Ele 10
se lembra que em Python o uso do operador % retorna o resto da divisão de um número por outro. 8
Por exemplo, 5 % 2 resulta em 1. Mário escreveu o programa abaixo. O que será impresso quando o 6
código for executado? 4
2

n = 11 11
while (n > 1): 11
if (n % 2) == 1: 11
print(n) ...
Loop infinito
0.5 impressão de pelo menos um número 11 e indicação de loop infinito

Sem usar laços (for ou while), escreva um programa que produza a saı́da esperada por Mário utilizando
um único comando print.
print(“10\n8\n6\n4\n2”)
0.5 para sequência de números com \n. 0.2 para sequência de números sem \n. 0.0 caso tenha utilizado mais
de um comando print.

Escreva um programa que produza a saı́da espe- Considere que Mário quer imprimir os números
rada por Mário imprimindo um número a cada múltiplos de 3 de 11 a 22, em ordem crescente, um
iteração em um laço for. por linha. Escreva um programa que produza esta
saı́da imprimindo um número a cada iteração em
um laço while.

for n in range(10, 1, -2) : n = 12


print(n) while (n < 22):
print(n)
1.0 para for com range correto e passo -2. 0.5 para n += 3
passo -1 e verificação se o número é ı́mpar ou par.
0.0 para código com comando while 1.0 para inicialização e laço correto, com incre-
mento 3. 0.5 para incremento 1 e verificação se
o número é múltiplo de 3. 0.0 para código com
comando for.

Dica: A função range() gera uma lista de números útil para iteração em laços do tipo for. Você pode usá-la
da seguinte forma: range(fim), range(inı́cio, fim) ou range(inı́cio, fim, passo), como exercitado
na tarefa de laboratório 04. Observe os exemplos:

for i in range(2) : for i in range(1,3) : for i in range(3,1,-1) :


print(i) print(i) print(i)

0 1 3
1 2 2
5. (3 pontos) João codificou o programa abaixo. Mário, que é amigo de João, disse que o programa não iria
compilar, já que a lista declarada na linha 1 é composta por inteiros e strings. Apresente uma justificativa se você
concorda com Mário ou indique qual seria a saı́da do programa.

0
1. lista = [0, -1, "Pedro", "Maria"] -1
2. tamanho = len(lista) Pedro
3. for i in range(tamanho): Maria
4. print(lista[i])

0.6 para impressão dos elementos da lista, um elemento por linha. 0.3 para impressão dos elementos da lista,
um ao lado do outro. 0.0 para justificativa.

Mário escreveu uma variação do programa codificado por João. Indique o que será exibido na tela quando o
programa for executado.

1. lista = ["Mário", "Mároi", "Mário", "Maria"]


5
2. for a in lista:
6
3. if (a == "Mário"):
5
4. for n in range(5,7):
6
5. print(n)
Fim
6. print("Fim")

0.6 para impressão de todos os elementos. Para nota parcial cada par 5 6 vale 0.2 e a palavra Fim 0.1. Desconto
de 50% se imprimiu os elementos um ao lado do outro.

Para os dois próximos itens, as caixas de resposta pequenas podem ter induzido as pessoas a não colocar
indentação. Sugiro considerar apenas o range.
Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números inteiros de 22 (inclusive)
a 39 (inclusive).
Linha 4 for i in range(22,40) :

0.4 para linha completa e range correto. 0.2 para limite superior = 39.

Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números ı́mpares de 29 (inclusive)
a 97 (inclusive).
Linha 4 for i in range(29,98,2) :

0.4 para linha completa e range correto. 0.2 para limite superior = 97. 0.0 se não apresentou passo 2.

O código abaixo lê uma lista com n nomes. Complete o programa para percorrer esta lista e imprimir quantos
nomes têm mais de 5 caracteres. Dica: a função len(s) retorna o número de caracteres da string s.
n = int(input())
lista = []
for i in range(n) :
lista.append(input())
c = 0
for s in lista :
if len(s) > 5 :
print(s)

1.0 para código correto e completo. 0.0 caso não tenha percorrido corretamente os elementos da lista ou
o tamanho comparado seja um número relativo às outras versões da prova. A critério do corretor, descontar
pontuação caso outros erros tenham sido encontrados.
Instituto de Computação Universidade Estadual de Campinas

Questão Nota
MC102—Algoritmos e Programação de Computadores 1
2
Prova I 3
Turmas K L M N 4 5 6 7 4
5
Primeiro Semestre de 2018 Total

Nome: RA:

Importante: As respostas deverão ser escritas nos espaços demarcados, opcionalmente a lápis. Não é per-
mitida a consulta a qualquer material, nem o uso de celulares ou outros dispositivos eletrônicos de comu-
nicação/computação. Não se esqueça de indentar corretamente os códigos solicitados. Boa prova!

1. (1 ponto) Maria e Marcos irão viajar e precisam escolher o destino da viagem. A filha deles, Carla, está muito
ansiosa para ir para a praia! O casal percebeu que, para a famı́lia poder viajar, as seguintes condições devem ser
atendidas:

• Maria e Marcos recebem autorização para tirar férias em dezembro.


• Carla não fica em recuperação. Em sua escola, a nota mı́nima para aprovação é 7!
• O 13o salário de Maria ou o 13o salário de Marcos são liberados antes do dia 11 de dezembro.
• O valor total da reserva do hotel e das passagens de avião é igual ou inferior a R$ 10.000.

O quadro a seguir apresenta uma série de cenários possı́veis. Preencha a coluna “Irão Viajar” com SIM ou
NÃO, indicando se para aquela determinada situação a famı́lia irá ou não viajar. Uma resposta errada, exceto se
deixada em branco, anula uma correta.

Notas da Carla Férias Liberação do 13o Valores


Irão Viajar?
Ciências Mat. Port. Maria Marcos Maria Marcos Hotel Passagens
9 10 10 Sim Sim 01/12 01/12 R$ 3.000 R$ 3.500 Sim
9 9 9 Sim Não 05/12 01/12 R$ 4.000 R$ 3.000 Não
7 7 7 Não Sim 02/12 09/12 R$ 3.450 R$ 6.250 Não
8 8 8 Sim Sim 10/12 11/12 R$ 2.150 R$ 7.800 Sim
7 7 7 Sim Sim 12/12 08/12 R$ 4.500 R$ 5.500 Sim
6.9 7 8 Sim Sim 25/12 03/12 R$ 2.750 R$ 4.250 Não
7.5 7.4 7.3 Não Não 02/12 08/12 R$ 5.500 R$ 4.500 Não
7 7 7.1 Sim Sim 11/12 10/12 R$ 3.208 R$ 6.792 Sim
6.9 10 10 Sim Sim 04/12 05/12 R$ 1.500 R$ 3.300 Não
9.1 9.2 7.9 Sim Sim 11/12 11/12 R$ 3.200 R$ 4.800 Não

Notas da Carla na primeira linha facilitam a identificação da versão da prova do aluno.

0.1 por linha da tabela. Uma resposta errada anula uma certa.
2. (1 ponto) Para cada um dos seguintes trechos de código, indique o que será exibido pelo programa:

0.1 por item no bloco superior e 0.2 por item no bloco inferior. Em itens que pedem a impressão de vários
valores, considerar apenas a pontuação se todos os itens estiverem corretos (pela facilidade de se chutar valores bo-
oleanos). Considerar metade do valor se não constar not c no quarto item ou se constarem strings não solicitadas,
mas valores corretos nos outros itens.
n = 32 + 6 % 2 n = 10 * 2 n = 11 // 7 n = 2**4
c = 19 <= n c = 30 <= n c = 0 > n c = 20 > n
print(n) print(c) print(n, c) print("not c =", not c)

32 False 1 False not c = False

n = 15 + 12 n = 12340 % 2 n = 24 - 2 * 0
c1 = 10 > n c1 = 10 > n r1 = not not not False
c2 = 45 > n c2 = 2 <= n r2 = not (30 < n or n == 24)
r1 = c1 or c2 r1 = not c1 and c2 c1 = 56 < n or 20 > n and n > 10
r2 = c1 and c2 r2 = c1 or not c2 c2 = n > 10 or 13 <= n and monty python
print(r1, r2) print(r1, r2) print(n, r1, r2)
print(c1, c2) print(c1, c2) print(c1, c2)

True False False True 24 True False


False True True False False True

3. (2 pontos) Maria recebeu a seguinte especificação: Codifique um programa em Python que leia dois números
inteiros do teclado, exibindo Maior se o primeiro número for maior que o segundo, Igual se ambos os números
forem iguais e Menor se o primeiro número for menor que o segundo. Veja o código de Maria e indique:
• uma entrada que ao ser digitada pelo usuário fará com que ∀ float ou str
a = int(input()) o programa apresente erro de execução.
b = int(input()) 0.2 caso apresente um float ou string.
if (a >= b):
print("Maior") • dois possı́veis valores a serem digitados pelo usuário que ∀ int x
if (b > a): farão com que o programa exiba na tela a palavra Igual.
print("Igual") 0.4 caso valores sejam coerentes. y>x
elif (a == b):
print("Menor") • o que será impresso caso o usuário digite 35 e 35:
Maior Pontuar 0.4 apenas se a resposta
Igual incluir as duas strings
Reescreva o programa seguindo as especificações dadas e utilizando no máximo duas comparações.

a = int(input())
b = int(input())
if (a > b):
print("Maior")
elif (a == b):
print("Igual")
else:
print("Menor")

1.0 se a estrutura if-elif-else foi utilizada corretamente. A critério do corretor, descontar pontuação caso
outros erros tenham sido inseridos.
4. (3 pontos) Mário quer escrever um programa que imprime todos os números pares entre 1 e 11, um 2
por linha. A saı́da esperada por Mário está indicada na tabela ao lado. Ele se lembra que em Python 4
o uso do operador % retorna o resto da divisão de um número por outro. Por exemplo, 5 % 2 resulta 6
em 1. Mário escreveu o programa abaixo. O que será impresso quando o código for executado? 8
10

n = 1
1
while (n < 11):
1
if (n % 2) == 1:
1
print(n)
Loop infinito.

0.5 impressão de pelo menos um número 1 e indicação de loop infinito

Sem usar laços (for ou while), escreva um programa que produza a saı́da esperada por Mário utilizando
um único comando print.
print(“2\n4\n6\n8\n10”)
0.5 para sequência de números com \n e 0.2 para sequência de números sem \n. 0.0 caso tenha utilizado mais
de um comando print.

Escreva um programa que produza a saı́da espe- Considere que Mário quer imprimir os números
rada por Mário imprimindo um número a cada múltiplos de 3 de 1 a 11, em ordem decrescente,
iteração em um laço for. um por linha. Escreva um programa que produza
esta saı́da imprimindo um número a cada iteração
em um laço while.

for n in range(2, 11, 2) : n = 9


print(n) while (n > 1):
print(n)
1.0 para for com range correto e passo 2. 0.5 para n -= 3
passo 1 e verificação se o número é ı́mpar ou par.
0.0 para código com comando while 1.0 para inicialização e laço correto, com decre-
mento -3. 0.5 para decremento -1 e verificação se
o número é múltiplo de 3. 0.0 para código com
comando for.

Dica: A função range() gera uma lista de números útil para iteração em laços do tipo for. Você pode usá-la
da seguinte forma: range(fim), range(inı́cio, fim) ou range(inı́cio, fim, passo), como exercitado
na tarefa de laboratório 04. Observe os exemplos:

for i in range(2) : for i in range(1,3) : for i in range(3,1,-1) :


print(i) print(i) print(i)

0 1 3
1 2 2
5. (3 pontos) João codificou o programa abaixo. Mário, que é amigo de João, disse que o programa não iria
compilar, já que a lista declarada na linha 1 é composta por inteiros e strings. Apresente uma justificativa se você
concorda com Mário ou indique qual seria a saı́da do programa.

0
1. lista = [0, 2, "Maria", "José"] 2
2. tamanho = len(lista) Maria
3. for i in range(tamanho): José
4. print(lista[i])

0.6 para impressão dos elementos da lista, um elemento por linha. 0.3 para impressão dos elementos da lista,
um ao lado do outro. 0.0 para justificativa.

Mário escreveu uma variação do programa codificado por João. Indique o que será exibido na tela quando o
programa for executado.

1. lista = ["Mário", "Mároi", "Mário", "Maria"]


5
2. for a in lista:
6
3. if (a == "Mário"):
5
4. for n in range(5,7):
6
5. print(n)
Fim
6. print("Fim")

0.6 para impressão de todos os elementos. Para nota parcial cada par 4 5 vale 0.2 e a palavra Fim 0.1. Desconto
de 50% se imprimiu os elementos um ao lado do outro.

Para os dois próximos itens, as caixas de resposta pequenas podem ter induzido as pessoas a não colocar
indentação. Sugiro considerar apenas o range.
Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números inteiros de 89 (inclusive)
a 100 (inclusive).
Linha 4 for i in range(89,101) :

0.4 para linha completa e range correto. 0.2 para limite superior = 100.

Reescreva a linha 4, de forma que o programa exiba em ordem crescente todos os números ı́mpares de 89 (inclusive)
a 99 (inclusive).
Linha 4 for i in range(89,99,2) :

0.4 para linha completa e range correto. 0.2 para limite superior = 56. 0.0 se não apresentou passo 2.

O código abaixo lê uma lista com n nomes. Complete o programa para percorrer esta lista e imprimir quantos
nomes têm menos de 6 caracteres. Dica: a função len(s) retorna o número de caracteres da string s.
n = int(input())
lista = []
for i in range(n) :
lista.append(input())
c = 0
for s in lista :
if len(s) < 6 :
print(s)

1.0 para código correto e completo. 0.0 caso não tenha percorrido corretamente os elementos da lista ou
o tamanho comparado seja um número relativo às outras versões da prova. A critério do corretor, descontar
pontuação caso outros erros tenham sido encontrados.

Você também pode gostar