N̼meros primos РJavascript

publicado por: Anonymous

Tengo el siguiente código el cuál quiero adaptar para colocar números primos entre 1 y 1001. El detalle es que no encuentro como evitar el salto cuando no cumple las condiciones y por ende me dice undefined.

Probe colocando dos variables en el primer for, pero no me lo permite.
Los números que me muestra están bien, lo que está mal es dejar que escriba los undefined, porque está haciendo el salto.

_x000D_

_x000D_

<!DOCTYPE html>_x000D_
<html lang="en">_x000D_
<head>_x000D_
    <meta charset="UTF-8">_x000D_
    <meta name="viewport" content="width=device-width, initial-scale=1.0">_x000D_
    <meta http-equiv="X-UA-Compatible" content="ie=edge">_x000D_
    <title>Array</title>_x000D_
    <link rel="stylesheet" href="css/style.css">_x000D_
</head>_x000D_
<script>_x000D_
    let numeros = new Array (1001);_x000D_
function primo()_x000D_
	{_x000D_
    for(let i=2; i < 1001 ; i++){_x000D_
            let contador = 0;_x000D_
_x000D_
            for (let j=1; j<=i; j++){_x000D_
                if (i%j == 0)_x000D_
                contador++;_x000D_
            }_x000D_
            if (contador==2){_x000D_
                numeros[i] = i;       _x000D_
            }_x000D_
_x000D_
        }_x000D_
        imprimirPrimo();_x000D_
    }_x000D_
_x000D_
function imprimirPrimo(){_x000D_
    for (let i=0; i<numeros.length; i++){_x000D_
        document.getElementById('resultado').innerHTML += numeros[i];_x000D_
        if(!isUltimoNumero(i, numeros)){_x000D_
            document.getElementById('resultado').innerHTML += ", ";_x000D_
        }_x000D_
    }_x000D_
}_x000D_
function isUltimoNumero(pos, array){_x000D_
    if((pos + 1) != array.length){_x000D_
        return false;_x000D_
    }_x000D_
    return true;_x000D_
}_x000D_
</script>_x000D_
<body>_x000D_
        <div id="contenidoCentro">_x000D_
                <div id="ContenidoContenedor">_x000D_
                        <div id="ContenidoColumna1">_x000D_
                            <h1 class="blanco">Array</h1>_x000D_
            _x000D_
                        </div>_x000D_
                    </div>_x000D_
    _x000D_
                    <div id="ContenidoContenedor">_x000D_
                            <div id="ContenidoColumna2">_x000D_
                                <h2>(Array) Se necesita un sistema que almacena automáticamente todos los números primos desde el_x000D_
                                        uno hasta el mil uno; recordando que un número primo es aquel que solamente es divisible entre_x000D_
                                        uno y sí mismo._x000D_
                                        </h2>_x000D_
                                <h3>Instrucciones: Haz click en el botón "Conoce los números primos entre 1 y 1001" y automáticamente se imprimirán.</em> </h3>_x000D_
                                <center>_x000D_
                                        _x000D_
                                        <input type="button" onclick="primo()" value="Primo">_x000D_
                                         _x000D_
                                        <div id="resultado"></div>_x000D_
                                </center>_x000D_
                            </div>_x000D_
                    </div>    _x000D_
     _x000D_
        _x000D_
        </div>_x000D_
_x000D_
        _x000D_
</body>_x000D_
</html>

_x000D_

_x000D_

_x000D_

solución

_x000D_

_x000D_

<!DOCTYPE html>_x000D_
<html lang="en">_x000D_
<head>_x000D_
    <meta charset="UTF-8">_x000D_
    <meta name="viewport" content="width=device-width, initial-scale=1.0">_x000D_
    <meta http-equiv="X-UA-Compatible" content="ie=edge">_x000D_
    <title>Array</title>_x000D_
    <link rel="stylesheet" href="css/style.css">_x000D_
</head>_x000D_
<script>_x000D_
    let numeros = new Array (1001);_x000D_
function primo()_x000D_
	{_x000D_
    for(let i=2; i < 1001 ; i++){_x000D_
            let contador = 0;_x000D_
_x000D_
            for (let j=1; j<=i; j++){_x000D_
                if (i%j == 0)_x000D_
                contador++;_x000D_
            }_x000D_
            if (contador==2){_x000D_
                numeros[i] = i;       _x000D_
            }_x000D_
_x000D_
        }_x000D_
        imprimirPrimo();_x000D_
    }_x000D_
_x000D_
function imprimirPrimo(){_x000D_
    for (let i=0; i<numeros.length; i++){_x000D_
        if(numeros[i] != null) {_x000D_
          document.getElementById('resultado').innerHTML += numeros[i];_x000D_
          if(!isUltimoNumero(i, numeros)){_x000D_
              document.getElementById('resultado').innerHTML += ", ";_x000D_
          }_x000D_
        }_x000D_
    }_x000D_
}_x000D_
function isUltimoNumero(pos, array){_x000D_
    if((pos + 1) != array.length){_x000D_
        return false;_x000D_
    }_x000D_
    return true;_x000D_
}_x000D_
</script>_x000D_
<body>_x000D_
        <div id="contenidoCentro">_x000D_
                <div id="ContenidoContenedor">_x000D_
                        <div id="ContenidoColumna1">_x000D_
                            <h1 class="blanco">Array</h1>_x000D_
            _x000D_
                        </div>_x000D_
                    </div>_x000D_
    _x000D_
                    <div id="ContenidoContenedor">_x000D_
                            <div id="ContenidoColumna2">_x000D_
                                <h2>(Array) Se necesita un sistema que almacena automáticamente todos los números primos desde el_x000D_
                                        uno hasta el mil uno; recordando que un número primo es aquel que solamente es divisible entre_x000D_
                                        uno y sí mismo._x000D_
                                        </h2>_x000D_
                                <h3>Instrucciones: Haz click en el botón "Conoce los números primos entre 1 y 1001" y automáticamente se imprimirán.</em> </h3>_x000D_
                                <center>_x000D_
                                        _x000D_
                                        <input type="button" onclick="primo()" value="Primo">_x000D_
                                         _x000D_
                                        <div id="resultado"></div>_x000D_
                                </center>_x000D_
                            </div>_x000D_
                    </div>    _x000D_
     _x000D_
        _x000D_
        </div>_x000D_
_x000D_
        _x000D_
</body>_x000D_
</html>

_x000D_

_x000D_

_x000D_

En la función imprimirPrimo(), en el momento de pintar el número puedes comprobar si la posición del array tiene o no tiene nada (es igual a NULL) y en caso afirmativo entonces lo pintas, en caso contrario no haces nada y pasas al siguiente.

Solución 2

_x000D_

_x000D_

<!DOCTYPE html>_x000D_
<html lang="en">_x000D_
<head>_x000D_
    <meta charset="UTF-8">_x000D_
    <meta name="viewport" content="width=device-width, initial-scale=1.0">_x000D_
    <meta http-equiv="X-UA-Compatible" content="ie=edge">_x000D_
    <title>Array</title>_x000D_
    <link rel="stylesheet" href="css/style.css">_x000D_
</head>_x000D_
<script>_x000D_
    let numeros = new Array ();_x000D_
function primo()_x000D_
	{_x000D_
    for(let i=2; i < 1001 ; i++){_x000D_
            let contador = 0;_x000D_
_x000D_
            for (let j=1; j<=i; j++){_x000D_
                if (i%j == 0)_x000D_
                contador++;_x000D_
            }_x000D_
            if (contador==2){_x000D_
                numeros.push(i);  _x000D_
            }_x000D_
_x000D_
        }_x000D_
        imprimirPrimo();_x000D_
    }_x000D_
_x000D_
function imprimirPrimo(){_x000D_
    for (let i=0; i<numeros.length; i++){_x000D_
        document.getElementById('resultado').innerHTML += numeros[i];_x000D_
        if(!isUltimoNumero(i, numeros)){_x000D_
            document.getElementById('resultado').innerHTML += ", ";_x000D_
        }_x000D_
    }_x000D_
}_x000D_
function isUltimoNumero(pos, array){_x000D_
    if((pos + 1) != array.length){_x000D_
        return false;_x000D_
    }_x000D_
    return true;_x000D_
}_x000D_
</script>_x000D_
<body>_x000D_
        <div id="contenidoCentro">_x000D_
                <div id="ContenidoContenedor">_x000D_
                        <div id="ContenidoColumna1">_x000D_
                            <h1 class="blanco">Array</h1>_x000D_
            _x000D_
                        </div>_x000D_
                    </div>_x000D_
    _x000D_
                    <div id="ContenidoContenedor">_x000D_
                            <div id="ContenidoColumna2">_x000D_
                                <h2>(Array) Se necesita un sistema que almacena automáticamente todos los números primos desde el_x000D_
                                        uno hasta el mil uno; recordando que un número primo es aquel que solamente es divisible entre_x000D_
                                        uno y sí mismo._x000D_
                                        </h2>_x000D_
                                <h3>Instrucciones: Haz click en el botón "Conoce los números primos entre 1 y 1001" y automáticamente se imprimirán.</em> </h3>_x000D_
                                <center>_x000D_
                                        _x000D_
                                        <input type="button" onclick="primo()" value="Primo">_x000D_
                                         _x000D_
                                        <div id="resultado"></div>_x000D_
                                </center>_x000D_
                            </div>_x000D_
                    </div>    _x000D_
     _x000D_
        _x000D_
        </div>_x000D_
_x000D_
        _x000D_
</body>_x000D_
</html>

_x000D_

_x000D_

_x000D_

Se podría optimizar, claro está. La primera manera que te propuse sería válida para mostrar un listado. Si luego quisieras operar con ese array de números primos lo más óptimo sería controlar la inserción del elemento. En el código inicial que presentas, se usa la i tanto como índice del array como para el valor, lo que provocaba que hubiese índices vacíos entre inserción e inserción.

Para solucionarlo opté por usar la función push(), que permite insertar un valor al final del array, de esa forma cada nueva inserción va a ir a continuación de la siguiente, no generando espacios vacíos.

Para hacerlo tuve que cambiar la manera de inicializar la variable numeros quitándole la longitud predeterminada, ya que en un array de longitud fija no es posible usar este método.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *