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 (Flowchart): 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 flowchart, 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 flowchart 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: 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: 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 (Flowchart)
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 flowchart
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:
┌──────────────┐
│ 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)
INIZIO
Istruzione 1
Istruzione 2
Istruzione 3
FINE
2. Selezione (IF/ELSE, condizioni)
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)
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)
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
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:
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
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
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
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
Altri esercizi da provare
- 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)
- Chi è considerata la prima programmatrice della storia?
a) Grace Hopper b) Ada Lovelace c) Margaret Hamilton d) Katherine Johnson - Cosa rappresenta il nastro in una Macchina di Turing?
a) Il processore b) La memoria c) Il disco rigido d) La rete internet - Quale simbolo di flowchart rappresenta una decisione?
a) Rettangolo b) Ovale c) Rombo d) Parallelogramma - Un algoritmo deve essere necessariamente:
a) Infinito b) Ambiguo c) Finito d) Casuale - Il computer per un programmatore è come:
a) Un cervello alternativo b) Il telescopio per un astronomo c) Uno strumento indispensabile per programmare d) La meta finale dell'apprendimento - In che anno Alan Turing introdusse il concetto di Macchina di Turing?
a) 1843 b) 1936 c) 1945 d) 1991 - Quale struttura di controllo permette di ripetere un blocco di codice?
a) IF/ELSE b) WHILE/FOR c) INPUT/OUTPUT d) INIZIO/FINE - Cosa rappresenta il parallelogramma in un flowchart?
a) Un processo b) Una decisione c) Input/Output d) Inizio/Fine - Lo pseudocodice è:
a) Un linguaggio di programmazione reale b) Una descrizione testuale informale di un algoritmo c) Un diagramma grafico d) Un tipo di variabile - Quale linguaggio è stato creato nel 1991 da Guido van Rossum?
a) Java b) C++ c) Python d) JavaScript - Il "pensiero computazionale" è:
a) Usare solo il computer per pensare b) La capacità di scomporre problemi in passi semplici c) Pensare velocemente come un computer d) Memorizzare molte informazioni - Una variabile in programmazione è:
a) Un valore che non cambia mai b) Un contenitore che memorizza un valore c) Un tipo di ciclo d) Un simbolo di flowchart - Il debug è:
a) Scrivere codice velocemente b) Trovare e correggere errori c) Testare il computer d) Installare programmi - ENIAC (1945) era:
a) Un linguaggio di programmazione b) Il primo computer elettronico programmabile c) Un algoritmo famoso d) Un tipo di variabile - Si può programmare senza usare un computer?
a) No, è impossibile b) Sì, con carta e penna progettando algoritmi c) Solo se sei un genio d) Solo in teoria, mai in pratica
Sezione B: domande a risposta aperta (15 punti)
- (5 punti) Spiega con parole tue cos'è un algoritmo e fai un esempio dalla vita quotidiana.
- (5 punti) Scrivi un semplice algoritmo in pseudocodice per determinare se un numero è pari o dispari.
- (5 punti) Perché la Macchina di Turing è importante per l'informatica moderna? Cosa ci ha insegnato?
Mostra risposte corrette
Sezione A, risposte corrette
- b - Ada Lovelace
- b - La memoria
- c - Rombo
- c - Finito
- b - Il telescopio per un astronomo
- b - 1936
- b - WHILE/FOR
- c - Input/Output
- b - Una descrizione testuale informale di un algoritmo
- c - Python
- b - La capacità di scomporre problemi in passi semplici
- b - Un contenitore che memorizza un valore
- b - Trovare e correggere errori
- b - Il primo computer elettronico programmabile
- 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:
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
- Flowchart: rappresentazione grafica degli algoritmi con simboli standard
- Simboli dei flowchart: 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!
Vuoi imparare a programmare con un percorso completo?
Scopri i corsi e la formazione di Federico Boggia su programmazione, dati e digitale.