Anda di halaman 1dari 19

ALGORITMO LINEAL Y ALGORITMO DE PRODUCTOS MEDIOS

CESAR CAMILO VARGAS CALLEJAS

FUNDACION UNIVERSITARIA JUAN DE CASTELLANOS

SIMULACIN DIGITAL

2017
ALGORITMO LINEAL Y ALGORITMO DE PRODUCTOS MEDIOS

CESAR CAMILO VARGAS CALLEJAS

PRESENTADO A: ING. ALEXANDE BARINAS

FUNDACION UNIVERSITARIA JUAN DE CASTELLANOS

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.

Estos algoritmos fueron implementados en un lenguaje de programacin llamado JavaScript


contando con su interfaz que fue diseada con HTML5 y con un framework de diseo BOOTSTRAP.
Esta aplicacin es de ambiente web, para su funcionamiento nicamente se necesitar de un
navegador web.

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

Bsicamente el proyecto consta de 3 componentes. DISEO, LGICA y MAQUETACION.

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

una vez llamamos el mtodo validar, automticamente llama a otro


mtodo llamado eliminarFilas,

, la cual
se encarga de limpiar la tabla que est en la interfaz grfica.

Luego de eso, se capturan los datos de los inputs y son


almacenados en ciertas variables como lo ilustra la figura del lado
izquierdo.

Hay que tener en cuenta que javascript reconoce el tipo de variable


que viene de ese input, es decir no hay que decirle que va a ser de
tipo entero o de tipo float, porque el mismo lo reconocer.
si n esta vaco pues que n sea igual a m.

si hay algn valor en G y K hace las


operaciones para calcular a y m, la
funcin Math.pow hace referencia a
una potencia, en este caso seria 2^g

y se envan esos resultados al input de a y m.

inicializa variables y guarda en un array en su posicin 0 la


semilla inicial.

se hace un do while para hacer n nmero de ciclos

{{ LGICA }}

Se hace la operacin para hallar xn y ri, se guarda en un array en su posicin i el valor de xn


Se hace una comparacin a ver si xn es igual a la semilla inicial, en caso que si sea igual, se
compara si contador = 0, este contador es para que en caso que ya haya encontrado un numero
antes, pues que este ya no sea de periodo completo debido a que se encuentro mas periodos.

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
}

ALGORITMO DE PRODUCTOS MEDIOS


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 .

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 }}

Este cdigo hace referencia a que x0 y x1 debe tener ms de 3 cifras

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

En caso que el mod de diferente de 0, lo que se le hace a la cadena es agregarle un 0 a la derecha

Y hace el mismo procedimiento de arriba.

Luego de haber calculado los numero, se procede a adicionarlos a la tabla y a mostrarlos

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) {

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();

var xo = x1 = cadena_completa = seccion = yi = 0;


var dato1 = dato2 = dato3 = nn = xi = nueva_cadena_yi = "";

var xo = $("#x0").val();

var x1 = $("#x1").val();

var n = $("#n").val();

var xoo = xo.valueOf();

var x11 = x1.valueOf();

var nt = xo.valueOf();

cadena_completa = nt.length;

if (xo.length == x1.length) {

if (xoo.length > 3 && x11.length > 3) {

/** BIEN */

for (var i = 0; i < n; i++) {

yi = xo * x1;

var nx1 = new String(x1.valueOf()); //STRING

var cadena_yi = new String(yi.valueOf()); //STRING

seccion = cadena_yi.length;

if (seccion % 2 == 0) {

var num1_seccion = (seccion - cadena_completa) / 2; //INT

var num2_seccion = num1_seccion + cadena_completa; // INT

nn = new String(yi.valueOf()); //STRING

xi = nn.substring(num1_seccion, num2_seccion); //STRING

xo = parseInt(nx1);

x1 = parseInt(xi);

} else {

nueva_cadena_yi = "0" + cadena_yi;

seccion = nueva_cadena_yi.length;

var num1_seccion = parseInt((seccion - cadena_completa) / 2); //INT

var num2_seccion = parseInt(num1_seccion + cadena_completa); //INT

nn = new String(nueva_cadena_yi);
xi = nn.substring(num1_seccion, num2_seccion);

xo = parseInt(nx1);

x1 = parseInt(xi);

var ri = "0," + xi;

var row = $("<tr class='otrasFilas'>");

row.append($("<td>" + i + "</td>")).append($("<td>" + yi + "</td>")).append($("<td>" + xi


+ "</td>")).append($("<td class='danger'>" + ri + "</td>")); //adiciona columnas a la fila actual

$("#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);

/** FIN BIEN */

} else {

alertify.error("El nmero de cifras para x0 o x1 debe ser mayor a 3");

} else {

alertify.error("x0 debe ser igual a x1");

function eliminarFilas() {

$(".otrasFilas").remove(); //Elimina todas las filas de la tabla


}

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.

Anda mungkin juga menyukai