Problema cicli for

di il
12 risposte

Problema cicli for

Ciao a tutti. Sto facendo il solito esercizio sui cicli. Ho un array cosi composto:
const day=["Lunedi","Martedi","Mercoledi","Giovedi","Venerdi","Sabato","Domenica"];

Non riesco a ciclare l'array a partire da una qualsiasi posizione. Mi spiego. Devo poter partire per esempio da Mercoledi, arrivare alla fine e ricominciare dall'inizio, Lunedi e continuare per tutto l'array un numero definito di volte. Cosi mi sembra almeno di aver capito l'esercizio che è questo per chi volesse darci un'occhiata:
https://github.com/AlbertoOlla/esercizi-di-programmazione-javascript/blob/master/esercizi-cicli/il-calendario-mediocre.js

12 Risposte

  • Re: Problema cicli for

    Ci sono n-mila soluzioni possibili. una e' basata sulla aritmetica modulare

    https://it.m.wikipedia.org/wiki/Aritmetica_modular
  • Re: Problema cicli for

    Il ciclo va da 1 al numero di giorni.

    Individua l'indice da cui devi partire per il giorno della settimana e aumentano sempre durante il ciclo tenendo in considerazione sempre il resto della divisione per 7
  • Re: Problema cicli for

    Esempio spartano:
    
     const giorni = ["Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"]
    
            let indexGiorno = null
    
            function calendario(giorniMese, giornoSettimana) {
                
                for (let i = 0; i < giorniMese; i++) {
                    indexGiorno ??= giornoSettimana
                    console.log(i + 1, giorni[indexGiorno])
                    indexGiorno < giorni.length - 1 ? indexGiorno++ : indexGiorno = 0
                }
            }
            calendario(31, 5)
    
  • Re: Problema cicli for

    Grazie ninja. Funziona perfettamente con la console. Ci sono però alcune cose che non capisco e non riesco a riportare utilizzando il Dom. Che significa questa istruzione?
    indexGiorno ??= giornoSettimana

    Non riesco a riportare questa riga:

    console.log(i + 1, giorni[indexGiorno])

    nel DOM. Ho provato con questa ma non va
    document.getElementById("vis2").innerHTML= day[giorno_set] +i;

    Questo è il codice che sto provando:
    
    function elabora(){
        const day=["Lunedi","Martedi","Mercoledi","Giovedi","Venerdi","Sabato","Domenica"];
        let giorno_set=null;
        let giorni=parseInt(document.getElementById("giorni").value);
        let giorno=parseInt(document.getElementById("giorno").value);
        let sett;
        
        
        for(let i=0;  i <= giorni;i++){
            giorno_set ??= giorno;
            giorno_set < day.lenght-1  ? giorno_set++ : giorno_set=0;
            document.getElementById("vis2").innerHTML=  day[giorno_set] +i;
         }
        
             document.getElementById("vis1").innerHTML="Input giorni= "+ giorni;
      }
    
  • Re: Problema cicli for

    ??= è un operatore logico di assegnazione, in caso la variabile sia null o undefined assegna il dato.

    Non ho ben chiaro come voi esporre i dati sul DOM, ma potresti semplicemente implementare una funzione che si occupa di fare la presentazione a schermo, es:
    
    <!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>
    </head>
    
    <body>
    
        <div id="view"></div>
    
        <script>
            const viewDom = document.getElementById('view')
            const giorni = ["Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"]
    
            let indexGiorno = null
            let div = null
    
            function viewFn(i, indexGiorno) {
                div = document.createElement('div')
                div.textContent = `${i + 1} ${giorni[indexGiorno]}`
                viewDom.appendChild(div)
            }
    
            function calendario(giorniMese, giornoSettimana) {
                for (let i = 0; i < giorniMese; i++) {
                    indexGiorno ??= giornoSettimana
                    console.log(i + 1, giorni[indexGiorno])
                    viewFn(i, indexGiorno)
                    indexGiorno < giorni.length - 1 ? indexGiorno++ : indexGiorno = 0
                }
            }
            calendario(31, 5)
    
        </script>
    </body>
    
    </html>
    
  • Re: Problema cicli for

    Finalmente ora funziona come richiesto dall'esercizio. Il codice che ho postato prima aveva un errore di battitura. Posto il codice per chiarezza:
    
    function elabora(){
        const day=["Lunedi","Martedi","Mercoledi","Giovedi","Venerdi","Sabato","Domenica"];
        let giorno_set=null;
        let giorni=parseInt(document.getElementById("giorni").value);
        let giorno=parseInt(document.getElementById("giorno").value);
        let sett="";
        
            for(let i=0;  i < giorni; i++){
            giorno_set ??= giorno;
            sett += (i+1) +"   "+day[giorno_set]+"<br>";
            giorno_set  < day.length-1  ? giorno_set++ : giorno_set=0;
            document.getElementById("vis1").innerHTML="Input giorni= "+ giorni;
            document.getElementById("vis2").innerHTML=  sett ;
            }
    }
    
  • Re: Problema cicli for

    Ciao a tutti. Debbo ciclare dei numeri da 1 a 100, però ogni 10 numeri devo andare a capo. Come al solito non riesco a trovare la soluzione per andare a capo ogni 10. Mi sfugge il metodo da adottare sto provando questo codice e ovviamente ho fatto dei tentativi senza riuscirci. Posto il codice fatto fin'ora chiedendo umilmente un aiuto. Grazie
    
    let x=""
    let y=0
    const arr=[]
    
    function visualizza(){
       
        for (let i=0; i <= 100; i++){
         arr.push(i)
         if(arr[i] <10){
              x += i + " " 
              document.getElementById("vis").innerHTML= x
         
         }else if(arr[i] <20){
              x += i + " " 
              document.getElementById("vis").innerHTML= x    
         }else if(arr[i] <30){
              x += i + " " 
              document.getElementById("vis").innerHTML= x    
         }
         }
    } 
    
  • Re: Problema cicli for

    Banalmente usa un altro contatore che parte da zero e che aumenta. Controlli se è arrivato a 10 vai a capo e lo rimetti a zero.

    P.S. per problemi diversi devi usare thread diversi. Non fare tutte le domande in un thread
  • Re: Problema cicli for

    Potresti utilizzare il "remainder operator (%)" , ti posto due tipi di soluzione, mi scuso con i moderatori se posto qui.
    ps. come dice Oregon per una nuova discussione apri un nuovo post.
    
     const viewDOM = document.getElementById('view')
            let tmpText = ""
    
            // function visualizza() {
            //     for (let i = 1; i <= 100; i++) {
            //         if (i % 10 === 0) {
            //             let p = document.createElement('p')
            //             tmpText += i
            //             p.textContent = tmpText
            //             viewDOM.appendChild(p)
            //             tmpText = ""
            //         } else {
            //             tmpText += `${i},`
            //         }
            //     }
            // }
    
            function visualizza() {
                for (let i = 1; i <= 100; i++) {
                    if (i % 10 === 0) {
                        tmpText += i
                        viewDOM.innerHTML += `${tmpText} <br>`
                        tmpText = ""
                    } else {
                        tmpText += `${i},`
                    }
                }
            }
    
            visualizza()
    
  • Re: Problema cicli for

    E aggiungo tony che non devi aspettare un codice da utilizzare come pappa pronta ma postare sempre una tua soluzione da discutere
  • Re: Problema cicli for

    Chiedo scusa se non ho rispettato il regolamento ,pensavo che siccome l'argomento riguardava il ciclo for non c'era bisogno di aprire un'altra discussione. Per quanto riguarda il codice, ho postato quello che avevo scritto in merito a questo problema. Mi trovo nella difficoltà di non saper tradurre in codice quello che ho in mente. Da cosa può dipendere? Ho riletto diverse volte la guida sui cicli su w3school ma qui bisogna adattare ad ogni situazione.
    Saluti
  • Re: Problema cicli for

    Un ringraziamento sentito per ninja72 che mi illumina ogni volta. Quello che almeno mi rincuora per adesso è che riesco a capire il codice con la soluzione. Non piace neanche a me avere la pappa pronta ma evidentemente fare l'autodidatta a questo inconveniente.
Devi accedere o registrarti per scrivere nel forum
12 risposte