SIMULACIN DIGITAL
2017
ALGORITMO LINEAL Y ALGORITMO DE PRODUCTOS MEDIOS
SIMULACIN DIGITAL
2017
Tabla de contenido
INTRODUCCION ................................................................................................................................... 4
OBJETIVOS ........................................................................................................................................... 4
OBJETIVO GENERAL ......................................................................................................................... 4
OBJETIVOS ESPECIFICOS .................................................................................................................. 4
DESARROLLO ....................................................................................................................................... 4
ALGORITMO LINEAL ........................................................................................................................ 5
CDIGO ........................................................................................................................................... 9
ALGORITMO DE PRODUCTOS MEDIOS.......................................................................................... 12
CONCLUSIONES ................................................................................................................................. 19
INTRODUCCION
Con este informe se quiere implementar dos algoritmos Algoritmo Lineal Algoritmo de Productos
Medios para generar nmeros aleatorios entre un rango de 0 y 1 con el fin de saber cmo es su
comportamiento para as poder hacer simulaciones de cualquier tipo, por ejemplo, las simulaciones
para los aeropuertos, para medicina, para empresas de industria, entre muchos ms.
OBJETIVOS
OBJETIVO GENERAL
Desarrollar los algoritmos (lineal y productos medios) con lenguaje de programacin
JavaScript.
OBJETIVOS ESPECIFICOS
Verificar que dichos algoritmos cumplan con su funcionamiento
Minimizar los tiempos de memoria que se llevan a la hora de generar un nmero superior
10000 debido a que tarda 15 segundos en generar los nmeros aleatorios.
Tener claro el concepto de cada algoritmo con sus correspondientes frmulas para
aplicarlas en la programacin.
DESARROLLO
El diseo del proyecto se encuentra en la carpeta css, las lgicas de los algoritmos se encuentran
en la carpeta js y la maquetacin se encuentran en dos ficheros HTML como se observa en la
siguiente imagen.
Nos centraremos nicamente en la lgica del programa, es decir la carpeta js que contiene toda la
programacin de estos algoritmos para que cumplan su funcin.
Dentro de esta carpeta, se encuentran 5 ficheros, las cuales 3 de ellas hacen parte de la lgica del
diseo de la aplicacin, y 2 ficheros hacen parte de la lgica de cada algoritmo.
El fichero funciones es el encargado de hacer todas las operaciones necesarias para que el
algoritmo lineal cumpla con su funcin.
El fichero funciones1 es el encargado de hacer todas las operaciones necesarias para que el
algoritmo de productos medios cumpla con su funcin.
ALGORITMO LINEAL
Inicialmente declaramos una funcin para que cuando se llame este fichero desde el archivo .html
se ejecute la funcin readyFN, la cual se encarga de ocultar la tabla y tenga
una animacin con el scroll a la hora de dar clic sobre este botn .
Una vez el usuario escribar valores en esos cuadros de texto y de clic en calcular,
automticamente ste botn llama al evento validar();
Index.html
Funciones.js
, la cual
se encarga de limpiar la tabla que est en la interfaz grfica.
{{ LGICA }}
Si no llego a su fin o no es periodo completo entonces lo que hace el siguiente cdigo es aumentar
la semilla es decir que la semilla inicial ya no va a valer como antes, si no que tendr la semilla x1,
y si no encuentra esa semilla pasa a ser semilla x2, lo que hace que aumente esa fila es la variable
llamada Fila++.
Esta lnea de cdigo sirve para pegar fila por fila en la tabla
Una vez termine de hacer el ciclo do while, muestra la tabla en el html y adems baja a esa seccin
automaticamente
CDIGO
$(document).ready(readyFn);
function readyFn() {
$("#Tabla").hide(0);
$('.ir-arriba').click(function() {
$('body, html').animate({
scrollTop: '0px'
}, 300);
});
$(window).scroll(function() {
if ($(this).scrollTop() > 0) {
$('.ir-arriba').slideDown(300);
} else {
$('.ir-arriba').slideUp(300);
}
});
}
function SoloNumeros(e) {
var keynum = window.event ? window.event.keyCode : e.which;
if ((keynum == 8) || (keynum == 46)) return true;
return /\d/.test(String.fromCharCode(keynum));
}
function limpiar() {
x0.value = "";
a.value = "";
c.value = "";
m.value = "";
g.value = "";
k.value = "";
n.value = "";
}
function validar() {
eliminarFilas();
//VARIABLE n
var n = $("#n").val();
//VARIABLE xo
var xo = $("#x0").val();
//VARIABLE a
var a = $("#a").val();
//VARIABLE c
var c = $("#c").val();
//VARIABLE m
var m = $("#m").val();
var g = $("#g").val();
var k = $("#k").val();
/***
*/
if (n == '') {
n = m;
}
/***************************
*/
if (g != '' && k != '') { //VERIFICA SI HAY ALGO EN G Y K
a = 1 + (4 * k);
m = Math.pow(2, g);
$("#a").val(a);
$("#m").val(m);
}
/*
***************************/
var xn, ri = 0;
var Fila = 1;
var Contador = 0;
var array1 = [0];
array1[0] = parseFloat(xo);
xn = array1[0];
var i = 0;
var total = 0;
do {
i++;
/* OPERACION */
xn = (((a * xn) + parseFloat(c)) % m); //Saca el residuo
ri = parseFloat(xn / (m - 1)); // Halla ri
array1[i] = xn;
/*************************
**************************
CALCULA EL ULTIMO VALOR DEL CICLO A VER SI ES EL MISMO QUE X0
*************************/
if (xn == xo) { //ENCONTRO NUMERO?
var row = $("<tr class='otrasFilas danger'>"); //adiciona una nueva fila
if (Contador == 0) {
if (m == i) { //ES PERIODO COMPLETO?
alertify.log("Periodo COMPLETO; El periodo es de " + (i - Fila + 1) + ";");
} else {
alertify.log("El periodo es de " + (i - Fila + 1));
}
Contador++;
} else {
alertify.log("El periodo es de " + (i - Fila + 1) + ";");
}
total++;
} else { //NO LLEGO A SU FIN O NO ES PERIODO COMPLETO
//adiciona una nueva fila
if (i == n) { //ultima fila
if (Contador == 0) {
Fila++;
var row = $("<tr class='otrasFilas'>");
row.append($("<td>" + i + "</td>")).append($("<td>" + xn + "</td>")).append($("<td>"
+ ri + "</td>")); //adiciona columnas a la fila actual
$("#Tabla tbody").append(row);
var row = $("<tr class='otrasFilas'>");
row.append($("<td>--------</td>")).append($("<td>NUEVA SEMILLA: " + array1[Fila - 1]
+ "</td>")).append($("<td>-------------</td>")); //adiciona columnas a la fila actual
$("#Tabla tbody").append(row);
if (Fila == n) {
array1 = [''];
console.log("array1---", array1);
alertify.log("NO HAY PERIODO");
}
i = Fila - 1;
console.log("FIla ", i);
xn = array1[Fila - 1];
console.log("xn", xn);
//array1 = [];
array1[0] = xn;
xn = array1[Fila];
xo = array1[0];
i++;
//xn = array1[0];
console.log("array1", array1);
console.log("xo", xo);
var row = $("<tr class='otrasFilas'>");
total = 0;
} else {
var row = $("<tr class='otrasFilas'>");
}
} else {
var row = $("<tr class='otrasFilas'>");
}
}
/*************************
**************************
**************************/
console.log("i" + i + "\n");
row.append($("<td>" + i + "</td>")).append($("<td>" + xn + "</td>")).append($("<td>" + ri +
"</td>")); //adiciona columnas a la fila actual
$("#Tabla tbody").append(row); //pone las filas enla tabla
} while (i < n);
if (total != 1) {
alertify.success("El periodo se repite " + total + " veces");
}
$("#Tabla").show(0); //Muestra la tabla
$('html,body').animate({
scrollTop: $("#Tabla").offset().top
}, 500);
}
function eliminarFilas() {
$(".otrasFilas").remove(); //Elimina todas las filas de la tabla
}
Declaracin de variables
Y asignacn de variables.
trae el valor de
lo que digitan en x0.
{{ cdigo }}
lo anterior, hace referencia a que x0 debe tener el mismo valor de caracteres que x1 ejemplo x0 =
12345 x1= 45323. Esto sera correcto.
{{cdigo }}
Aqu se hace el recorrido hasta n veces, se multiplica la semilla xo * x1 y ese sera el valor de y1
Luego convierte x1 a string para que ms adelante se pueda contar el nmero de caracteres que
tiene esa cadena.
Seccin es la cadena completa del resultado de la multiplicacin, y se le saca el mod, si el mod = 0
quiere decir que es nmero par. Por consiguiente, se le puede sacar la mitad de los nmeros. La
variable num1_seccion se encarga de guardar el primer nmero de la cadena para poder tomar
esa variable para sacar su nmero. Por ejemplo 23567856 entonces lo que hace num1_seccion y
num2_seccion es sacar los numero del medio de dicha cadena a travs de la funcin substring
Si xi es decir los nmeros del centro ejemplo: 56789543 son 0, pues hasta ah terminara el ciclo
por ejemplo en este caso seria 12000053 y por qu se acaba el ciclo? Pues porque esa ser la
nueva semilla y tendra el valor de 0000 y al multiplicarla pues dara 0 por consiguiente todo dara
0 de ah en adelante
$(document).ready(readyFn);
function readyFn() {
$("#Tabla").hide(0);
$('.ir-arriba').click(function() {
$('body, html').animate({
scrollTop: '0px'
}, 300);
});
$(window).scroll(function() {
if ($(this).scrollTop() > 0) {
$('.ir-arriba').slideDown(300);
} else {
$('.ir-arriba').slideUp(300);
});
function SoloNumeros(e) {
return /\d/.test(String.fromCharCode(keynum));
function limpiar() {
x0.value = "";
a.value = "";
c.value = "";
m.value = "";
g.value = "";
k.value = "";
n.value = "";
function validar() {
eliminarFilas();
var xo = $("#x0").val();
var x1 = $("#x1").val();
var n = $("#n").val();
var nt = xo.valueOf();
cadena_completa = nt.length;
if (xo.length == x1.length) {
/** BIEN */
yi = xo * x1;
seccion = cadena_yi.length;
if (seccion % 2 == 0) {
xo = parseInt(nx1);
x1 = parseInt(xi);
} else {
seccion = nueva_cadena_yi.length;
nn = new String(nueva_cadena_yi);
xi = nn.substring(num1_seccion, num2_seccion);
xo = parseInt(nx1);
x1 = parseInt(xi);
$("#Tabla tbody").append(row);
$("#Tabla").show(0);
if (xi == 0) {
alertify.error("El nmero termin en " + i + " por que los medios son 0");
i = n;
$('html,body').animate({
scrollTop: $("#Tabla").offset().top
}, 500);
} else {
} else {
function eliminarFilas() {
CONCLUSIONES
Se aprendi detalladamente el correcto funcionamiento de los algoritmos.
Se aprendi a minimizar el tiempo de ejecucin a la hora de ejecutar el algoritmo lineal
con un nmero grande.
Se obtuvo mejor perspectiva para hacer una simulacin a una empresa o a un sistema.