Unità Formativa 1 - Introduzione al Codice
Lezione 01 UF 1 Teoria + Esercizi + Test

Concetti Fondamentali e Algoritmi

Storia della programmazione, Macchina di Turing, algoritmi, schemi di flusso e pseudocodice. Scopri le basi della programmazione e impara a pensare come un programmatore, anche senza computer!

Introduzione alla Lezione

Benvenuto alla prima lezione del corso di Introduzione alla Programmazione! Questa lezione rappresenta il punto di partenza del tuo viaggio nel mondo del coding. Prima di imparare a scrivere codice, è fondamentale comprendere i concetti base che stanno alla base della programmazione.

In questa lezione esploreremo:

  • Termini informatici fondamentali - Il vocabolario essenziale di un programmatore
  • Algoritmi - Come risolvere problemi in modo sistematico
  • Schemi di flusso (Flowcharts) - Rappresentare visivamente la logica
  • Pseudocodice - Scrivere la logica prima del codice vero
Obiettivi della Lezione

Al termine di questa lezione sarai in grado di comprendere la storia della programmazione, cos'è un algoritmo, come rappresentarlo graficamente usando i flowcharts, e come descriverlo in pseudocodice. Capirai che la programmazione è un modo di pensare e che si può programmare anche senza computer, con carta e penna!

Il Computer: Lo Strumento del Programmatore

Il computer per un programmatore è come il telescopio per un astronomo.

Un astronomo studia le stelle, le galassie e l'universo. Il telescopio è uno strumento potente che amplifica le sue capacità, permettendogli di vedere più lontano. Ma l'astronomo deve prima conoscere la fisica, l'astronomia e la matematica. Può fare calcoli, previsioni e teorie anche senza guardare nel telescopio!

Allo stesso modo, un programmatore può programmare anche senza computer! La programmazione è prima di tutto un modo di pensare, una capacità di risolvere problemi in modo logico e strutturato.

Programmazione su Carta

Prima dell'era dei computer personali, i programmatori scrivevano algoritmi su carta, creavano flowcharts alla lavagna e pensavano alla logica usando solo la mente. Anche oggi, i migliori programmatori progettano prima con carta e penna!

Il Pensiero Computazionale

La capacità di scomporre problemi complessi in passi semplici, di trovare pattern e di astrarre concetti è chiamata "pensiero computazionale". Questa abilità è utile in qualsiasi ambito della vita, non solo nella programmazione!

Riflessione Importante

Il computer è uno strumento potente che esegue istruzioni velocemente, ma la vera magia sta nella mente del programmatore che pensa, progetta e crea soluzioni. Imparare a programmare significa imparare a pensare in modo algoritmico, una competenza che porterai con te per sempre, indipendentemente dalla tecnologia che userai.

Breve Storia della Programmazione

La programmazione non è nata con i computer moderni. Ha radici profonde nella storia dell'umanità, nell'esigenza di automatizzare calcoli e risolvere problemi complessi.

Tappe Fondamentali

Anno Evento Descrizione
1843 Ada Lovelace Scrive il primo algoritmo pensato per essere eseguito da una macchina (la Macchina Analitica di Babbage). È considerata la prima programmatrice della storia.
1936 Alan Turing Introduce il concetto di "Macchina di Turing", un modello teorico che definisce cosa significa "calcolare" e che è alla base di tutti i computer moderni.
1945 ENIAC Primo computer elettronico generale programmabile. Veniva programmato fisicamente collegando cavi e interruttori!
1957 FORTRAN Primo linguaggio di programmazione ad alto livello di grande successo, usato ancora oggi per calcoli scientifici.
1972 Linguaggio C Dennis Ritchie crea il linguaggio C, che diventerà uno dei linguaggi più influenti di tutti i tempi. Unix, Linux, Windows sono scritti in C.
1991 Python Guido van Rossum crea Python, un linguaggio progettato per essere semplice e leggibile. Oggi è il linguaggio più popolare al mondo.
1995 JavaScript Nasce JavaScript per rendere le pagine web interattive. Oggi è ovunque: browser, server, mobile, desktop.
2000+ Era Moderna Esplosione di linguaggi specializzati, intelligenza artificiale, cloud computing, app mobile. La programmazione diventa accessibile a tutti.
Curiosità Storica

Durante la Seconda Guerra Mondiale, Alan Turing usò i suoi principi di computazione per decifrare i codici segreti nazisti della macchina Enigma, contribuendo significativamente alla vittoria degli Alleati. La programmazione ha letteralmente cambiato la storia del mondo!

La Macchina di Turing

Nel 1936, il matematico britannico Alan Turing propose un modello teorico di macchina che potesse eseguire qualsiasi calcolo possibile. Questo modello, chiamato Macchina di Turing, è alla base teorica di tutti i computer moderni.

Cos'è una Macchina di Turing?

Una Macchina di Turing è un modello matematico astratto composto da:

Metafora: La Persona con Foglio e Matita

Per capire meglio la Macchina di Turing, immagina una persona seduta a una scrivania infinitamente lunga, con un foglio di carta a quadretti che si estende all'infinito in entrambe le direzioni.

Cosa fa questa persona?

  • Può leggere il simbolo scritto nel quadretto che ha davanti agli occhi
  • Può scrivere o cancellare simboli in quel quadretto con la matita
  • Può spostarsi di un quadretto a destra o sinistra lungo la scrivania
  • Segue delle istruzioni precise scritte su un manuale che ha davanti
  • È in uno "stato mentale" (esempio: "cerco uno zero", "sto sommando", "ho finito")

Il manuale di istruzioni contiene regole come questa:
"Se sei nello stato 'cerco uno zero' e leggi '1', scrivi '0', spostati a destra e passa allo stato 'cerco un uno'"

Questo è esattamente ciò che fa una Macchina di Turing!

  • Il nastro infinito = il foglio a quadretti infinito
  • La testina di lettura/scrittura = la matita e gli occhi della persona
  • Gli stati = lo "stato mentale" della persona
  • La tabella delle transizioni = il manuale di istruzioni

Ogni computer che usiamo oggi (smartphone, laptop, supercomputer) è fondamentalmente questa "persona con foglio e matita", solo incredibilmente più veloce (miliardi di operazioni al secondo)!

Componenti della Macchina di Turing

Nastro Infinito

Un nastro diviso in celle, ciascuna contenente un simbolo (come 0, 1, o vuoto). Il nastro rappresenta la memoria, potenzialmente infinita.

Testina di Lettura/Scrittura

Una testina che può leggere e scrivere simboli sul nastro, e muoversi a sinistra o a destra di una cella alla volta.

Insieme di Stati

Un insieme finito di "stati" in cui la macchina può trovarsi (come "stato iniziale", "stato finale", "stato di calcolo", ecc.).

Tabella di Transizione

Un insieme di regole che dicono: "se sei nello stato X e leggi il simbolo Y, scrivi Z, muoviti a sinistra/destra e passa allo stato W".

Esempi Pratici di Macchine di Turing

Vediamo alcuni esempi concreti per capire come funziona una Macchina di Turing nella pratica:

Esempio 1: Scrivere Tre X

COMPITO: Scrivere XXX su un nastro vuoto
Metafora della Persona:
La persona inizia davanti a un foglio bianco e deve scrivere tre X.

Stati mentali:
- S0: "Devo scrivere la prima X"
- S1: "Devo scrivere la seconda X"
- S2: "Devo scrivere la terza X"
- FINE: "Ho finito"

Istruzioni del manuale:
SE sono in S0:
  - Scrivo "X" nel quadretto corrente
  - Mi sposto a DESTRA
  - Passo allo stato S1

SE sono in S1:
  - Scrivo "X" nel quadretto corrente
  - Mi sposto a DESTRA
  - Passo allo stato S2

SE sono in S2:
  - Scrivo "X" nel quadretto corrente
  - Passo allo stato FINE

Esecuzione passo-passo:
Nastro iniziale:  [ ][ ][ ][ ][ ]...
                   ↑ (persona qui, stato S0)

Passo 1: Scrivo X, vado a destra, stato S1
Nastro:           [X][ ][ ][ ][ ]...
                      ↑ (persona qui, stato S1)

Passo 2: Scrivo X, vado a destra, stato S2
Nastro:           [X][X][ ][ ][ ]...
                         ↑ (persona qui, stato S2)

Passo 3: Scrivo X, stato FINE
Nastro finale:    [X][X][X][ ][ ]...
                         ↑ (persona qui, stato FINE - FERMATA)

Esempio 2: Sommare 1 a un Numero Binario

COMPITO: Incrementare 1011 (11 in decimale) di 1
Metafora della Persona:
Immagina di sommare 1 a un numero binario su carta, partendo dalla cifra più a destra.

Istruzioni del manuale:
1. Vai all'ultima cifra (più a destra)
2. SE leggi "1": scrivi "0", vai a sinistra (c'è riporto!)
3. SE leggi "0": scrivi "1" e FERMATI (somma completata)
4. SE leggi "vuoto": scrivi "1" e FERMATI

Esecuzione passo-passo:
Nastro iniziale:  [1][0][1][1][ ][ ]...  (1011₂ = 11₁₀)
                               ↑ Parto da qui

Passo 1: Leggo [1] → Scrivo [0], vado a sinistra (riporto!)
Nastro:           [1][0][1][0][ ][ ]...
                         ↑

Passo 2: Leggo [1] → Scrivo [0], vado a sinistra (ancora riporto!)
Nastro:           [1][0][0][0][ ][ ]...
                      ↑

Passo 3: Leggo [0] → Scrivo [1], FERMATI (somma completa!)
Nastro finale:    [1][1][0][0][ ][ ]...  (1100₂ = 12₁₀)
                      ↑ FINE

Verifica: 1011₂ + 1 = 1100₂  ✓  (11 + 1 = 12)

Esempio 3: Trovare una X su un Nastro

COMPITO: Cercare il primo simbolo X sul nastro
Metafora della Persona:
Scorri il foglio da sinistra a destra finché non trovi una X.

Stati mentali:
- CERCA: "Sto cercando una X"
- TROVATO: "Ho trovato la X!"

Istruzioni del manuale:
SE sono in CERCA e leggo qualsiasi simbolo diverso da X:
  - Non scrivo niente
  - Mi sposto a DESTRA
  - Resto in stato CERCA

SE sono in CERCA e leggo "X":
  - Passo allo stato TROVATO
  - FERMATI

Esecuzione passo-passo:
Nastro:           [A][B][C][X][Y][Z]...
                   ↑ (inizio, stato CERCA)

Passo 1: Leggo [A] (non è X), vado a destra
Nastro:           [A][B][C][X][Y][Z]...
                      ↑ (stato CERCA)

Passo 2: Leggo [B] (non è X), vado a destra
Nastro:           [A][B][C][X][Y][Z]...
                         ↑ (stato CERCA)

Passo 3: Leggo [C] (non è X), vado a destra
Nastro:           [A][B][C][X][Y][Z]...
                            ↑ (stato CERCA)

Passo 4: Leggo [X] (trovata!), passo a stato TROVATO, FERMATI
Nastro:           [A][B][C][X][Y][Z]...
                            ↑ (stato TROVATO - FINE)

Esempio 4: Invertire 0 e 1

COMPITO: Trasformare tutti gli 0 in 1 e tutti gli 1 in 0
Metafora della Persona:
Scorri il foglio, quando vedi 0 cambialo in 1, quando vedi 1 cambialo in 0.

Istruzioni del manuale:
SE leggo "0":
  - Scrivo "1"
  - Vado a DESTRA
  
SE leggo "1":
  - Scrivo "0"
  - Vado a DESTRA
  
SE leggo "vuoto":
  - FERMATI (ho finito la sequenza)

Esecuzione passo-passo:
Nastro iniziale:  [1][0][1][1][0][ ]...
                   ↑

Passo 1: Leggo [1] → Scrivo [0], vado a destra
Nastro:           [0][0][1][1][0][ ]...
                      ↑

Passo 2: Leggo [0] → Scrivo [1], vado a destra
Nastro:           [0][1][1][1][0][ ]...
                         ↑

Passo 3: Leggo [1] → Scrivo [0], vado a destra
Nastro:           [0][1][0][1][0][ ]...
                            ↑

Passo 4: Leggo [1] → Scrivo [0], vado a destra
Nastro:           [0][1][0][0][0][ ]...
                               ↑

Passo 5: Leggo [0] → Scrivo [1], vado a destra
Nastro:           [0][1][0][0][1][ ]...
                                  ↑

Passo 6: Leggo [ ] (vuoto) → FERMATI
Nastro finale:    [0][1][0][0][1][ ]...

Risultato: Tutti i bit sono stati invertiti! ✓
Prova Tu!

Esercizio pratico: Prendi carta e penna e simula una Macchina di Turing che:

  • Conta quanti "1" ci sono in una sequenza binaria
  • Sostituisce ogni "A" con "B" su un nastro
  • Copia una sequenza di simboli in un'altra posizione del nastro

Ricorda: Puoi fare solo operazioni semplici: leggere, scrivere, spostarti di una cella, cambiare stato mentale. Ma con queste operazioni elementari puoi fare QUALSIASI calcolo!

Importanza della Macchina di Turing

  • Definizione di Computabilità - Ha definito formalmente cosa significa che un problema può essere risolto da un computer
  • Tesi di Church-Turing - Qualsiasi cosa calcolabile può essere calcolata da una Macchina di Turing
  • Base dei Computer Moderni - Tutti i computer odierni sono essenzialmente Macchine di Turing (con memoria finita)
  • Limiti della Computazione - Ha dimostrato che esistono problemi che nessun computer potrà mai risolvere (problema della fermata)
Concetto Chiave

La Macchina di Turing dimostra che la programmazione è pura logica matematica. Non servono circuiti elettronici complessi: si potrebbe costruire un computer con ingranaggi meccanici, acqua che scorre in tubi, o persino con carta e matita! Il computer fisico è solo uno strumento per eseguire velocemente ciò che potremmo fare a mano (ma ci vorrebbe un'eternità).

Terminologia Informatica di Base

Prima di iniziare a programmare, è essenziale familiarizzare con alcuni termini fondamentali che userai quotidianamente nel mondo dello sviluppo software.

Programma

Un insieme di istruzioni scritte in un linguaggio di programmazione che il computer può eseguire per svolgere un compito specifico.

Algoritmo

Una sequenza finita e ordinata di passi precisi e non ambigui che risolve un problema o completa un'operazione in un tempo finito.

Variabile

Un "contenitore" che memorizza un valore in memoria. Ha un nome (identificatore) e può cambiare valore durante l'esecuzione del programma.

Tipo di Dato

Definisce il tipo di valore che una variabile può contenere: numeri interi, decimali, testo (stringhe), valori booleani (vero/falso), ecc.

Ciclo (Loop)

Una struttura che ripete un blocco di istruzioni più volte finché una condizione rimane vera o per un numero specifico di iterazioni.

Condizione

Un'espressione che può essere vera o falsa. Usata per prendere decisioni nel codice (if/else) e controllare i cicli.

Funzione

Un blocco di codice riutilizzabile che esegue un compito specifico. Può ricevere input (parametri) e restituire un output (valore di ritorno).

Debug

Il processo di identificazione e correzione degli errori (bug) nel codice. Fondamentale per creare programmi che funzionano correttamente.

Cos'è un Algoritmo?

Un algoritmo è una sequenza finita di istruzioni ben definite e non ambigue che, se seguite correttamente, risolvono un problema o completano un'operazione specifica.

Caratteristiche di un Buon Algoritmo

Caratteristica Descrizione
Finito Deve terminare dopo un numero finito di passi
Definito Ogni passo deve essere preciso e non ambiguo
Input Può ricevere zero o più dati in ingresso
Output Produce almeno un risultato
Efficace Le operazioni devono essere sufficientemente semplici da essere eseguite
Generale Deve funzionare per tutti i casi del problema, non solo per esempi specifici

Esempio Pratico: Preparare il Caffè

Vediamo un esempio di algoritmo nella vita quotidiana:

ALGORITMO
ALGORITMO: PreparaCaffè

INIZIO
    1. Riempi la moka con acqua fino alla valvola
    2. Inserisci il filtro nella moka
    3. Aggiungi caffè macinato nel filtro
    4. Avvita la parte superiore della moka
    5. Posiziona la moka sul fornello
    6. Accendi il fornello a fuoco medio
    7. MENTRE il caffè non è salito
        - Attendi
    8. Spegni il fornello
    9. Versa il caffè nella tazza
FINE
Nota Importante

Gli algoritmi non sono solo per i computer! Usiamo algoritmi ogni giorno per risolvere problemi: una ricetta di cucina è un algoritmo, le istruzioni per montare un mobile sono un algoritmo, persino il percorso che fai per andare al lavoro è un algoritmo!

Algoritmo Informatico: Trovare il Massimo

Vediamo ora un esempio più tecnico: trovare il numero più grande in una lista di numeri.

ALGORITMO
ALGORITMO: TrovaNumeroMassimo

INPUT: Una lista di numeri [n1, n2, n3, ..., nk]
OUTPUT: Il numero più grande nella lista

INIZIO
    1. Imposta max = primo numero della lista
    2. PER OGNI numero nella lista:
        a. SE numero > max ALLORA
            - max = numero
    3. RESTITUISCI max
FINE

Schemi di Flusso (Flowcharts)

Un flowchart (o diagramma di flusso) è una rappresentazione grafica di un algoritmo. Utilizza forme geometriche standardizzate per rappresentare diversi tipi di operazioni, collegate da frecce che mostrano il flusso di esecuzione.

Simboli Standard dei Flowcharts

Esistono simboli universali che ogni programmatore deve conoscere:

Ovale

INIZIO / FINE
Indica l'inizio o la fine di un algoritmo

Rettangolo

PROCESSO
Rappresenta un'operazione o un'istruzione (es: calcoli, assegnazioni)

Rombo

DECISIONE
Indica un punto in cui si prende una decisione (SI/NO, VERO/FALSO)

Parallelogramma

INPUT / OUTPUT
Rappresenta l'inserimento di dati o la visualizzazione di risultati

Freccia

FLUSSO
Indica la direzione del flusso di esecuzione da un passo all'altro

Cerchio

CONNETTORE
Collega parti diverse del flowchart (utile quando il diagramma è grande)

Esempio: Flowchart per Controllare se un Numero è Pari

Rappresentiamo graficamente un semplice algoritmo:

DESCRIZIONE FLOWCHART
┌──────────────┐
│   INIZIO     │ ← Ovale (Start)
└──────┬───────┘
       │
       ▼
┌──────────────────────┐
│ Inserisci un numero  │ ← Parallelogramma (Input)
└──────┬───────────────┘
       │
       ▼
┌─────────────────────────────┐
│ numero % 2 == 0 ?           │ ← Rombo (Decisione)
└────┬──────────────────┬─────┘
     │ SI               │ NO
     ▼                  ▼
┌─────────────┐    ┌──────────────┐
│ Stampa      │    │ Stampa       │ ← Rettangoli (Output)
│ "È pari"    │    │ "È dispari"  │
└──────┬──────┘    └──────┬───────┘
       │                  │
       └────────┬─────────┘
                ▼
         ┌─────────┐
         │  FINE   │ ← Ovale (End)
         └─────────┘
Esercizio Pratico

Prova tu: Disegna un flowchart per un algoritmo che determina se una persona può entrare in un cinema (età >= 18) o se ha bisogno di un accompagnatore.

Pseudocodice

Lo pseudocodice è una descrizione testuale di un algoritmo che usa un linguaggio simile a quello di programmazione ma senza vincoli di sintassi rigida. È il ponte tra il linguaggio umano e il codice vero e proprio.

Vantaggi dello Pseudocodice

  • Facile da scrivere e leggere per chiunque
  • Non richiede conoscenza di un linguaggio specifico
  • Aiuta a concentrarsi sulla logica senza preoccuparsi della sintassi
  • Facilita la comunicazione tra programmatori
  • Utile per pianificare prima di scrivere codice reale

Strutture Comuni in Pseudocodice

1. Sequenza (Istruzioni in Ordine)

PSEUDOCODICE
INIZIO
    Istruzione 1
    Istruzione 2
    Istruzione 3
FINE

2. Selezione (IF/ELSE - Condizioni)

PSEUDOCODICE
SE condizione ALLORA
    Istruzioni se vero
ALTRIMENTI
    Istruzioni se falso
FINE SE

// Esempio pratico:
SE età >= 18 ALLORA
    Stampa "Puoi votare"
ALTRIMENTI
    Stampa "Non puoi ancora votare"
FINE SE

3. Iterazione (Cicli - WHILE)

PSEUDOCODICE
MENTRE condizione è vera FAI
    Istruzioni da ripetere
FINE MENTRE

// Esempio pratico:
contatore = 1
MENTRE contatore <= 10 FAI
    Stampa contatore
    contatore = contatore + 1
FINE MENTRE

4. Iterazione (Cicli - FOR)

PSEUDOCODICE
PER i DA 1 A 10 FAI
    Istruzioni da ripetere
FINE PER

// Esempio pratico:
PER i DA 1 A 5 FAI
    Stampa "Iterazione numero: " + i
FINE PER

Esempio Completo: Calcolo del Fattoriale

Il fattoriale di un numero n (scritto n!) è il prodotto di tutti i numeri da 1 a n. Ad esempio: 5! = 5 × 4 × 3 × 2 × 1 = 120

PSEUDOCODICE
ALGORITMO: CalcolaFattoriale

INPUT: numero intero positivo n
OUTPUT: il fattoriale di n

INIZIO
    // Controllo input
    SE n < 0 ALLORA
        Stampa "Errore: il numero deve essere positivo"
        TERMINA
    FINE SE
    
    // Caso base
    SE n == 0 O n == 1 ALLORA
        risultato = 1
    ALTRIMENTI
        // Calcolo fattoriale
        risultato = 1
        PER i DA 2 A n FAI
            risultato = risultato * i
        FINE PER
    FINE SE
    
    // Output
    Stampa "Il fattoriale di " + n + " è: " + risultato
FINE

Conversione in Codice Reale (Python)

Ecco come lo stesso algoritmo appare in Python:

PYTHON
def calcola_fattoriale(n):
    # Controllo input
    if n < 0:
        print("Errore: il numero deve essere positivo")
        return None
    
    # Caso base
    if n == 0 or n == 1:
        risultato = 1
    else:
        # Calcolo fattoriale
        risultato = 1
        for i in range(2, n + 1):
            risultato = risultato * i
    
    # Output
    print(f"Il fattoriale di {n} è: {risultato}")
    return risultato

# Test
calcola_fattoriale(5)  # Output: 120
Best Practice

Prima scrivi lo pseudocodice, poi il codice! Pianificare la logica prima di iniziare a programmare ti farà risparmiare tempo e ridurrà gli errori. Molti programmatori esperti usano ancora lo pseudocodice per problemi complessi.

Esercizi Pratici Guidati

Metti in pratica quello che hai imparato con questi esercizi. Per ciascuno, prova prima a risolverlo da solo su carta, poi confronta con la soluzione proposta.

Esercizio 1: Algoritmo della Colazione

Compito: Scrivi un algoritmo dettagliato per preparare la colazione (caffè + toast). Usa la notazione che preferisci (lista numerata, pseudocodice, flowchart).

Mostra Soluzione
SOLUZIONE
ALGORITMO: PreparaColazione

INIZIO
    // Preparazione caffè
    1. Riempi moka con acqua
    2. Aggiungi caffè nel filtro
    3. Metti moka sul fornello acceso
    
    // Preparazione toast (in parallelo)
    4. Inserisci pane nel tostapane
    5. Imposta livello di tostatura
    6. Avvia tostapane
    
    // Attesa
    7. MENTRE caffè non è pronto O toast non è pronto FAI
        - Controlla caffè
        - Controlla toast
    8. FINE MENTRE
    
    // Servizio
    9. Versa caffè nella tazza
    10. Spalma burro/marmellata sul toast
    11. Servi colazione
FINE

Esercizio 2: Trovare il Numero Maggiore tra Tre

Compito: Scrivi un algoritmo in pseudocodice che prende tre numeri (A, B, C) e determina quale è il più grande.

Mostra Soluzione
SOLUZIONE
ALGORITMO: TrovaNumeroMaggiore

INPUT: tre numeri A, B, C
OUTPUT: il numero più grande

INIZIO
    Leggi A, B, C
    
    SE A >= B E A >= C ALLORA
        max = A
        Stampa "Il numero maggiore è A: " + A
    ALTRIMENTI SE B >= A E B >= C ALLORA
        max = B
        Stampa "Il numero maggiore è B: " + B
    ALTRIMENTI
        max = C
        Stampa "Il numero maggiore è C: " + C
    FINE SE
    
    RESTITUISCI max
FINE

Esercizio 3: Conta alla Rovescia

Compito: Crea un algoritmo che conta da 10 a 0 e stampa "BOOM!" alla fine.

Mostra Soluzione
SOLUZIONE 1 - Ciclo MENTRE
ALGORITMO: ContaRovescia

INIZIO
    contatore = 10
    
    MENTRE contatore >= 0 FAI
        Stampa contatore
        contatore = contatore - 1
    FINE MENTRE
    
    Stampa "BOOM!"
FINE
SOLUZIONE 2 - Ciclo PER
ALGORITMO: ContaRovescia

INIZIO
    PER i DA 10 A 0 PASSO -1 FAI
        Stampa i
    FINE PER
    
    Stampa "BOOM!"
FINE

Esercizio 4: Password Validator

Compito: Crea un algoritmo che chiede all'utente di inserire una password. Continua a chiedere finché non inserisce la password corretta "Turing1936".

Mostra Soluzione
SOLUZIONE
ALGORITMO: ValidaPassword

INIZIO
    passwordCorretta = "Turing1936"
    accesso = FALSO
    tentativi = 0
    
    MENTRE accesso == FALSO E tentativi < 3 FAI
        Stampa "Inserisci la password: "
        Leggi passwordInserita
        
        SE passwordInserita == passwordCorretta ALLORA
            accesso = VERO
            Stampa "Accesso consentito!"
        ALTRIMENTI
            tentativi = tentativi + 1
            Stampa "Password errata. Tentativi rimasti: " + (3 - tentativi)
        FINE SE
    FINE MENTRE
    
    SE accesso == FALSO ALLORA
        Stampa "Accesso bloccato. Troppi tentativi."
    FINE SE
FINE
5

Calcolatrice Semplice

Disegna un flowchart per una calcolatrice che chiede due numeri e un'operazione (+, -, *, /) e stampa il risultato. Gestisci il caso della divisione per zero!

6

Tavola Pitagorica

Crea un algoritmo che stampa l'intera tavola pitagorica (da 1×1 a 10×10). Usa due cicli annidati!

7

Numero Primo

Scrivi un algoritmo che determina se un numero è primo (divisibile solo per 1 e per se stesso). Usa un ciclo e una variabile booleana.

8

Simulazione Macchina di Turing

Simula su carta una Macchina di Turing che inverte una sequenza binaria (tutti gli 0 diventano 1 e viceversa). Disegna il nastro ad ogni passo.

Sfida Avanzata: Gioco Indovina il Numero

Progetta un gioco completo con queste caratteristiche:

  • Il computer genera un numero casuale tra 1 e 100
  • L'utente ha massimo 7 tentativi
  • Dopo ogni tentativo, dai un suggerimento: "troppo alto", "troppo basso"
  • Tieni traccia di quanti tentativi servono
  • Alla fine, chiedi se vuole giocare di nuovo

Crea sia il flowchart che lo pseudocodice completo!

Test Autovalutativo di Fine Unità

Istruzioni

Rispondi alle seguenti domande per verificare la tua comprensione. Prova a rispondere senza guardare le note, poi controlla le risposte alla fine. Soglia di superamento: 18/30 punti (60%)

Sezione A: Domande a Risposta Multipla (15 punti - 1 punto ciascuna)

1. Chi è considerata la prima programmatrice della storia?




2. Cosa rappresenta il nastro in una Macchina di Turing?




3. Quale simbolo di flowchart rappresenta una decisione?




4. Un algoritmo deve essere necessariamente:




5. Il computer per un programmatore è come:




6. In che anno Alan Turing introdusse il concetto di Macchina di Turing?




7. Quale struttura di controllo permette di ripetere un blocco di codice?




8. Cosa rappresenta il parallelogramma in un flowchart?




9. Lo pseudocodice è:




10. Quale linguaggio è stato creato nel 1991 da Guido van Rossum?




11. Il "pensiero computazionale" è:




12. Una variabile in programmazione è:




13. Il debug è:




14. ENIAC (1945) era:




15. Si può programmare senza usare un computer?




Sezione B: Domande a Risposta Aperta (15 punti)

16. (5 punti) Spiega con parole tue cos'è un algoritmo e fai un esempio dalla vita quotidiana.

17. (5 punti) Scrivi un semplice algoritmo in pseudocodice per determinare se un numero è pari o dispari.

18. (5 punti) Perché la Macchina di Turing è importante per l'informatica moderna? Cosa ci ha insegnato?

MOSTRA RISPOSTE CORRETTE

Sezione A - Risposte Corrette:

  1. b - Ada Lovelace
  2. b - La memoria
  3. c - Rombo
  4. c - Finito
  5. b - Il telescopio per un astronomo
  6. b - 1936
  7. b - WHILE/FOR
  8. c - Input/Output
  9. b - Una descrizione testuale informale di un algoritmo
  10. c - Python
  11. b - La capacità di scomporre problemi in passi semplici
  12. b - Un contenitore che memorizza un valore
  13. b - Trovare e correggere errori
  14. b - Il primo computer elettronico programmabile
  15. b - Sì, con carta e penna progettando algoritmi

Sezione B - Risposte Suggerite:

16. Cos'è un algoritmo (5 punti)

Risposta modello: Un algoritmo è una sequenza finita di istruzioni precise e non ambigue che risolvono un problema o completano un'operazione. Esempio dalla vita quotidiana: la ricetta per fare una torta è un algoritmo - ha passi ben definiti, un inizio e una fine, e se seguiti correttamente producono sempre lo stesso risultato (la torta).

17. Algoritmo pari/dispari (5 punti)

Risposta modello:
INIZIO
  Leggi numero
  SE numero % 2 == 0 ALLORA
    Stampa "Il numero è pari"
  ALTRIMENTI
    Stampa "Il numero è dispari"
  FINE SE
FINE

18. Importanza della Macchina di Turing (5 punti)

Risposta modello: La Macchina di Turing è fondamentale perché ha definito formalmente cosa significa "calcolare" e ha dimostrato che tutti i computer, indipendentemente dalla loro tecnologia, sono equivalenti in termini di potenza computazionale. Ci ha insegnato che la computazione è un concetto matematico universale, che esistono problemi non risolvibili da nessun computer, e che la programmazione è una scienza basata su principi logici precisi.

Valutazione:

  • 27-30 punti: Eccellente! Hai compreso perfettamente i concetti
  • 24-26 punti: Molto bene! Ottima preparazione
  • 18-23 punti: Sufficiente. Rileggi le parti dove hai sbagliato
  • < 18 punti: Ripassa la lezione e riprova il test
Certificazione Competenze

Se hai superato il test con almeno 18/30 punti, hai acquisito le competenze base della Unità Formativa 1. Sei pronto per passare alla prossima lezione sui tipi di dati e variabili!

Riepilogo della Lezione

Ottimo lavoro! Hai completato la prima lezione del corso. Ecco cosa hai imparato:

  • Terminologia informatica - Programma, algoritmo, variabile, ciclo, condizione, funzione, debug
  • Cos'è un algoritmo - Una sequenza finita di istruzioni per risolvere un problema
  • Caratteristiche di un buon algoritmo - Finito, definito, con input/output, efficace e generale
  • Flowcharts - Rappresentazione grafica degli algoritmi con simboli standard
  • Simboli dei flowcharts - Ovale (inizio/fine), rettangolo (processo), rombo (decisione), parallelogramma (I/O)
  • Pseudocodice - Descrizione testuale dell'algoritmo in linguaggio semi-formale
  • Strutture di controllo - Sequenza, selezione (IF/ELSE), iterazione (WHILE/FOR)
Prossimi Passi

Nella prossima lezione approfondiremo le variabili e i tipi di dati, gli operatori aritmetici e i parametri nei programmi. Inizieremo anche a vedere esempi in linguaggi di programmazione reali!