Advertisement
am_dot_com

SW20210514

May 14th, 2021 (edited)
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Exemplos de Ordenações com UDTs</title>
  6. </head>
  7. <body>
  8. <a href="#idElementoQueSinalizadaUltimoExercicio">Atalho para o último exercício</a>
  9. <script>
  10. const DEFAULT_MARCA = "Marca";
  11. const DEFAULT_MODELO = "Modelo";
  12. const DEFAULT_CONSUMO = "x/100";
  13. const DEFAULT_PVP = 555000;
  14. function Carro(
  15. pMarca,
  16. pModelo,
  17. pConsumo,
  18. pPVP
  19. ){
  20. this.mMarca = pMarca===undefined ? DEFAULT_MARCA : pMarca;
  21. this.mModelo = pModelo===undefined ? DEFAULT_MODELO : pModelo;
  22. this.mConsumo = pConsumo===undefined ? DEFAULT_CONSUMO : pConsumo;
  23. this.mPVP = pPVP===undefined ? DEFAULT_PVP : pPVP;
  24. }//Carro
  25.  
  26. function fQueExplicaComoSeOrdenaAscendentementePorPreco(
  27. pO1,
  28. pO2
  29. ){
  30. if (pO1.mPVP>pO2.mPVP) return +3;
  31. if (pO1.mPVP<pO2.mPVP) return -555;
  32. //if (pO2.mPVP===pO2.mPVP) return 0;
  33. return 0;
  34. }//fQueExplicaComoSeOrdenaAscendentementePorPreco
  35.  
  36.  
  37. function fQueExplicaComoSeOrdenaDescendentementePorPreco(
  38. pO1,
  39. pO2
  40. ){
  41. if (pO1.mPVP>pO2.mPVP) return -3;
  42. if (pO1.mPVP<pO2.mPVP) return +555;
  43. //if (pO2.mPVP===pO2.mPVP) return 0;
  44. return 0;
  45. }//fQueExplicaComoSeOrdenaDescendentementePorPreco
  46.  
  47. //"preferível"
  48. function fQueExplicaComoSeOrdenaDescendentementePorPreco2(
  49. pO1,
  50. pO2
  51. ){
  52. return -1*fQueExplicaComoSeOrdenaAscendentementePorPreco(pO1, pO2);
  53. }//fQueExplicaComoSeOrdenaDescendentementePorPreco2
  54.  
  55.  
  56. Carro.prototype.toString = function(){
  57. var frase = "<ul>";
  58. frase+="<li>Marca: <mark>"+this.mMarca+"</mark></li>";
  59. frase+="<li>Modelo: <mark>"+this.mModelo+"</mark></li>";
  60. frase+="<li>Consumo: <mark>"+this.mConsumo+"</mark></li>";
  61. frase+="<li>PVP: <mark>"+this.mPVP+"</mark></li>";
  62. frase+="</ul>"
  63. return frase;
  64. }//Carro.toString
  65.  
  66. var c1 = new Carro(), //carro por defeito
  67. c2 = new Carro("VW", "Polo", "6/100", 10000),
  68. c3 = new Carro("Nissan", "Leaf", "2", 12000),
  69. c4 = new Carro("Nissan", "Xpto", "4", 333333);
  70.  
  71. var garagem = [c1, c2, c3, c4];
  72. garagem.sort(/* não tendo explicado COMO, o JS reduziu tudo a frases */);
  73. document.write (garagem);
  74.  
  75. document.write ("<hr>");
  76. //garagem.sort(fQueExplicaComoSeOrdenaAscendentementePorPreco);
  77. //garagem.sort(fQueExplicaComoSeOrdenaDescendentementePorPreco);
  78. garagem.sort(fQueExplicaComoSeOrdenaDescendentementePorPreco2);
  79. document.write (garagem);
  80.  
  81. /*
  82. Escreva uma solução que permita a ordenação ASCENDENTE por marca
  83. e, havendo carros da mesma marca, serão distintos por PVP DESCENDENTE
  84. */
  85.  
  86. function fQueExplicaPrimeiroOrdenarPorMarcaADepoisPorPVPD(
  87. a, b
  88. ){
  89. //critério #1 (marca, ascendente)
  90. if (a.mMarca>b.mMarca) return +1;
  91. if (a.mMarca<b.mMarca) return -1;
  92. //se chegámos aqui, é pq os carros têm a mesma marca
  93. //entra então em ação um critério #2, que é o PVP
  94. //mas descendente
  95. if (a.mPVP>b.mPVP) return -1;
  96. if (a.mPVP<b.mPVP) return +1;
  97. return 0; //mesma marca *e* o mesmo PVP
  98. }//fQueExplicaPrimeiroOrdenarPorMarcaADepoisPorPVPD
  99.  
  100. document.write("<hr><h1 id=\"idElementoQueSinalizadaUltimoExercicio\">Ordenação por Marca (A) e, depois, por PVP (D)</h1>");
  101. garagem.sort(fQueExplicaPrimeiroOrdenarPorMarcaADepoisPorPVPD);
  102. document.write(garagem);
  103. </script>
  104. </body>
  105. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement