C# Exercise: 148 Random number

In this exercise of C#, you need to create a class called RandomNumber with three static methods. The first method, GetFloat, should return a number between 0 and 1 using the following algorithm:

seed = (seed * a + c) % m
result = abs(seed / m)

The second method, GetInt(max), should return an integer between 0 and a given maximum value (max) using the following calculation:

result = round(max * GetFloat)

The third method, GetInt(min, max), should return an integer between a minimum (min) and a maximum (max) value, and you will need to create this method entirely on your own. This method represents an additional challenge as you'll need to develop an algorithm that works with the provided min and max parameters.

The initial values must be as follows:

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

This exercise is useful for practicing the creation of static methods, working with algorithms, and generating random numbers in C#. It also teaches how to use static variables within a class to implement a random number generator.

 Exercise

Random number

 Objetive

Create a class RandomNumber, with three static methods:

- GetFloat will return a number between 0 and 1 using the following algorithm:

seed = (seed * a + c) % m
result = abs(seed / m)

- GetInt(max) will return a number from 0 to max, using:
result = round(max * GetFloat)

- GetInt(min, max) will return a number from min to max (you must create this one totally on your own).

The starting values must be:
m = 233280;
a = 9301;
c = 49297;
seed = 1;

 Example Code

// Importing the System namespace for the functionality of Math methods
using System;

public class RandomNumber
{
    // Static fields with the values as required
    private static int m = 233280;  // Modulus
    private static int a = 9301;    // Multiplier
    private static int c = 49297;   // Increment
    private static int seed = 1;    // Seed value

    // Static method to get a float between 0 and 1
    public static float GetFloat()
    {
        // Updating the seed using the given algorithm: seed = (seed * a + c) % m
        seed = (seed * a + c) % m;
        
        // Calculating the result as the absolute value of (seed / m)
        float result = Math.Abs((float)seed / m);
        
        // Returning the result
        return result;
    }

    // Static method to get an integer from 0 to max
    public static int GetInt(int max)
    {
        // Getting a float value between 0 and 1
        float randomFloat = GetFloat();
        
        // Calculating the result as the rounded integer value of (max * GetFloat)
        int result = (int)Math.Round(max * randomFloat);
        
        // Returning the result
        return result;
    }

    // Static method to get an integer between min and max
    public static int GetInt(int min, int max)
    {
        // Getting a float value between 0 and 1
        float randomFloat = GetFloat();
        
        // Calculating the result as the integer between min and max
        int result = (int)Math.Round(min + (max - min) * randomFloat);
        
        // Returning the result
        return result;
    }
}

// Main program to test the RandomNumber class
public class Program
{
    public static void Main()
    {
        // Testing GetFloat to get a random float between 0 and 1
        Console.WriteLine($"Random Float: {RandomNumber.GetFloat()}");

        // Testing GetInt to get a random integer between 0 and 100
        Console.WriteLine($"Random Int (0 to 100): {RandomNumber.GetInt(100)}");

        // Testing GetInt with a specific range (e.g., between 50 and 100)
        Console.WriteLine($"Random Int (50 to 100): {RandomNumber.GetInt(50, 100)}");
    }
}

More C# Exercises of OOP More On Classes

 Array of objects: table
Create a class named "Table". It must have a constructor, indicating the width and height of the board. It will have a method "ShowData" which will wr...
 House
Create a class "House", with an attribute "area", a constructor that sets its value and a method "ShowData" to display "I am a house, my area is 200 m...
 Table + coffetable + array
Create a project named "Tables2", based on the "Tables" project. In it, create a class "CoffeeTable" that inherits from "Table". Its method "ShowDa...
 Encrypter & Decrypter
Create a class "Encrypter" to encrypt and decrypt text. It will have a "Encrypt" method, which will receive a string and return another string. It ...
 Complex numbers
A complex number has two parts: the real part and the imaginary part. In a number such as a+bi (2-3i, for example) the real part would be "a" (2) and ...
 Table + coffetable + leg
Extend the example of the tables and the coffee tables, to add a class "Leg" with a method "ShowData", which will write "I am a leg" and then it will ...
 Catalog
Create the classes diagram and then, using Visual Studio, a project and the corresponding classes for a catalog utility: It will be able to store i...
 Text to HTML
Create a class "TextToHTML", which must be able to convert several texts entered by the user into a HTML sequence, like this one: Hola Soy yo Ya ...
 Class ScreenText
Create a class ScreenText, to display a certain text in specified screen coordinates. It must have a constructor which will receive X, Y and the strin...
 Enhanced ComplexNumber class
Improve the "ComplexNumber" class, so that it overloads the operators + and - to add and subtract numbers....
 3D point
Create a class "Point3D", to represent a point in 3-D space, with coordinates X, Y and Z. It must contain the following methods: MoveTo, which will...
 Catalog + Menu
Improve the Catalog program, so that "Main" displays a menu to allow entering new data of any kind, as well as displaying all the data stored....