diff --git a/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/calcolo_stipendio.js b/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/calcolo_stipendio.js new file mode 100644 index 0000000..460912c --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/calcolo_stipendio.js @@ -0,0 +1,19 @@ +/** + * Esercizio: Calcolo Stipendio Netto + * + * DESCRIZIONE: + * Calcolare lo stipendio netto mensile gestendo straordinari e tasse. + * + * Istruzioni: + * 1. Dichiara 'pagaOrariaBase' (es. 10) e 'oreLavorateStandard' (es. 160). + * 2. Dichiara 'oreStraordinario' (es. 20) e 'moltiplicatoreStraordinario' (es. 1.5, significa che valgono il 50% in più). + * 3. Calcola 'stipendioBase' moltiplicando le ore standard per la paga base. + * 4. Calcola 'stipendioStraordinario' moltiplicando le ore extra per la paga base PER il moltiplicatore. + * 5. Somma i due stipendi per ottenere il 'totaleLordo'. + * 6. Dichiara 'aliquotaTasse' (es. 0.25, ovvero il 25%). + * 7. Calcola le 'tasseDaPagare' (totaleLordo * aliquotaTasse). + * 8. Calcola 'stipendioNetto' (totaleLordo - tasseDaPagare). + * 9. Stampa: "Stipendio Lordo: [valore]", "Tasse: [valore]", "Netto: [valore]". + */ + + diff --git a/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/debug_media_voti.js b/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/debug_media_voti.js new file mode 100644 index 0000000..444e9ea --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/debug_media_voti.js @@ -0,0 +1,30 @@ +/** + * Esercizio (DEBUG): Il Calcolatore di Media Rotto + * + * DESCRIZIONE: + * Uno studente sta cercando di calcolare la sua media scolastica. + * Ha inserito i voti di Matematica, Storia e Fisica. + * Ha anche 2 punti bonus che vuole aggiungere alla SOMMA dei voti prima di fare la media. + * + * Risultato Atteso: (7 + 8 + 6 + 2) / 3 materie = 23 / 3 = 7.66... + * Risultato Attuale della console: 7860.6666... + * + * Ci sono DUE tipi di errori gravi qui: + * 1. Errori di TIPO (Stringhe vs Numeri). + * 2. Errori di PRECEDENZA (Ordine delle operazioni matematiche). + * + * Istruzioni: + * Correggi il codice affinché calcoli la media correttamente. + * NON cancellare le variabili, correggi il loro contenuto o come vengono usate. + */ + +let votoMatematica = 7; +let votoStoria = "8"; +let votoFisica = "6"; + +let puntiBonus = 2; +let numeroMaterie = 3; + +let mediaFinale = votoMatematica + votoStoria + votoFisica + puntiBonus / numeroMaterie; + +console.log("La media finale è:", mediaFinale); diff --git a/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/logica_range.js b/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/logica_range.js new file mode 100644 index 0000000..6cfb000 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 02 - Operatori/esercizi/logica_range.js @@ -0,0 +1,15 @@ +/** + * Esercizio: Verifica Range Numerico + * + * DESCRIZIONE: + * Controlla se un numero (temperatura) rientra in un intervallo accettabile. + * + * Istruzioni: + * 1. Dichiara una variabile 'temperatura' con un valore a scelta. + * 2. Dichiara 'minimaAccettabile' (es. 18) e 'massimaAccettabile' (es. 25). + * 3. Crea una variabile booleana 'temperaturaOk'. + * 4. Questa variabile deve essere true SOLO SE la temperatura è maggiore o uguale alla minima E minore o uguale alla massima. + * 5. Stampa: "La temperatura è accettabile? " seguito dal valore booleano. + */ + + diff --git a/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/debug_precedenza_logica.js b/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/debug_precedenza_logica.js new file mode 100644 index 0000000..ed4bd4f --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/debug_precedenza_logica.js @@ -0,0 +1,22 @@ +/** + * Esercizio Extra (DEBUG): L'ordine conta + * + * Descrizione: + * Vogliamo dare un bonus a un dipendente se: + * - Ha fatto vendite alte (> 1000) OPPURE ha ottime recensioni (> 4.5) + * - E INOLTRE (condizione obbligatoria) non deve aver ricevuto reclami. + * + * Il codice attuale dà il bonus anche a chi ha reclami, se ha vendite alte. Questo è SBAGLIATO. + * + * Correggi l'espressione aggiungendo le parentesi necessarie per forzare la logica corretta. + */ + +let vendite = 2000; +let recensioni = 3.0; +let haReclami = true; + +let dirittoBonus = vendite > 1000 || recensioni > 4.5 && !haReclami; + +console.log("Diritto al bonus:", dirittoBonus); +// OUTPUT ATTUALE (Errato): true +// OUTPUT ATTESO (Corretto): false diff --git a/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/sistema_sicurezza.js b/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/sistema_sicurezza.js new file mode 100644 index 0000000..47dbd71 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/sistema_sicurezza.js @@ -0,0 +1,30 @@ +/** + * Esercizio Extra: Sistema di Sicurezza Complesso + * + * DESCRIZIONE: + * L'allarme deve suonare (stampare true) se si verifica una situazione di pericolo. + * + * Variabili da dichiarare: + * - movimentoRilevato (bool) + * - orarioNotturno (bool) + * - finestreAperte (bool) + * - codiceInserito (bool) + * - blackout (bool) + * + * Regole dell'allarme: + * L'allarme suona SE: + * 1. (C'è movimento rilevato E è orario notturno) + * OPPURE + * 2. (Le finestre sono aperte E il codice di sicurezza NON è stato inserito) + * OPPURE + * 3. (C'è un blackout) + * + * Stampa il risultato della variabile 'allarmeAttivo'. + * Fai diverse prove cambiando i valori delle variabili per verificare che la logica regga. + * + * Prova a creare casi di test come: + * - movimentoRilevato = true, orarioNotturno = true, finestreAperte = false, codiceInserito = true, blackout = false => allarmeAttivo = true + * - movimentoRilevato = false, orarioNotturno = false, finestreAperte = true, codiceInserito = false, blackout = false => allarmeAttivo = true + * - movimentoRilevato = false, orarioNotturno = false, finestreAperte = false, codiceInserito = true, blackout = true => allarmeAttivo = true + * - movimentoRilevato = false, orarioNotturno = false, finestreAperte = false, codiceInserito = true, blackout = false => allarmeAttivo = false + */ diff --git a/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/statistiche_personaggio.js b/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/statistiche_personaggio.js new file mode 100644 index 0000000..668f220 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 02 - Operatori/extra/statistiche_personaggio.js @@ -0,0 +1,27 @@ +/** + * Esercizio Extra: Statistiche Personaggio RPG + * + * DESCRIZIONE: + * In un gioco di ruolo, il danno inflitto dipende da Forza, Arma e Bonus. + * + * Istruzioni: + * 1. Dichiara variabili per: 'forzaBase' (num), 'dannoArma' (num), 'moltiplicatoreCritico' (num, es 1.5). + * 2. Dichiara una variabile booleana 'colpoCritico' (true o false). + * 3. Dichiara una variabile booleana 'nemicoInDifesa' (true o false). + * + * 4. Logica del Danno: + * - Il 'dannoBase' è (forzaBase + dannoArma). + * - Se 'colpoCritico' è true, il dannoBase viene moltiplicato per 'moltiplicatoreCritico'. + * (NOTA: Non puoi usare IF. Usa l'operatore ternario se lo conosci, oppure usa la matematica: + * danno * (1 + (0.5 * colpoCritico)) -> JavaScript converte true in 1 e false in 0). + * - Se 'nemicoInDifesa' è true, il danno finale viene dimezzato (diviso 2). + * + * 5. Calcola e stampa il danno finale in un unico passaggio logico o passaggi sequenziali. + * + * Sfida Matematica: Prova a risolvere sfruttando il fatto che true vale 1 e false vale 0 nei calcoli matematici. + * + * Esempio di test: + * - forzaBase = 50, dannoArma = 20, moltiplicatoreCritico = 2, colpoCritico = true, nemicoInDifesa = false => danno finale = 140 + * - forzaBase = 30, dannoArma = 10, moltiplicatoreCritico = 1.5, colpoCritico = false, nemicoInDifesa = true => danno finale = 20 + * - forzaBase = 40, dannoArma = 15, moltiplicatoreCritico = 2, colpoCritico = true, nemicoInDifesa = true => danno finale = 55 + */ diff --git a/JS_Esercizi/JS_Esercizi 02 - Operatori/tutorial_interattivo.js b/JS_Esercizi/JS_Esercizi 02 - Operatori/tutorial_interattivo.js new file mode 100644 index 0000000..657a374 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 02 - Operatori/tutorial_interattivo.js @@ -0,0 +1,107 @@ +/** + * =========================================== + * === 1. Operatori Aritmetici di Base === + * JavaScript può essere usato come una calcolatrice. + * Abbiamo +, -, * (moltiplicazione) e / (divisione). + * Possiamo stampare i risultati con console.log(). + */ +let numeroA = 10; +let numeroB = 5; + +// TODO: Crea una variabile 'somma' che contenga numeroA più numeroB e stampala. +// OUTPUT ATTESO: 15 + + +/** + * =========================================== + * === 2. L'operatore Modulo (Resto) === + * L'operatore % restituisce il resto di una divisione. + * Esempio: 10 % 3 fa 1 (perché il 3 sta nel 10 tre volte con resto 1). + */ +let mele = 14; +let persone = 3; + +// TODO: Calcola quante mele rimangono non distribuite usando l'operatore % e stampa il risultato. +// OUTPUT ATTESO: 2 + + +/** + * =========================================== + * === 3. Ordine delle Operazioni (Precedenza) === + * La moltiplicazione e la divisione avvengono prima di somma e sottrazione. + * Usa le parentesi tonde () per cambiare l'ordine. + */ +let costoBiglietto = 10; +let costoPrevendita = 2; +let numeroBiglietti = 3; + +// TODO: Calcola il totale corretto: (costoBiglietto + costoPrevendita) moltiplicato per numeroBiglietti. +// OUTPUT ATTESO: 36 + + +/** + * =========================================== + * === 4. Operatori di Confronto (Debole vs Stretto) === + * L'operatore == confronta il valore (convertendo il tipo se necessario). + * L'operatore === confronta valore E tipo (MOLTO PIÙ SICURO). + */ +let numeroStringa = "5"; +let numeroReale = 5; + +// TODO: Stampa il risultato di numeroStringa === numeroReale. +// OUTPUT ATTESO: false + + +/** + * =========================================== + * === 5. Operatori di Disuguaglianza === + * Possiamo verificare se un numero è maggiore (>), minore (<), + * maggiore o uguale (>=) o minore o uguale (<=). + * Il risultato è sempre un booleano (true o false). + */ +let età = 17; +let etàMinima = 18; + +// TODO: Stampa true se 'età' è maggiore o uguale a 'etàMinima', altrimenti stampa false. +// OUTPUT ATTESO: false + + +/** + * =========================================== + * === 6. Operatori Logici: AND (&&) === + * L'operatore && restituisce true SOLO se entrambe le condizioni sono vere. + * true && true -> true + * true && false -> false + */ +let haBiglietto = true; +let haDocumento = true; + +// TODO: Crea una variabile 'puòEntrare' che sia vera solo se haBiglietto E haDocumento sono entrambi veri. Stampala. +// OUTPUT ATTESO: true + + +/** + * =========================================== + * === 7. Operatori Logici: OR (||) e NOT (!) === + * L'operatore || restituisce true se ALMENO UNA condizione è vera. + * L'operatore ! inverte il risultato (true diventa false e viceversa). + */ +let èSocio = false; +let haInvito = true; +let èBannato = false; + +// TODO: Stampa true se (èSocio OPPURE haInvito) E NON è bannato. +// OUTPUT ATTESO: true + + +/** + * =========================================== + * === 8. Mix Finale === + * Combiniamo aritmetica e logica. + */ +let puntiGiocatore = 150; +let viteRimaste = 0; +let livelloCompletato = true; + +// TODO: Il gioco è "vinto" se (puntiGiocatore > 100 OPPURE livelloCompletato) E (viteRimaste > 0). Stampa il risultato. +// OUTPUT ATTESO: false