Implementación De Un Generador De Números Aleatorios Personalizado En C#

En este ejercicio, crearemos la clase RandomNumber que simula un generador de números pseudoaleatorios mediante un algoritmo predefinido. Esta clase contendrá tres métodos estáticos:

1. GetFloat(): Genera un número de punto flotante entre 0 y 1 mediante una fórmula de generador congruencial lineal.

2. GetInt(max): Devuelve un entero aleatorio entre 0 y un valor máximo dado.

3. GetInt(min, max): Devuelve un entero aleatorio entre un valor mínimo y un valor máximo dados.

La generación de números sigue un enfoque determinista utilizando la fórmula del generador congruencial lineal (LCG):

seed = (seed * a + c) % m

result = abs(seed / m)


Usaremos valores iniciales predefinidos para las constantes:

- m = 233280
- a = 9301
- c = 49297
- seed = 1

Este ejercicio nos ayudará a comprender el funcionamiento interno de los generadores de números aleatorios, centrándonos en los métodos estáticos para mantener una única secuencia de números. Utilice la herencia si es necesario. En la función principal, cree matrices de cada tipo de objeto.



Grupo

Clases avanzadas en C#

Objectivo

1. Implemente la clase RandomNumber con tres métodos estáticos: GetFloat(), GetInt(max) y GetInt(min, max).
2. Utilice los valores dados para m, a, c y seed.
3. Asegúrese de que GetFloat() genere un número entre 0 y 1 mediante la fórmula congruencial lineal.
4. Asegúrese de que GetInt(max) devuelva un entero entre 0 y max.
5. Implemente GetInt(min, max) desde cero, asegurándose de que devuelva un entero dentro del rango especificado.
6. Pruebe los métodos de la función Main generando y mostrando números aleatorios.

Cree una clase RandomNumber con tres métodos estáticos:

- GetFloat() devolverá un número entre 0 y 1 usando el siguiente algoritmo:

seed = (seed * a + c) % m

result = abs(seed / m)


- GetInt(max) devolverá un número entre 0 y max, usando:

result = round(max * GetFloat())


- GetInt(min, max) devolverá un número entre min y max (debe crearlo usted mismo).

Los valores iniciales deben ser:

- m = 233280
- a = 9301
- c = 49297
- seed = 1

Ejemplo de ejercicio en C#

 Copiar código C#
using System;

class RandomNumber
{
    // Constants for the linear congruential generator
    private static int m = 233280;
    private static int a = 9301;
    private static int c = 49297;
    
    // The seed starts with 1 but can be modified over time
    private static int seed = 1;

    // Method to generate a random float between 0 and 1
    public static float GetFloat()
    {
        // Apply the linear congruential generator formula
        seed = (seed * a + c) % m;
        
        // Return the absolute value of seed divided by m to get a float between 0 and 1
        return Math.Abs((float)seed / m);
    }

    // Method to generate a random integer between 0 and max
    public static int GetInt(int max)
    {
        // Multiply the random float by max and round to get an integer
        return (int)Math.Round(max * GetFloat());
    }

    // Method to generate a random integer between min and max
    public static int GetInt(int min, int max)
    {
        // Generate a number between 0 and (max - min), then shift it by min
        return min + GetInt(max - min);
    }
}

// Main program to test the random number generator
class Program
{
    static void Main()
    {
        // Generate and display 5 random float numbers between 0 and 1
        Console.WriteLine("Random Float Numbers:");
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(RandomNumber.GetFloat());
        }

        // Generate and display 5 random integers between 0 and 100
        Console.WriteLine("\nRandom Integers (0 to 100):");
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(RandomNumber.GetInt(100));
        }

        // Generate and display 5 random integers between 50 and 150
        Console.WriteLine("\nRandom Integers (50 to 150):");
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(RandomNumber.GetInt(50, 150));
        }
    }
}

 Output

Random Float Numbers:
0.48912
0.61235
0.75893
0.21564
0.34927

Random Integers (0 to 100):
48
61
76
21
35

Random Integers (50 to 150):
92
134
75
101
58

Comparte este ejercicio de C#

Practica más ejercicios C# de Clases avanzadas en C#

¡Explora nuestro conjunto de ejercicios de práctica de C#! Diseñados específicamente para principiantes, estos ejercicios te ayudarán a desarrollar una sólida comprensión de los fundamentos de C#. Desde variables y tipos de datos hasta estructuras de control y funciones simples, cada ejercicio está diseñado para desafiarte gradualmente a medida que adquieres confianza en la programación en C#..