Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Descomponer en factores primos
#1

Buenas!.

Conociendo los caracteres Unicode adecuados para los exponentes (super indices) he podido crear este ejemplo.

GAMBAS
  1. Public Sub Main()
  2.  
  3.   MostrarDescompFact(100)
  4.  
  5.  
  6. Public Sub MostrarDescompFact(numero As Integer)''Mostrar descomposición factorial
  7.  
  8.   Dim valor As String
  9.   Dim cfactores As New Collection
  10.  
  11.   cfactores = Descomponer(numero)
  12.  
  13.   Print numero; " = ";
  14.   For Each valor In cfactores
  15.     Print cfactores.key; String.Chr(DevolverSuperIndice(valor)); "*";
  16.   Next
  17.   Print 1
  18.  
  19.  
  20. Public Sub Descomponer(numero As Integer) As Collection ''Descomponer un números en factores
  21.  
  22.   Dim factores As New Collection
  23.  
  24.   n = 2
  25.  
  26.   While n <= numero
  27.     If numero Mod n = 0 Then
  28.       numero = numero / n
  29.       If Not factores.Exist(n) Then
  30.         factores.Add(1, n)
  31.       Else
  32.         factores[n] += 1
  33.       Endif
  34.     Else
  35.       n += 1
  36.     Endif
  37.   Wend
  38.  
  39.   Return factores
  40.  
  41.  
  42. Public Function DevolverSuperIndice(valor As Integer) As Integer ''Devuelve el carácter unicode de exponente
  43.  
  44.   Dim codigo As Integer
  45.  
  46.   'De esta forma se ve mejor que usando Choose
  47.   'El valor 1 no es posible como exponente
  48.   Select Case valor
  49.     Case 2
  50.       codigo = 178
  51.     Case 3
  52.       codigo = 179
  53.     Case 4
  54.       codigo = &2074
  55.     Case 5
  56.       codigo = &2075
  57.     Case 6
  58.       codigo = &2076
  59.     Case 7
  60.       codigo = &2077
  61.     Case 8
  62.       codigo = &2078
  63.     Case 9
  64.       codigo = &2079
  65.  
  66.   Return codigo
  67.  
  68.  
  69. ' Public Sub DevolverSuperIndice2(valor As Integer) As Integer
  70. '  'Esto no va a funcionar
  71. '   Return Choose(valor, Null, 178, 179, &2074, &2075, &2076, &2077, &2078, &2079)
  72. '
  73. ' End



Salida:
Cita:100 = 2²*5²*1

No existe un exponente "1", si fuera dos como único factor primo. Hubiera salido 21...mejor 2*1
Eso en el caso del Select, que como veis no he comprobado que el valor fuera 1. He comenzado desde valor 2 para exponente.

A ver si se puede mejorar. Sobre todo la función que usa Choose.

Tener en cuenta que después de esto, podemos optar por crear otras funciones que nos puedan devolver
el máximo común divisor, el mínimo común múltiplo, etc. Ya sería más de un número. Por eso opté por dividir en varias funciones independientes.
El uso de colecciones me parece interesante para el ejemplo.

Saludos


Archivos adjuntos
.gz DescomponerFactoresPrimos-0.0.1.tar.gz Tamaño: 12.36 KB  Descargas: 1

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
[-] Los siguientes 1 usuarios dice gracias a Shell por este post:
  • Grandamakulo
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)