Ripetizione codice

di il
5 risposte

Ripetizione codice

Ciao a tutti.Ho scritto questo codice che popola un array con 100 numeri casuali. L'esercizio richiede che si deve inserire un numero e come risultato si devono azzerare tutti gli elementi dell'array che contengono i suoi multipli e continuare fino ad azzerare tutti e 100 gli elementi dell'array. Scritto cosi il codice funziona ma solo nel momento in cui premo il pulsante una volta sola. Per inserire un'altro numero devo aggiornare la pagina. Non riesco a fare questa operazione consecutivamente.Spero di essere stato chiaro.

<htm>
<body>

    <input type="text" id="num">
    <input type="button" value="Elabora" onclick="azzera()">
    <script src="azzecca_azzera.js"></script>
    <div id="vis"></div>
</body>
</htm>

function azzera(){
    const    num=document.getElementById("num").value
    const    arr=[]
    let      num_cas
    let      num_fis

    for(let i=0; i<100; i++){
        num_cas=Math.floor(Math.random() * 50) + 1
         arr.push(num_cas)
         num_fis = arr[i]
         if( num_fis % num){
            num_fis=0
         }
        document.getElementById("vis").innerHTML += num_fis +"<br>"
    }
}

5 Risposte

  • Re: Ripetizione codice

    Ho fatto delle piccole modifiche vedi se ora funziona meglio
    Ti consiglio di utilizzare nomi di variabili in inglese ed in formato camel-case (num_cas potrebbe essere numRnd),
    impara a dichiarare nel giusto modo il riferimento di un elemento, invece di scrivere :
    
    const num = document.getElementById("num").value
    
    scrivi:
    In questo modo non perdi il riferimento su quell'elemento.
    
    const num = document.getElementById("num")
    num.value
    
    
     	const vis = document.getElementById("vis")
            const num = document.getElementById("num")
            let num_cas = null
            let num_fis = null
            let arr = []
    
            function azzera() {
                vis.innerHTML = ""
                arr = []
                for (let i = 0; i < 100; i++) {
                    num_cas = Math.floor(Math.random() * 50) + 1
                    arr.includes(num_cas) ? null : arr.push(num_cas)
                }
                arr.sort((a, b) => a - b).forEach(v => {
                    num_fis = v
                    if (num_fis % num.value) {
                        return
                    } else {
                        vis.innerHTML += num_fis + "<br>"
                    }
                })
            }
    
  • Re: Ripetizione codice

    Grazie. Molto chiaro.Mi metto subito all'opera.
    Saluti
  • Re: Ripetizione codice

    Figurati, volevo solo aggiungere che si potrebbe sostituire il ternario con || (OR operator) visto che dobbiamo verificare solo in un senso.
    
    	// arr.includes(num_cas) ? null : arr.push(num_cas)
                arr.includes(num_cas) || arr.push(num_cas) // expr1 || expr2  : se vero sarà expr1 mentre se falso sarà expr2
    
    Che tradotto significa che se il valore in "num_cas" mi rende la prima espressione (expr1) falsa dunque non è presente nell'array "arr", solo in quel caso verrà eseguita expr2, questo per evitare eventuali doppioni nell' array.

    Ciao e buon coding.
  • Re: Ripetizione codice

    Ciao ninja72. Il codice funziona perchè crea nell'array i numeri casuali. Però l'esercizio richiede di creare un array di 100 elementi con numeri casuali. Può succedere quindi che ci siano dei doppioni. Dopodichè chiede che se ci sono dei multipli del numero che inserisce l'utente questi vanno azzerati e continuando a inserire dei numeri dell'utente l'array alla fine deve essere composto solo di zeri. A me funziona solo la prima volta che premo il bottone, successivamente devo aggiornare la pagina per ricominciare. Invece inserendo ogni volta un numero premendo il pulsante deve azzerare mano a mano l'array. Se ti può essere utile posto il link dell'esercizio.
    https://github.com/AlbertoOlla/esercizi-di-programmazione-javascript/blob/master/esercizi-array/azzecca-e-azzera.js
  • Re: Ripetizione codice

    Inizialmente l'esercizio non era ben chiaro , ora spero di aver capito bene.

    l'esempio è x10 elementi ma è facilmente modificabile.
    
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    
        <style>
    
        </style>
    </head>
    
    <body>
    
        <input type="text" id="num">
        <input type="button" value="Elabora" id="elabora">
        <div id="vis"></div>
    
        <script>
            const vis = document.getElementById("vis")
            const num = document.getElementById("num")
            const elabora = document.getElementById("elabora")
            let num_cas = null
            let num_fis = null
            let arr = []
            let countZero = 0
    
            elabora.addEventListener('click', app)
    
            function app() {
                countZero === 10 ? azzera() : azzecca()
            }
    
            function numbersRnd() {
                for (let i = 0; i < 10; i++) {
                    num_cas = Math.floor(Math.random() * 50) + 1
                    arr.push(num_cas)
                }
                vis.innerHTML += JSON.stringify(arr) + "<br><br>"
            }
            numbersRnd()
    
            function azzecca() {
                arr.forEach((v, idx) => {
                    num_fis = v
                    if (num_fis % num.value) {
                        return
                    } else if (num_fis !== 0) {
                        arr[idx] = 0
                        countZero++
                    } 
                })
                vis.innerHTML += arr + "<br>"
                console.log(arr, countZero)
            }
    
            function azzera() {
                alert("game over")
                vis.innerHTML = ""
                arr = []
                countZero = 0
                numbersRnd()
            }
        </script>
    </body>
    
    </html>
    
Devi accedere o registrarti per scrivere nel forum
5 risposte