none
Ciclo For - Pseudo Aleatorio - Arimética Modular

    Pregunta

  • Buenos días amigos...

    Me encuentro cursando la materia de Métodos Numéricos en la U, y nos han puesto el siguiente ejercicio de Aritmética Modular el cual no tengo ni idea de plantearlo, se trata de lo siguiente:

    Se tiene la fórmula x= (a*Xo+b)%m en la cual se evidencian 4 variables a, b, Xo, m
    Xo: Semilla
    m= longitud de cadena

    Este algoritmo se trata que partir de unos valores de entrada que se le de a las 4 variables genere números aleatorios aplicados a esa formula y este finalice cuando uno de los numero se repita, aquí un ejemplo:

    x= (a*Xo+b)%m

    a = 11
    b = 9
    Xo = 3 (El valor de Xo varia dependiendo del resultado anterior) (Este valor es el modulo o residuo de la division)
    m = 15

    Xo = 3 
    X1 = 12 -------------->X1= (11*3+9)%15 = 42%15 = 12
    X2 = 6 ---------------> X2= (11*12+9)%15 = 141%15 = 6
    X3 = 0 ---------------> X3= (11*6+9)%15 = 75%15 = 0
    X4 = 9 ---------------> X4= (11*0+9)%15 = 9%15 = 15
    X5 = 3 ---------------> X5= (11*9+9)%15 = 108%15 = 3

    Xo= & X5= 3 "Fin del ciclo"

    De esto se trata amigos, quisiera que me pudieran ayudar con eso tengo que entregarlo en .Net o C#, que son los lenguajes en los que estoy empezando.

    Inicialmente estaba pensando utilizar un For y poder cargar los valores en un Label o un Datagridview.

    Agradezco siempre su colaboración, son de mucha ayuda!

    

    viernes, 10 de agosto de 2018 18:34

Respuestas

  • Module Module1
    
        Sub Main()
            Dim a As Integer = 11
            Dim b As Integer = 9
            Dim Xo As Integer = 3
            Dim m As Integer = 15
    
            Console.WriteLine(Xo)
            Dim k As Integer = 1
            Dim x As Integer = Xo
            For k = 1 To m
                x = (a * x + b) Mod m
                Console.WriteLine("x{0} = {1}", k, x)
                If (x = Xo) Then Exit For
            Next
    
            Console.WriteLine("La serie se repite luego de {0} iteraciones", k)
            Console.ReadKey()
    
        End Sub
    
    End Module
    

    using System;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a = 11;
                int b = 9;
                int Xo = 3;     
                int m = 15;
    
                Console.WriteLine(Xo);
                int k = 1;
                for (int x = Xo; ; k++)
                {
                    x = (a * x + b) % m;
                    Console.WriteLine("x{0} = {1}", k, x);
                    if (x == Xo) break;
                }
    
                Console.WriteLine("La serie se repite luego de {0} iteraciones", k);
                Console.ReadKey(); 
    
            }
        }
    }
    

    viernes, 10 de agosto de 2018 18:58

Todas las respuestas

  • Module Module1
    
        Sub Main()
            Dim a As Integer = 11
            Dim b As Integer = 9
            Dim Xo As Integer = 3
            Dim m As Integer = 15
    
            Console.WriteLine(Xo)
            Dim k As Integer = 1
            Dim x As Integer = Xo
            For k = 1 To m
                x = (a * x + b) Mod m
                Console.WriteLine("x{0} = {1}", k, x)
                If (x = Xo) Then Exit For
            Next
    
            Console.WriteLine("La serie se repite luego de {0} iteraciones", k)
            Console.ReadKey()
    
        End Sub
    
    End Module
    

    using System;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a = 11;
                int b = 9;
                int Xo = 3;     
                int m = 15;
    
                Console.WriteLine(Xo);
                int k = 1;
                for (int x = Xo; ; k++)
                {
                    x = (a * x + b) % m;
                    Console.WriteLine("x{0} = {1}", k, x);
                    if (x == Xo) break;
                }
    
                Console.WriteLine("La serie se repite luego de {0} iteraciones", k);
                Console.ReadKey(); 
    
            }
        }
    }
    

    viernes, 10 de agosto de 2018 18:58
  • Muchisimas gracias miqui quilmes, lo que no podía entender era como iniciar el ciclo pero con tu ayuda ya podre entenderlo y de esta manera lo tratare de pasar a modo grafico en .Net.

    +10

    viernes, 10 de agosto de 2018 19:54
  • Amigo miqui quilmes tu ayuda fue muy útil anteriormente y quisiera saber si me puedes ayudar con esto: https://social.msdn.microsoft.com/Forums/es-ES/5e8f4008-ac28-4cff-9e3c-5b1e38a8befb/generar-nmeros-decimales-entre-un-rango?forum=vbes

    He logrado poder generar el numero aleatorio con la funcion Random rnd = new Random(); y los 2000 eventos pero no he podido que me muestre los decimales absolutos como están en ese Excel y lo de la integral mucho menos...

    viernes, 17 de agosto de 2018 20:07