{"id":1171,"date":"2017-09-13T16:51:21","date_gmt":"2017-09-13T21:51:21","guid":{"rendered":"http:\/\/naps.com.mx\/blog\/?p=1171"},"modified":"2020-12-30T14:17:28","modified_gmt":"2020-12-30T20:17:28","slug":"algoritmo-de-cuadrados-medios-para-la-generacion-de-numeros-pseudoaleatorios-implementacion-en-java","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/algoritmo-de-cuadrados-medios-para-la-generacion-de-numeros-pseudoaleatorios-implementacion-en-java\/","title":{"rendered":"Algoritmo de Cuadrados Medios para la generaci\u00f3n de n\u00fameros Pseudoaleatorios: Implementaci\u00f3n en Java"},"content":{"rendered":"<p>Veremos el Algoritmo de Cuadrados Medios y c\u00f3mo implementarlo utilizando el lenguaje de programaci\u00f3n Java.<\/p>\n<div id=\"attachment_1181\" style=\"width: 650px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2017\/09\/algoritmo-de-cuadrados-medios-imagen-articulo.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1181\" class=\"wp-image-1181 size-full\" title=\"algoritmo de cuadrados medios imagen articulo\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2017\/09\/algoritmo-de-cuadrados-medios-imagen-articulo.jpeg\" alt=\"algoritmo de cuadrados medios imagen articulo\" width=\"640\" height=\"425\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2017\/09\/algoritmo-de-cuadrados-medios-imagen-articulo.jpeg 640w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2017\/09\/algoritmo-de-cuadrados-medios-imagen-articulo-300x199.jpeg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><p id=\"caption-attachment-1181\" class=\"wp-caption-text\">Aprende a implementar en Java el algoritmo de cuadrados medios<\/p><\/div>\n<p><!--more--><\/p>\n<h2>N\u00fameros pseudoaletarios vs n\u00fameros genuinamente aleatorios<\/h2>\n<p>Un n\u00famero pseudo aleatorio es un n\u00famero que cumple las funciones de un n\u00famero aleatorio pero es generado a trav\u00e9s de un algoritmo matem\u00e1tico. Si conocemos el algoritmo que se utiliz\u00f3 para generar una secuencia de n\u00fameros pseudo aleatorios, as\u00ed como algunos valores iniciales, se puede predecir toda la secuencia de n\u00fameros que se van a generar.\u00a0 Por\u00a0 el contrario, es imposible predecir el valor siguiente de una secuencia de n\u00fameros genuinamente aleatorios. (Turqu\u00eda, 2013).<\/p>\n<h2>Algoritmos para la generaci\u00f3n de n\u00fameros pseudo aleatorios<\/h2>\n<p>Existen varios algoritmos, entre los que se cuentan: <strong>Algoritmo de cuadrados medios<\/strong>, algoritmos de productos medios, algoritmo de multiplicador constante, algoritmo lineal, algoritmo congruencia multiplicativo, algoritmo congruencia aditivo, algoritmos congruencia les no lineales.<\/p>\n<p>En el presente art\u00edculo se analizar\u00e1 el <strong>algoritmo de cuadrados medios<\/strong> y se implementar\u00e1 en el lenguaje de programaci\u00f3n Java.<\/p>\n<h2>Algoritmo de cuadrados medios<\/h2>\n<ol>\n<li>Se elige como <strong>valor semilla<\/strong> un n\u00famero de m\u00e1s de 3 d\u00edgitos (t=cantidad de d\u00edgitos del valor semilla)<\/li>\n<li>Se eleva ese n\u00famero al cuadrado.<\/li>\n<li>Al valor que result\u00f3, seleccione los<em> t<\/em> d\u00edgitos de en medio (si se requiere, utilice un 0 como primer d\u00edgito).<\/li>\n<li>Repetir desde el paso n\u00famero 2 tomando \u00e9ste\u00a0nuevo n\u00famero.<\/li>\n<\/ol>\n<h2>Implementaci\u00f3n Java<\/h2>\n<pre class=\"nums:true lang:java decode:true \">Scanner entrada = new Scanner(System.in);\r\nString semilla, snumero2, snumero3;\r\nint tam1, tam2,  i, primerc;\r\nlong numero1, numero2;\r\n        \r\nSystem.out.println(\"Escriba semilla: \");\r\nsemilla = entrada.next();\r\ntam1 = semilla.length();\r\nSystem.out.println(\"Cantidad de digitos:  \" + tam1);\r\nnumero1 = Integer.parseInt(semilla);\r\nfor (i=1; i&lt;=10; i++){\r\n      numero2 = (long)Math.pow(numero1,2);\r\n      snumero2 = Long.toString(numero2);\r\n      tam2 = snumero2.length();\r\n      primerc = (tam2-tam1) \/ 2;\r\n      snumero3 = snumero2.substring(primerc,primerc+tam1);\r\n      System.out.println(i + \". \" + snumero3);\r\n      numero1 = Integer.parseInt(snumero3);\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h2>Explicaci\u00f3n del programa<\/h2>\n<h3>Variables<\/h3>\n<p>El programa utiliza las siguientes variables:<\/p>\n<ul>\n<li><strong>entrada<\/strong>: Para poder leer datos de el teclado<\/li>\n<li><strong>semilla<\/strong>: Un valor de tipo cadena de caracteres que almacenar\u00e1 el valor semilla, es decir un n\u00famero de m\u00e1s de 4 d\u00edgitos para\u00a0 iniciar el algoritmo.<\/li>\n<li><strong>snumero2<\/strong>: el valor semilla elevado al cuadrado, en formato de cadena de caracteres.<\/li>\n<li><strong>snumero3<\/strong>: los n d\u00edgitos de en medio, en formato de cadena de caracteres.<\/li>\n<li><strong>numero1<\/strong>: el valor semilla, pero en formato num\u00e9rico entero.<\/li>\n<li><strong>numero2<\/strong>: el valor semilla elevado al cuadrado en formato num\u00e9rico entero<\/li>\n<li><strong>tam1<\/strong>: La longitud (o n\u00famero\u00a0 de d\u00edgitos ) del valor semilla<\/li>\n<li><strong>tam2<\/strong>: La longitud (o n\u00famero de d\u00edgitos del valor elevado al cuadrado.<\/li>\n<\/ul>\n<h3>Explicaci\u00f3n<\/h3>\n<ul>\n<li><strong>tam1 = semilla.length();<\/strong> Extrae la cantidad de d\u00edgitos del valor semilla<\/li>\n<li><strong>numero1 = Integer.parseInt(semilla)<\/strong>;\u00a0 Convierte el valor semilla a formato num\u00e9rico entero<\/li>\n<li><strong>for (i=1; i&lt;=10; i++){\u00a0<\/strong> \u00a0 Para producir 10 n\u00fameros pseudo aleatorios.<\/li>\n<li><strong>numero2 = (long)Math.pow(numero1,2);<\/strong>\u00a0 eleva el valor semilla al cuadrado<\/li>\n<li><strong>snumero2 = Long.toString(numero2);<\/strong> Convierte el valor que est\u00e1 elevado al cuadrado, en cadena de caracteres.<\/li>\n<li><strong>tam2 = snumero2.length();<\/strong> Cuenta la cantidad de d\u00edgitos que tiene el valor elevado al cuadrado<\/li>\n<li><strong>primerc = (tam2-tam1) \/ 2;<\/strong>\u00a0 Calcula cu\u00e1l ser\u00e1 el primer car\u00e1cter a extraer.<\/li>\n<li><strong>snumero3 = snumero2.substring(primerc,primerc+tam1);<\/strong> Extrae n caracteres (seg\u00fan halla sido la cantidad de d\u00edgitos que ten\u00eda el valor semilla)<\/li>\n<li><strong>numero1 = Integer.parseInt(snumero3);<\/strong> Convierte el valor extra\u00eddo en n\u00famero para hacer de nuevo el proceso.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Ejecuci\u00f3n del programa<\/h3>\n<div id=\"attachment_1178\" style=\"width: 650px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2017\/09\/algoritmo-cuadrados-medios.gif\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1178\" class=\"wp-image-1178 size-full\" title=\"algoritmo de cuadrados medios\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2017\/09\/algoritmo-cuadrados-medios.gif\" alt=\"algoritmo de cuadrados medios\" width=\"640\" height=\"320\" \/><\/a><p id=\"caption-attachment-1178\" class=\"wp-caption-text\">Algoritmo de cuadrados medios implementado en Java<\/p><\/div>\n<p>Si deseas que aparezcan en formato decimal entre 0 y 1, puedes utilizar estas instrucciones:<\/p>\n<p>numeror = Double.parseDouble(\u00ab.\u00bb+snumero3);<\/p>\n<p>System.out.println(i + \u00ab. \u00bb + snumero3 + \u00ab(\u00bb + numeror + \u00ab)\u00bb);<\/p>\n<p>&nbsp;<\/p>\n<p>Este algoritmo nos muestra una forma de generar n\u00fameros pseudo aleatorios en Java. Los n\u00fameros pseudo aleatorios son una parte importante en la elaboraci\u00f3n de modelos de simulaci\u00f3n.<\/p>\n<p>Si deseas ver \u00e9ste algoritmo implementado en Python, \u00a0puedes consultarlo aqu\u00ed:<a href=\"https:\/\/naps.com.mx\/blog\/algoritmo-de-cuadrados-medios-en-python\/\">\u00a0Algoritmo de Cuadrados Medios en Python para la generaci\u00f3n de n\u00fameros pseudoaleatorios.<\/a><\/p>\n<h3>Bibliograf\u00eda<\/h3>\n<ol>\n<li>Coss(1996) <a href=\"https:\/\/books.google.com.mx\/books?id=iY6dI3E0FNUC&amp;printsec=frontcover&amp;hl=es&amp;source=gbs_ge_summary_r&amp;cad=0#v=onepage&amp;q&amp;f=false\" target=\"_blank\" rel=\"noopener\">Simulaci\u00f3n, un enfoque pr\u00e1ctico<\/a>. Ed. Limusa.<\/li>\n<li>Turqu\u00eda Moraleja (2013). <a href=\"https:\/\/books.google.com.mx\/books?id=BZBGAgAAQBAJ&amp;printsec=frontcover&amp;dq=modelado+y+simulacion&amp;hl=es&amp;sa=X&amp;ved=0ahUKEwj01-WLkaPWAhUL2WMKHYx9DtYQ6AEIMzAC#v=onepage&amp;q=modelado%20y%20simulacion&amp;f=false\" target=\"_blank\" rel=\"noopener\">Modelado y simulaci\u00f3n de eventos discretos<\/a>. Editorial UNED.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veremos el Algoritmo de Cuadrados Medios y c\u00f3mo implementarlo utilizando el lenguaje de programaci\u00f3n Java.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[216],"tags":[97,213,53],"class_list":["post-1171","post","type-post","status-publish","format-standard","hentry","category-simulacion-ciencias","tag-ejercicios-java","tag-numeros-pseudo-aleatorios","tag-simulacion"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=1171"}],"version-history":[{"count":12,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1171\/revisions"}],"predecessor-version":[{"id":2370,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1171\/revisions\/2370"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=1171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=1171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=1171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}