Simulación - Algoritmo lineal

JosAntonioSandovalAc 2,336 views 3 slides Oct 22, 2017
Slide 1
Slide 1 of 3
Slide 1
1
Slide 2
2
Slide 3
3

About This Presentation

Ingeniería en Sistemas Computacionales
Simulación
Algoritmo lineal
Programa que genera una serie de números pseudoaleatorios por medio del Algoritmo Lineal, al finalizar se aplica el método de ordenamiento Shell Sort para mostrar el conjunto ya ordenado.


Slide Content

Algoritmo lineal
Programa que genera una serie de números pseudoaleatorios por medio del Algoritmo Lineal,
al finalizar se aplica el método de ordenamiento Shell Sort para mostrar el conjunto ya
ordenado.
• Este algoritmo congruencial fue propuesto por D. H. Lehmer, en 1951. Según Law y Kel-
ton, este algoritmo ha sido el más usado. El algoritmo congruencial lineal genera una
secuencia de números enteros por medio de la siguiente ecuación recursiva:
Xi+1 = (aXi + c) mod(m) i=0,1,2,3,n
• Donde X0 es la semilla, a es la constante multiplicativa, c es una constante aditiva y m es
el módulo; X0

>0, a >0, c>0 y m>0 deben ser números enteros. La operación "mod m"
significa multiplicar Xi

por a, sumar c y dividir el resultado entre m para obtener el
residuo Xi+1.
• Es importante señalar que la ecuación recursiva del algoritmo congruencial lineal genera
una secuencia de números enteros S = {0,1,2,3, ...,m - 1},y que para obtener números
pseudo aleatorios en el intervalo (0,1) se requiere la siguiente ecuación:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace lineal
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void iniciar_Click(object sender, EventArgs e)
{
int X0, A, C, M, n=int.Parse(cantidad.Text);
float[] arreglo = new float[n];
X0 = int.Parse(x0.Text);
A = int.Parse(a.Text);
C = int.Parse(c.Text);
M = int.Parse(m.Text);
Console.WriteLine(X0.ToString() + " -- " + A.ToString()
+" -- "+ C.ToString() + " -- " + M.ToString());
for (int i1=0; i1<n; i1++)
{
float aux = (X0 * A + C);
aux %= M;
aux = aux / (M - 1);
arreglo[i1] = aux;
Console.WriteLine(i1.ToString() + " -- " + aux.ToString()
+ " X " + X0.ToString());
X0 = Convert.ToInt32(aux * M);
}
//ordenar el arreglo por medio de shell sort
float temp;
for (int salto = n / 2; salto > 0; salto /= 2)
{
for (int i1 = salto; i1 < n; i1 += 1)
{
temp = arreglo[i1];
int j;
for (j = i1; j >= salto && arreglo[j - salto] > temp; j -= salto)
{
arreglo[j] = arreglo[j - salto];
}
arreglo[j] = temp;
}
}
// mostrar el contenido del arreglo
for (int i=0; i<n; i++)
{
Console.WriteLine(i.ToString() + " -- " + arreglo[i].ToString());
}
}

private void salir_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}