//
// Autore: Giuliano Pellegrini Parisi
//
// Classe: 3^ Inf. Sirio
//
// Data: 15 marzo 2009
//
// Oggetto: Implementazione libreria fbblDatiCasuali
//
// Release: 0.1b
//
// ChangeLog: In data 2 maggio 2009 aggiunta seconda funzione polimorfa VettoreCasuale
// ChangeLog: In data 22.03.09 aggiunta seconda funzione polimorfa NumeroCasuale per gli interi

using System; // Devo usare la System del magazzino di .NET per usare la Random()
using fbblTipi;
using System.Drawing;

namespace fbblDatiCasuali
{
    public class StrumentiDatiCasuali
    {
        private  static Random GenerazioneCasuale = new Random();

        // Il C# vi aiuti in alcuni lavoro, tra cui la generazione dei numeri casuali reali tra 0 e 1, ma vi 
        // obbliga a creare questi strumenti in memoria RAM prima del loro utilizzo.
        // Per creare in RAM lo strumento il C# utilizza l'operatore "new".

        public static double NumeroCasuale(TIntervalloReali Intervallo)
        {
            return Intervallo.Minimo + GenerazioneCasuale.NextDouble() * (Intervallo.Massimo - Intervallo.Minimo);
        }

        public static int NumeroCasuale(TIntervalloInteri Intervallo)
        {
            return Intervallo.Minimo + GenerazioneCasuale.Next(Intervallo.Massimo + 1 - Intervallo.Minimo);
        }

        public static  Color ColoreCasuale()
        {
            int Rosso;
            int Blu;
            int Verde;
            TIntervalloInteri Intervallo;

            Intervallo = new TIntervalloInteri();

            Intervallo.Minimo = 0;
            Intervallo.Massimo = 255;

            Rosso = NumeroCasuale(Intervallo);
            Blu = NumeroCasuale(Intervallo);
            Verde = NumeroCasuale(Intervallo);

            return Color.FromArgb(Rosso,Verde,Blu);
        }

        static public TVettoriInteri VettoreCasuale(int NumeroElementi,TIntervalloInteri Intervallo)
        {
            int Posizione;
            TVettoriInteri VettoreInteri;

            VettoreInteri=new TVettoriInteri();

            for (Posizione = 0; Posizione< NumeroElementi; Posizione++)
            {
                VettoreInteri.Vettore[Posizione] = NumeroCasuale(Intervallo);
            }

            VettoreInteri.Dimensione = NumeroElementi;

            return VettoreInteri;
        }


    }
}
