Esercizio 3
This commit is contained in:
@@ -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.
|
||||
*/
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
|
||||
@@ -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.");
|
||||
}
|
||||
@@ -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."
|
||||
*/
|
||||
@@ -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 ---");
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user