SóProvas


ID
2783995
Banca
FGV
Órgão
AL-RO
Ano
2018
Provas
Disciplina
Programação
Assuntos

A execução do código Python a seguir termina com sucesso, mostrando a lista de números dispostos em ordem crescente corretamente.

def bubbleSort(numeros):
trocas = 0
trocou = True
while trocou:
trocou = False
for i in range(0,len(numeros)-1):
trocas += 1
if numeros[i] > numeros[i+1]:
numeros[i],numeros[i+1] \
= numeros[i+1],numeros[i]
trocou = True
return trocas

numeros = [17, 20, 26, 31, 44, 55, 77, 94, 93]
print bubbleSort(numeros)
print números

Assinale a opção que indica o valor exibido pelo primeiro comando print.

Alternativas
Comentários
  •  

    Observe  o retorno da função bubbleSort, essa função retornará o valor da variável trocas

    A linha for i in rang/e(0,len(numeros)-1): é igual ao rang/e(0,8)  ou seja, 0,1,2,3,4,5,6,7

                                                                                                  Com isso a variável trocas ao final valerá 8

    Observe que o if somente será verdadeiro se o 1º valor for maior que o 2º.

    Observe agora que QUASE todos os valores irá retornar FALSO para a execução do IF, pois o 1º valor será menor que o 2ª valor, EXCETO!!! pelos dois últimos valores...

     94 > 93 ? TRUE

     a troca interna dentro do IF será executada, e a variável TROCOU será marcada como TRUE.

    O COMANDO WHILE SERÁ EXECUTADO NOVAMENTE e com isso...

    A linha do for  SERÁ EXECUTAVA NOVAMENTE portanto ran/ge(0,8)  ou seja, 0,1,2,3,4,5,6,7

                                                                                                  Como variável  trocas já possui o valor 8, no final ela valerá 16 (8+8)

     Como não existe mais valores que satisfaçam o IF.

    print bubbleSort(numeros) irá imprimir o valor da variável trocas, ou seja, valor 16.

     

    GABARITO ALTERNATIVA D

  • Galera, já vimos o funcionamento do algoritmo Bubble Sort anteriormente na aula de Lógica de Programação. O objetivo desse algoritmo é ordenar uma sequência de números desordenada. O código do enunciado implementa esse algoritmo corretamente em linguagem Python.

    Mas para matar a questão, temos que nos atentar aos detalhes.

    A função bubbleSort ordena corretamente a lista numeros recebido como argumento. O problema é a variável trocas. Apesar do nome, ela não reflete o número efetivo de trocas realizado pelo Bubble Sort. Se fosse o número de trocas do Bubble Sort seria 1, somente a troca do 94 pelo 93 para a lista numeros ficar ordenada.

    Pelo código que está escrito, a variável trocas ao final da execução armazenará um outro valor. Vamos lá, passo a passo.

    No início, trocou = True, então ele entra a 1a vez no while.

    O range do for é [0, 1, 2, 3, 4, 5, 6, 7]. Como o incremento do trocas ocorre dentro desse for, trocas será incrementado 8 vezes ficando trocas = 8 após as 8 repetições do 1o for. O if dá verdadeiro 1 vez somente, quando chega no 94 que é menor que o elemento subsequente 93. É realizada a troca de 94 por 93 e a variável trocou é modificada para True.

    Como trocou = True, entra a 2a vez no while. Nesta passagem, o range do for é o mesmo que na passagem anterior. Então a variável trocas será incrementada 8 vezes de novo. Como o valor anterior de trocas era 8, após os 8 novos incrementos vai a 16. Após isso, não ocorre mais troca, trocou = False e a função é finalizada.

    Portanto, a função bubbleSort retornará o valor final de trocas = 16.

    Resposta: D

  • tentei rodar esse código adaptando ,mas nenhum jeito retornou 16

  • A linguagem Python não tem vírgulas logo a não indentação/organização do código dificulta ainda mais uma analise. Segue pessoal:

    def bubbleSort(numeros):

      trocas = 0

      trocou = True

      while trocou:

         trocou = False

         for i in range(0,len(numeros)-1):

          trocas += 1

          if numeros[i] > numeros[i+1]:

           numeros[i],numeros[i+1] \

                 = numeros[i+1],numeros[i]

           trocou = True

     return trocas

     

    numeros = [17, 20, 26, 31, 44, 55, 77, 94, 93]

    print bubbleSort(numeros)

    print números