Esercizio 3

This commit is contained in:
2026-02-02 23:26:44 +01:00
parent a5de4b57b0
commit 1c258c972c
8 changed files with 326 additions and 0 deletions

View File

@@ -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.
*/

View File

@@ -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.

View File

@@ -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");
}

View File

@@ -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.
*/

View File

@@ -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.");
}

View File

@@ -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."
*/

View File

@@ -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 ---");

View File

@@ -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