From 1c258c972cfbc529c0900408a566f9db1a71c23e Mon Sep 17 00:00:00 2001 From: Berack96 Date: Mon, 2 Feb 2026 23:26:44 +0100 Subject: [PATCH] Esercizio 3 --- .../esercizi/calcolo_sconto.js | 20 +++ .../esercizi/controllo_accesso.js | 20 +++ .../esercizi/debug_ordine_if.js | 28 +++++ .../extra/calcolatrice_switch.js | 20 +++ .../extra/debug_login_logic.js | 28 +++++ .../extra/rpg_decision_tree.js | 26 ++++ .../tutorial_errori.js | 70 +++++++++++ .../tutorial_strutture.js | 114 ++++++++++++++++++ 8 files changed, 326 insertions(+) create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/calcolo_sconto.js create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/controllo_accesso.js create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/debug_ordine_if.js create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/calcolatrice_switch.js create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/debug_login_logic.js create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/rpg_decision_tree.js create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_errori.js create mode 100644 JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_strutture.js diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/calcolo_sconto.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/calcolo_sconto.js new file mode 100644 index 0000000..d61aefb --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/calcolo_sconto.js @@ -0,0 +1,20 @@ +/** + * Esercizio: Il Calcolatore di Sconti + * + * DESCRIZIONE: + * Un negozio applica sconti diversi in base alla categoria del cliente. + * + * Regole: + * - Categoria "vip": sconto del 20% + * - Categoria "standard": sconto del 10% + * - Categoria "nuovo": nessuno sconto (0%) + * - Qualsiasi altra categoria: errore (prezzo invariato) + * + * Obiettivo: + * 1. Definisci una variabile `prezzoOriginale` (es. 100). + * 2. Definisci una variabile `categoria` (es. "vip"). + * 3. Usa una struttura di controllo (if/else if o switch) per calcolare il `prezzoFinale`. + * 4. Stampa il prezzo finale. + */ + + diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/controllo_accesso.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/controllo_accesso.js new file mode 100644 index 0000000..f9b5da8 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/controllo_accesso.js @@ -0,0 +1,20 @@ +/** + * Esercizio: Controllo Accesso Composto + * + * DESCRIZIONE: + * Per accedere a un'area riservata, un utente deve soddisfare TRE requisiti: + * 1. Essere maggiorenne (>= 18). + * 2. Avere un documento valido (booleano true). + * 3. NON essere bannato dal sistema (booleano false). + * + * OBIETTIVO: + * Scrivi la logica usando un unico `if` con operatori logici combinati (&&, !). + * Stampa "Accesso Autorizzato" o "Accesso Negato". + */ + +let userAge = 20; +let hasDocument = true; +let isBanned = false; +// Con questi valori, l'accesso dovrebbe essere autorizzato. + + diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/debug_ordine_if.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/debug_ordine_if.js new file mode 100644 index 0000000..92b973b --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/esercizi/debug_ordine_if.js @@ -0,0 +1,28 @@ +/** + * Esercizio (DEBUG): L'ordine conta + * + * DESCRIZIONE: + * Questo codice dovrebbe assegnare un giudizio in base al punteggio. + * - Punteggio > 90: "Eccellente" + * - Punteggio > 70: "Buono" + * - Punteggio > 50: "Sufficiente" + * + * Problema: + * Se metto 95, mi stampa "Sufficiente" invece di "Eccellente". Perché? + * + * OBIETTIVO: + * Correggi l'ordine delle condizioni if/else if per far funzionare la logica. + */ + +let punteggio = 95; + +// CODICE BUGGATO: +if (punteggio > 50) { + console.log("Sufficiente"); +} else if (punteggio > 70) { + console.log("Buono"); +} else if (punteggio > 90) { + console.log("Eccellente"); +} else { + console.log("Insufficiente"); +} diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/calcolatrice_switch.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/calcolatrice_switch.js new file mode 100644 index 0000000..255875b6 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/calcolatrice_switch.js @@ -0,0 +1,20 @@ +/** + * Esercizio Extra: La Calcolatrice Semplice + * + * DESCRIZIONE: + * Simula una calcolatrice che esegue operazioni base tra due numeri. + * + * Variabili: + * - `num1` (es. 10) + * - `num2` (es. 0) + * - `operazione` (stringa: "+", "-", "*", "/") + * + * OBIETTIVO: + * 1. Usa uno `switch` sulla variabile `operazione`. + * 2. Gestisci i 4 casi matematici. + * 3. IMPORTANTE: Nel caso della divisione ("/"), aggiungi un `if` annidato dentro il case. + * Se `num2` è 0, stampa "Errore: Divisione per zero". Altrimenti stampa il risultato. + * 4. Gestisci il caso `default` per operazioni non riconosciute. + */ + + diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/debug_login_logic.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/debug_login_logic.js new file mode 100644 index 0000000..988602f --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/debug_login_logic.js @@ -0,0 +1,28 @@ +/** + * Esercizio Extra (DEBUG): Il Login Confuso + * + * DESCRIZIONE: + * Un sistema di sicurezza deve verificare se un numero è "sicuro". + * Un numero è sicuro se: + * - È pari. + * - È compreso tra 10 e 50 (inclusi). + * + * Il codice attuale dice che 150 è sicuro (sbagliato) e 5 è sicuro (sbagliato). + * + * OBIETTIVO: + * 1. Analizza l'uso delle parentesi e degli operatori OR (||) vs AND (&&). + * 2. Correggi la condizione dentro l'if. + * + * Suggerimento: + * L'operatore modulo `% 2 === 0` verifica se è pari. + */ + +let numeroCodice = 150; + +// CODICE BUGGATO: +// L'intento era: (Pari) E (MaggioreUguale 10) E (MinoreUguale 50) +if (numeroCodice % 2 === 0 || numeroCodice >= 10 && numeroCodice <= 50) { + console.log(numeroCodice + " è un codice sicuro."); +} else { + console.log(numeroCodice + " NON è sicuro."); +} diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/rpg_decision_tree.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/rpg_decision_tree.js new file mode 100644 index 0000000..05379ac --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/extra/rpg_decision_tree.js @@ -0,0 +1,26 @@ +/** + * Esercizio Extra: Gioco di Ruolo Testuale (Decision Tree) + * + * Descrizione: + * Simula un turno di combattimento basato su variabili di stato. + * + * Variabili: + * - `hpMostro` (punti vita mostro, es. 50) + * - `tuoiHp` (tuoi punti vita, es. 20) + * - `pozione` (booleano, hai una pozione? es. true) + * + * Obiettivo: + * Scrivi una logica annidata complessa: + * 1. Se `tuoiHp` sono meno di 30: + * - Se hai la `pozione` (true) -> Stampa "Usi la pozione e ti curi." + * - Se NON hai la `pozione` -> Stampa "Sei nei guai! Attacchi disperatamente." + * 2. Altrimenti (se hai abbastanza vita): + * - Se `hpMostro` < 10 -> Stampa "Il mostro è debole, lo finisci!" + * - Altrimenti -> Stampa "Attacchi il mostro con forza." + * + * Esempi di test: + * - tuoiHp = 20, hpMostro = 50, pozione = true => "Usi la pozione e ti curi." + * - tuoiHp = 25, hpMostro = 50, pozione = false => "Sei nei guai! Attacchi disperatamente." + * - tuoiHp = 40, hpMostro = 5, pozione = false => "Il mostro è debole, lo finisci!" + * - tuoiHp = 40, hpMostro = 30, pozione = true => "Attacchi il mostro con forza." + */ diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_errori.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_errori.js new file mode 100644 index 0000000..ace9de1 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_errori.js @@ -0,0 +1,70 @@ +console.log("--- Inizio del Tutorial Errori Base ---"); + +/** + * =========================================== + * === 1. SyntaxError: Manca qualcosa === + * Le stringhe di testo devono sempre avere le virgolette aperte e chiuse. + * Se ne dimentichi una, JavaScript si confonde. + * + * PAROLA CHIAVE: "Invalid or unexpected token" --> token non valido o inaspettato + * Decommenta il codice sottostante per vedere l'errore. + * Per rimuovere il commento usa [Ctrl + /] oppure [Ctrl + ù] (VsCode). + */ + +// let messaggio = "Benvenuti al corso; +// console.log(messaggio); + + +/** + * =========================================== + * === 2. ReferenceError: Il nome sbagliato === + * Questo errore accade quando chiami una variabile con il nome sbagliato o non definita. + * Ricorda che JavaScript distingue maiuscole e minuscole. + * + * PAROLA CHIAVE: "is not defined" --> non definita + */ + +// let mioNome = "Luca"; +// console.log(MioNome); + + +/** + * =========================================== + * === 3. TypeError: Scrittura errata dei comandi === + * A volte sbagliamo a scrivere i comandi di JavaScript. + * + * PAROLA CHIAVE: "is not a function" --> non è una funzione + */ + +// console.logg("Tutto bene?"); + + +/** + * =========================================== + * === 4. TypeError: Le Costanti === + * Hai imparato che 'const' definisce una scatola che non può cambiare contenuto. + * Cosa succede se proviamo a forzarla? + * + * PAROLA CHIAVE: "Assignment to constant variable" + */ + +// const PIGRECO = 3.14; +// PIGRECO = 3.50; + + +/** + * =========================================== + * === 5. Errore di Logica (Tipi di dati) === + * Qui NON vedrai errori rossi nel terminale. Il programma funziona, + * ma il risultato matematico è sbagliato. + * + * PROBLEMA: Sommare numeri e stringhe. + */ + +// let prezzo = 10; +// let spedizione = "5"; +// let totale = prezzo + spedizione; +// console.log("Il totale è: " + totale); + + +console.log("--- Fine del Tutorial ---"); diff --git a/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_strutture.js b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_strutture.js new file mode 100644 index 0000000..15e5f21 --- /dev/null +++ b/JS_Esercizi/JS_Esercizi 03 - Errori e Strutture Condizionali/tutorial_strutture.js @@ -0,0 +1,114 @@ +/** + * =========================================== + * === 1. Il Blocco === + * Le parentesi graffe {} racchiudono un blocco di codice. + * Tutto il codice racchiuso in queste parentesi è 'indentato' con un TAB in più. + * Questo aiuta a leggere e capire la struttura del codice. + * + * Le le variabili dichiarate all'interno con 'let' o 'const' sono locali a quel blocco. + * Se le dichiari all'esterno, sono globali e accessibili ovunque. + */ + +let globale = "Sono dichiarata fuori dal blocco"; +{ + let locale = "Sono locale"; + var variabileVar = "Sono var"; // 'var' non è limitata dal blocco + console.log(globale); + console.log(locale); +} + +console.log(globale); // Accessibile +console.log(variabileVar); // Accessibile +// console.log(locale); // Non accessibile (decommenta per vedere l'errore) + + + +/** + * =========================================== + * === 2. Il blocco IF (Se) === + * L'istruzione 'if' esegue il codice tra le parentesi graffe {} SOLO se + * la condizione tra parentesi tonde () è vera (true). + */ + +let temperatura = 25; + +// TODO: Scrivi un if che controlli se 'temperatura' è maggiore di 20. +// Se è vero, stampa "Fa caldo". +// OUTPUT ATTESO (con temperatura = 25): Fa caldo + + +/** + * =========================================== + * === 3. IF...ELSE (Se... Altrimenti) === + * 'else' gestisce il caso in cui la condizione dell'if è falsa. + */ + +let password = "segreta123"; + +// TODO: Scrivi un controllo: se la password è uguale a "segreta123", stampa "Accesso consentito". +// Altrimenti (else), stampa "Accesso negato". +// OUTPUT ATTESO: Accesso consentito + + +/** + * =========================================== + * === 4. ELSE IF (Altrimenti Se) === + * Serve per gestire più di due condizioni. + * Il codice si ferma alla prima condizione vera trovata. + */ + +let semaforo = "giallo"; + +// TODO: Scrivi una catena di controlli: +// 1. Se semaforo è "verde" -> stampa "Vai" +// 2. Altrimenti se semaforo è "giallo" -> stampa "Rallenta" +// 3. Altrimenti se semaforo è "rosso" -> stampa "Stop" +// 4. Altrimenti (else finale) -> stampa "Semaforo rotto" +// OUTPUT ATTESO: Rallenta + + +/** + * =========================================== + * === 5. Operatori Logici: AND (&&) === + * L'operatore && (AND) richiede che ENTRAMBE le condizioni siano vere. + */ + +let età = 20; +let haBiglietto = true; + +// TODO: Scrivi un if che controlli se 'età' è maggiore o uguale a 18 E (&&) 'haBiglietto' è true. +// Se entrambe sono vere, stampa "Puoi entrare". +// Altrimenti stampa "Non puoi entrare". +// OUTPUT ATTESO: Puoi entrare + + +/** + * =========================================== + * === 6. Operatori Logici: OR (||) === + * L'operatore || (OR) richiede che ALMENO UNA delle condizioni sia vera. + */ + +let èWeekend = false; +let èFesta = true; + +// TODO: Scrivi un if che controlli se 'èWeekend' è true O (||) 'èFesta' è true. +// Se almeno una è vera, stampa "Oggi non si lavora". +// OUTPUT ATTESO: Oggi non si lavora + + +/** + * =========================================== + * === 7. Lo SWITCH === + * Switch è un'alternativa a tanti 'else if' quando si confronta una singola variabile con valori specifici. + * Ricorda il comando 'break' alla fine di ogni case! + */ + +let numeroMese = 3; + +// TODO: Scrivi uno switch sulla variabile 'numeroMese'. +// case 1: stampa "Gennaio" +// case 2: stampa "Febbraio" +// case 3: stampa "Marzo" +// default: stampa "Mese non valido" +// OUTPUT ATTESO: Marzo +