Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/10/2014, 20:43
croelanjr
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 9 años, 8 meses
Puntos: 1
Duda en duplicar

Amigos,
Estoy tratando de resolver un ejercicio, cuando hago un recorrido en cada cadena en un arreglo, por ejemplo a = [1,1,1,1,4,3,5,9], cuenta los numeros que estan duplicada por ejemplo el numero 1, la cantidad de duplicado del numero 1 es 4. eso se hace con for y un contador. ahora bien, lo que trato es que no me salga la cantidad de duplicado (cadena). solamente que salga el numero 1 . igualmente para otro ejemplo de arreglo b = [1,2,3,4,5], en este arreglo no hay duplicado saldria 0. otro ejemplo c = [7,2,4,5,4,6,4] en este caso hay 3 duplicado del numero cuatro, en lo cual deberia salir 4.
le paso el codigo si me puedes apoyar en que esta mal.
Código ruby:
Ver original
  1. #encoding:UTF-8
  2. =begin
  3. Una empresa de maquinas tragamonedas desea poder determinar cual es el premio asignado a un cliente.
  4. Para ello se le solicita desarrollar los siguientes subprogramas:
  5.  
  6. a) Un subprograma que permita determinar cuantas veces apareció un digito en un número determinado.
  7. Se tiene como datos de entrada el número y el digito. Por ejemplo, si el numero es 1234 y el digito es 5,
  8. se obtendrá como resultado 0; si el numero es 12344 y el digito es 4, se obtendrá como resultado 2.
  9.  
  10. b) Un subprograma que permita determinar cual es el digito que apareció 2 o mas veces en un número.
  11. Se tiene como dato de entrada un número. Por ejemplo, si el numero es 1234 se obtendrá como resultado 0
  12. pues ningún numero aparece mas de 2 veces, si el numero es 77093 se obtendrá como resultado 7.
  13. (Considerar que no puede haber 2 o mas coincidencias de distintos números, es decir no se puede dar el caso 7766,
  14.  en donde se repite 2 veces el 7 y 2 veces el 6)
  15.  
  16. c) Un subprograma que permita determinar el premio a pagar. El premio se calcula de la siguiente manera:
  17. premio = numeroCoincidencias*10. En donde el número de coincidencias es el máximo número de veces que se
  18. repite un digito en el numero.
  19.  
  20. Nota: Para la formación del numero se considera dígitos del 1 al 9, se excluye el 0, es decir no se puede
  21. dar el siguiente numero 1002, pues el 0 esta excluido.
  22. =end
  23. def obtenerNumeroCoincidencias(valor, cifra)
  24.     valor_cadena = valor.to_s
  25.     cifra_cadena = cifra.to_s
  26.     coincidencia = 0
  27.     for a in 0...valor_cadena.size
  28.         if valor_cadena[a] == cifra_cadena
  29.             coincidencia = coincidencia + 1
  30.         end
  31.     end
  32.     return coincidencia
  33. end
  34.  
  35. def obtenerNumeroMasRepite(valor)
  36.     cadena = valor.to_s
  37.     ultimo = []
  38.     contador = 0
  39.     for i in 0...cadena.size   
  40.         ultimo << cadena[i]
  41.     end
  42.  
  43.     numero = ultimo.first
  44.     for j in 0...cadena.size
  45.         if cadena[j] == numero
  46.             numero = cadena[j]
  47.         else
  48.             numero = 0
  49.         end
  50.     end
  51.     return numero
  52. end
  53.  
  54. def obtenerPremio(valor)
  55.     total_valor = obtenerNumeroMasRepite(valor)
  56.     return total_valor.to_i * 10
  57. end
  58.  
  59. #--- zona del programa principal ----
  60.  
  61. #--- zona de test ----
  62.  
  63. def test_obtenerNumeroCoincidencias
  64.     print validate(3, obtenerNumeroCoincidencias(6661,6))
  65.     print validate(0, obtenerNumeroCoincidencias(1234,5))  
  66.     print validate(2, obtenerNumeroCoincidencias(7881,8))    
  67.     print validate(1, obtenerNumeroCoincidencias(7861,8))    
  68. end
  69.  
  70. def test_obtenerNumeroMasRepite
  71.     print validate(2, obtenerNumeroMasRepite(122234))
  72.     print validate(7, obtenerNumeroMasRepite(76713))
  73.     print validate(0, obtenerNumeroMasRepite(123456))
  74.     print validate(9, obtenerNumeroMasRepite(999999))
  75. end
  76.  
  77. def test_obtenerPremio
  78.     print validate(0, obtenerPremio(123456))
  79.     print validate(30, obtenerPremio(122324))
  80.     print validate(50, obtenerPremio(199999))
  81.     print validate(60, obtenerPremio(111111))
  82. end
  83.  
  84. def validate (expected, value)
  85.  expected == value ? "." : "F"
  86. end
  87.  
  88. def test
  89.    
  90.   puts "Test de prueba del programa"
  91.   puts "---------------------------"
  92.   test_obtenerNumeroCoincidencias
  93.   test_obtenerNumeroMasRepite
  94.   test_obtenerPremio
  95.   puts " "
  96. end
  97. test