am_dot_com

FP 2022-11-22

Nov 22nd, 2022 (edited)
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. # bs.py - Bubble Sort
  2. import time
  3. """
  4. Algoritmo para ordenar ascendentemente (do menor para o maior) coleções
  5. exemplo: coleções de inteiros
  6. critério: posicionamento dos inteiros na reta real
  7. trabalha-se até a coleção estar ordenar
  8. enquanto a COL NÃO está ordenada há q tentar ordená-la:
  9. fazer passeios do primeiro ao PEnúltimo elemento da coleção
  10. o que se faz em cada passeio é
  11. comparar cada elemento com o seu vizinho/adjacente/seguinte
  12. se encontramos os elementos atual e seguinte
  13. FORA da ordem desejada há que:
  14. 1) trocá-los (algoritmo da troca)
  15. 2) tomar nota q foi feita uma troca
  16.  
  17. quando um passeio termina
  18. temos que perguntar-nos
  19. FIZ TROCAS?
  20. Se a resposta for não, podemos considerar
  21. a coleção ordenada e terminar.
  22.  
  23. bOrdenada = False
  24. bTrocas = False
  25. 4 3 2 1
  26. 4>3 True => troquei e FIZ TROCA
  27. 3 4 2 1
  28. 4>2 True => troquei e FIZ TROCA
  29. 3 2 4 1
  30. 4>1 True => troquei e FIZ TROCA
  31.  
  32. Passeio #2
  33. bTrocas = False
  34. 3 2 1 4
  35. 3>2 True => troquei e FIZ TROCA
  36. 2 3 1 4
  37. 3>1 True => troquei e FIZ TROCA
  38. 2 1 3 4
  39. 3>4 False => FAÇO NADA
  40. 2 1 3 4
  41. houve trocas (SIM)
  42. posso assumir q ficou ordenada NÃO
  43. exige-se +1 passeio
  44.  
  45. 2 1 3 4
  46. 2>1 True ? Troco Aponto q faço troca
  47. 1 2 3 4
  48. 2>3 False? FAÇO NADA
  49. 1 2 3 4
  50. 3>4 False? FAÇO NADA
  51. 1 2 3 4
  52.  
  53. bTrocas = False
  54. 1 2 3 4
  55.  
  56. bOrdenada = True
  57. """
  58.  
  59. # numa lista com n elementos
  60. # os passeios serão
  61. # de 0 (zero) ao index n-1-1
  62. def bsAsc(pCol:list):
  63. numDePasseios = 0
  64. numDeTrocas = 0
  65. bOrdenada = False
  66. passeioDoPrimeiroAoPenultimo = range(
  67. 0, # do primeiro
  68. len(pCol) - 1 # ao penúltimo (notar q este valor será excluido)
  69. )
  70. while not bOrdenada:
  71. numDePasseios+=1
  72. bFizTrocas = False
  73. for endereco in passeioDoPrimeiroAoPenultimo:
  74. el = pCol[endereco]
  75. vizinho = pCol[endereco+1]
  76. bHaMotivosParaTrocar = el>vizinho
  77.  
  78. strMsg = f"Passeio #{numDePasseios} ; Coleção atualmente: {pCol}\n"
  79. strMsg+= f"Vou comparar endereço {endereco} que vale {pCol[endereco]}"
  80. strMsg+=f" com endereço {endereco+1} que vale {pCol[endereco+1]}\n"
  81. strMsg+=f"Há motivos para trocar? {bHaMotivosParaTrocar}"
  82. print(strMsg)
  83.  
  84. if(bHaMotivosParaTrocar):
  85. numDeTrocas+=1
  86. # algoritmo da troca
  87. temp = pCol[endereco]
  88. pCol[endereco] = pCol[endereco+1]
  89. pCol[endereco+1] = temp
  90. bFizTrocas = True
  91.  
  92. strMsg=f"Houve uma troca, a coleção ficou assim:\n{pCol}"
  93. print(strMsg)
  94. # if
  95. # for passeio do 1º ao penúltimo elemento da pCol
  96. #time.sleep(15)
  97.  
  98. strMsg="*"*40
  99. print(strMsg)
  100.  
  101. # no final do passeio
  102. if not bFizTrocas:
  103. bOrdenada = True
  104. #if
  105. # def
  106.  
  107. col = [4,3,2,1]
  108. print (f"Antes: {col}")
  109. bsAsc(col)
  110. print (f"Depois: {col}")
  111.  
  112. col = ["Artur", "Zélia", "Rita", "Ana", "Lurdes", "John"]
  113. print (f"Antes: {col}")
  114. bsAsc(col)
  115. print (f"Depois: {col}")
  116.  
  117. """
  118. Q1: O que retorna a função bs?
  119. None
  120. Q2 : Modifique bs para que retorne a col ordenada
  121. return pCol
  122. Q3 : Modifique bs para que retorne o número de passeios *e* o número de trocas
  123. return numDePasseios, numDeTrocas
  124. Q4 : Qual é o tipo de retorno
  125. Tuple
  126. type(bsAsc([]))
  127. """
  128. col = [4,44,12]
  129. resposta = bsAsc(col)
  130. print(resposta)
  131.  
  132.  
  133. *********
  134. # ex3.py
  135.  
  136. def umaFuncao(pUmParam):
  137. pUmParam = pUmParam+10
  138. # def
  139.  
  140. """
  141. Em Python temos "passagem por valor"
  142. Significa que o param "associa-se" com uma cópía do valor do argumento
  143. mas não com o original
  144. portanto, não altera o argumento
  145. não há efeitos colaterais
  146. """
  147.  
  148. umArgumento = 2
  149. resultado = umaFuncao(umArgumento)
  150. print(f"umArgumento={umArgumento} ; resultado={resultado}")
Advertisement
Add Comment
Please, Sign In to add comment