venerdì 31 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 4 Introduzione alle interfacce grafiche (GUI)

 


🎨 Introduzione alle interfacce grafiche (GUI)

📌 Contenuti del Modulo:

  • Differenze tra interfacce testuali e grafiche: le GUI migliorano l'usabilità rispetto a CLI, semplificando l'interazione utente.
  • Librerie GUI per Python: introduzione a Tkinter, sia base che avanzato, per realizzare finestre, pulsanti e interazioni visive.
  • Struttura di una finestra: i principali widget (Button, Entry, Label), gestione layout (pack/grid) e gestione degli eventi (bind, command).
  • Design usabile e accessibile: progettare interfacce inclusive, chiare, con attenzione a colori, contrasto e leggibilità.

🛠️ Attività pratiche:

  • Creare GUI per i progetti realizzati, come Taskmaster (es. gestione attività).
  • Realizzare una mini app con pulsanti, input testuali, etichette e liste dinamiche.
  • Personalizzare la grafica: palette colori, font leggibili, icone intuitive.

 

🧪 Test interattivo – Metti alla prova le tue conoscenze!

1. Quale tra queste librerie Python è usata per costruire GUI?

2. Qual è il ruolo di un widget in una GUI?

3. Quale metodo in Tkinter permette di inserire un bottone in una finestra?

giovedì 30 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 3 Applicazioni scolastiche creative e sociali


Applicazioni scolastiche creative e sociali

📚 Contenuti formativi

🔸 Idee per progetti didattici

Applicazioni che aiutano nello studio, nella memorizzazione o nella risoluzione di problemi scolastici.

Esempi pratici:

  • MathTrainer: app che propone esercizi di calcolo a tempo.
  • GrammaFix: app che genera frasi sbagliate e chiede di correggerle.
  • QuizMaster: quiz a risposta multipla personalizzabili dai docenti.

🔸 App creative

App che stimolano l’immaginazione e la produzione personale.

Esempi pratici:

  • Storia a Sorpresa: generatore casuale di storie con input (personaggio + luogo + oggetto).
  • BeatBox Junior: compositore musicale base dove si combinano loop audio.
  • Emoji Comic: crea mini fumetti con emoji e didascalie.

🔸 App sociali e civiche

Strumenti digitali per affrontare piccoli problemi della quotidianità o partecipare attivamente alla vita comunitaria.

Esempi pratici:

  • EcoMemo: promemoria per la raccolta differenziata del giorno.
  • PharmaAlert: notifica automatica per ricordare l’assunzione dei farmaci.
  • VolontApp: registro attività di volontariato (es. ore svolte, tipo d'intervento, badge motivazionali).

🛠️ Attività operative

🧠 1. Brainstorming guidato per la scelta del progetto

Obiettivo: stimolare la creatività e definire un’idea utile o divertente da sviluppare.

Metodo:

  • Mostrare alcuni esempi (vedi sopra).
  • Fare domande guida:
    • Quale problema vorresti risolvere?
    • Ti piacerebbe aiutare qualcuno con un’app?
    • Quale app ti piacerebbe usare a scuola?

Strumento suggerito: lavagna condivisa (fisica o online) per raccogliere le idee.


🧩 2. Progettazione partecipata (modello canvas semplificato)

Mini Canvas Didattico:

Campo Domanda guida
Nome App Come si chiama la tua app?
Problema Che problema risolve?
Utenti Chi la userà? (studenti, insegnanti, anziani…)
Funzioni principali Cosa fa l’app? Quali sono le schermate?
Tecnologia In cosa sarà realizzata? (Scratch, AppInventor, Python…)
Prototipo Hai un disegno, una bozza su carta o una versione testabile?

💻 3. Sviluppo e condivisione

A seconda del livello degli studenti, il progetto può essere:

  • un mockup su carta, con descrizione delle schermate.
  • un prototipo su AppInventor/Scratch/Python GUI.
  • una presentazione interattiva, anche senza codice.

Condivisione finale:

  • Presentazione a compagni o genitori.
  • Pubblicazione online in uno spazio sicuro (blog scolastico, Google Drive, Canva linkabile).
  • Condivisione tramite QR code generato dall’app stessa.

🧪 Test ed esercizi

Test a scelta multipla – "Conosci le App Didattiche?"

  1. Qual è la funzione principale di una “App Civica”?

    • a) Fare calcoli matematici
    • b) Aiutare nei giochi
    • c) Supportare comportamenti utili alla comunità
    • d) Sostituire l’insegnante
      → ✅ Risposta corretta: c
  2. Qual è un buon esempio di app creativa?

    • a) Quiz sulla grammatica
    • b) Generatore automatico di storie
    • c) App per studiare scienze
    • d) Calcolatrice finanziaria
      → ✅ Risposta corretta: b
  3. A cosa serve il Canvas semplificato?

    • a) Scrivere il codice
    • b) Valutare l'app prima della vendita
    • c) Pianificare l'app in modo semplice e visuale
    • d) Imparare il design industriale
      → ✅ Risposta corretta: c

🎲 Esercizio finale – Progetta la tua App

Chiedi agli studenti di completare la seguente traccia:

  • Il nome della mia app è: ____________
  • Serve per: ___________________________________________________
  • La useranno: _________________________________________________
  • Le funzioni principali sono: ___________________________________
  • Il prototipo lo farò con: ( ) Carta ( ) Scratch ( ) AppInventor ( ) Altro: ______
  • L'ho già disegnata? ( ) Sì ( ) No

💡 Se disponibile, si può usare uno strumento di prototipazione visuale gratuito come Marvel o Figma (modalità base).


🧭 Conclusione e riflessione

Domande guida per riflettere:

  • Cosa hai scoperto progettando un’app?
  • È stato più difficile avere l’idea o realizzarla?
  • Hai collaborato con qualcuno? Come?

“Le app non sono solo strumenti: sono idee messe in pratica. Progettarle è come raccontare una storia… ma con interazione!”


Se vuoi, posso fornirti anche una versione compatta per Blogger o una scheda valutativa per il docente. Fammi sapere!

mercoledì 29 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 2 Il caso studio “Taskmaster” ideazione sviluppo testing


Il caso studio “Taskmaster”: ideazione, sviluppo, testing


📚 Contenuti teorici

1. Cos’è “Taskmaster”
Taskmaster è un’applicazione progettata per aiutare gli utenti a organizzare le proprie attività quotidiane in modo semplice ed efficiente. Si tratta di un task manager personale sviluppato in Python, che integra:

  • Programmazione orientata agli oggetti (OOP)
  • Interfaccia grafica utente (GUI) con Tkinter o PyQt
  • Gestione dati strutturata (salvataggio, caricamento, ordinamento)

2. Funzionalità principali

  • Aggiunta di una nuova attività
  • Modifica delle attività
  • Eliminazione
  • Ordinamento per priorità o scadenza
  • Visualizzazione della lista
  • Salvataggio/caricamento da file .json

3. Integrazione concetti di OOP

  • Classe Task: rappresenta un’attività
  • Classe TaskManager: gestisce la lista di attività
  • Metodi: aggiungi, modifica, elimina, ordina, salva, carica

4. Interfaccia grafica (GUI)

Con Tkinter, è possibile creare:

  • Input box per titolo, descrizione, scadenza
  • Pulsanti per le azioni principali
  • Area di visualizzazione elenco attività
  • Messaggi di conferma o errore

🛠️ Attività pratiche

  1. Progettazione delle classi

    • Task(titolo, descrizione, scadenza)
    • TaskManager() → lista di Task
  2. Progettazione dell’interfaccia

    • Layout con pulsanti e campi di input
    • Eventi collegati alle funzioni OOP
  3. Testing con casi reali

    • Aggiungere 3 task (es. “Comprare latte”, “Studiare”, “Chiamare nonna”)
    • Modificare un task (correggere la scadenza)
    • Ordinare i task per scadenza
  4. Salvataggio su file JSON

    • Esportazione e importazione della lista

🧪 TEST DI VERIFICA

1. Qual è lo scopo principale del progetto Taskmaster?
A) Creare un videogioco
B) Gestire e organizzare attività quotidiane
C) Simulare un’interfaccia bancaria
D) Compilare documenti PDF

2. Quali concetti di programmazione sono fondamentali per Taskmaster?
A) Ricorsione e algoritmi genetici
B) OOP, GUI e gestione file
C) Blockchain e intelligenza artificiale
D) Reti neurali e API REST

3. Cosa rappresenta una classe in OOP?
A) Un tipo di funzione
B) Un database relazionale
C) Un modello per creare oggetti
D) Un file CSV

4. Quale modulo Python viene usato per la GUI in questo progetto?
A) Matplotlib
B) TensorFlow
C) Tkinter
D) Pandas

5. In che formato vengono salvati i dati in uscita?
A) .docx
B) .xlsx
C) .json
D) .mp4


✅ RISPOSTE TEST

  1. B
  2. B
  3. C
  4. C
  5. C


martedì 28 gennaio 2025

Corso Applicazioni e Progetti Reali Informatici: 1 Project Work: costruire un programma con tracce guidate

🎯 Obiettivi del modulo

  • Applicare concretamente le conoscenze acquisite nei moduli precedenti.
  • Acquisire competenze nella progettazione, sviluppo e testing di un'applicazione software.
  • Sviluppare capacità di collaborazione, organizzazione del lavoro, gestione del tempo e dei ruoli.
  • Familiarizzare con strumenti di supporto alla programmazione: diagrammi di flusso, pseudocodice, debugging.

📚 Contenuti del modulo

1. Analisi del problema e stesura dei requisiti

  • Cosa vuol dire “analizzare un problema”: esigenze, utenti finali, contesto d’uso.
  • Come si scrive un documento dei requisiti: funzioni essenziali, optional, vincoli.
  • Esempi: diario digitale, quiz interattivo, calcolatrice evoluta.

2. Scelta del linguaggio e degli strumenti

  • Come scegliere il linguaggio (es. Python per semplicità e sintassi leggibile).
  • IDE e ambienti consigliati: Thonny, Replit, Visual Studio Code, Jupyter.
  • Librerie utili (Tkinter per GUI, random, datetime, math).

3. Progettazione e pianificazione

  • Pseudocodice: che cos’è e come scriverlo.
  • Diagrammi di flusso: come rappresentano visivamente la logica.
  • Divisione del lavoro in fasi: input, elaborazione, output, salvataggio dati, ecc.

4. Implementazione graduale

  • Sviluppo incrementale: partire dal nucleo minimo funzionante.
  • Debugging continuo: testare ogni passaggio.
  • Versioni successive: aggiunta di funzioni extra, miglioramenti grafici, validazione input.

🛠️ Attività pratiche

🔹 Attività 1: Tracce guidate (a scelta)

Ogni traccia può essere proposta individualmente o in gruppi.

A. Il Diario Digitale

  • L’utente può scrivere una nuova nota, rileggere le note passate, cancellare una voce.
  • Usa data/ora per indicizzare le note.
  • Salva le note su file .txt.

B. Il Gioco Quiz

  • Presenta una domanda e 3 risposte possibili.
  • Valuta la risposta e dà un punteggio finale.
  • Funzioni aggiuntive: tempo limite, livelli di difficoltà, classifica locale.

C. Calcolatrice Intelligente

  • Operazioni base: somma, sottrazione, moltiplicazione, divisione.
  • Funzioni avanzate: radice quadrata, potenza, media di n numeri.
  • Versione con GUI: interfaccia semplice con bottoni (opzionale, per avanzati).

🔹 Attività 2: Lavoro in gruppo (facoltativo per contesti formativi)

  • Ogni gruppo sceglie un progetto tra quelli proposti o ne inventa uno.
  • I ruoli:
    • Developer: scrive il codice.
    • Tester: verifica ogni funzione, registra i bug.
    • Designer: cura l’interfaccia (testuale o grafica).
    • Scrittore (opzionale): documenta il progetto.
  • Riunioni periodiche di revisione con feedback del tutor.

🔹 Attività 3: Diario di bordo

  • Ogni partecipante tiene un diario del progetto: idee, problemi, soluzioni trovate.
  • Alla fine, ogni gruppo o individuo presenta il progetto e il percorso fatto.

🧪 Esercizi di supporto

Esercizio 1 – Analisi dei requisiti (per tutti i progetti)

Compila questo schema per uno dei tre progetti proposti:

  • Nome del progetto: ___________
  • Obiettivo principale: ___________
  • Utente tipo: ___________
  • Funzionalità richieste: ___________
  • Requisiti opzionali: ___________
  • Limiti tecnici (es. solo testo, no database): ___________

Esercizio 2 – Scrivi il pseudocodice di una funzionalità

Esempio: pseudocodice per "inserisci una nuova nota nel diario"

Inizio
   Chiedi all’utente di inserire il testo della nota
   Ottieni la data e ora attuali
   Apri il file delle note in modalità scrittura
   Scrivi la data, ora e testo nel file
   Chiudi il file
   Mostra “Nota salvata con successo”
Fine

Esercizio 3 – Crea un diagramma di flusso

Rappresenta con un diagramma la logica di una delle funzioni chiave (es. verifica risposta nel quiz, o scelta dell’operazione nella calcolatrice).


Test di autovalutazione finale

1. Qual è la funzione di un diagramma di flusso in fase progettuale?

a. Aiuta a scrivere direttamente il codice
b. Mostra visivamente la logica e i passaggi di un processo ✅
c. È obbligatorio per tutti i progetti
d. Serve solo ai designer


2. Qual è la differenza tra pseudocodice e codice vero?

a. Nessuna, sono sinonimi
b. Il pseudocodice è scritto in linguaggio naturale strutturato ✅
c. Il codice vero è più semplice
d. Il pseudocodice funziona anche se non lo esegui


3. Cos’è il “debugging”?

a. Un tipo di programma per costruire interfacce
b. L’eliminazione dei bug (errori) nel codice ✅
c. La scrittura automatica di funzioni
d. La scelta del linguaggio


4. Cosa indica il termine “implementazione incrementale”?

a. Sviluppare il programma tutto in una volta
b. Iniziare da funzioni facili e aggiungere poi quelle complesse ✅
c. Sviluppare una versione per ciascun utente
d. Usare più linguaggi nello stesso progetto


📈 Valutazione finale

  • Presentazione del progetto (orale o scritta)
  • Funzionalità del codice (verifica tutor o test automatici)
  • Organizzazione del lavoro e documentazione
  • Capacità di debugging e problem solving


lunedì 27 gennaio 2025

Corso di Programmazione Strutturata e OOP: 8 Test di un programma


🧪 Test di un programma


🎯 Obiettivi

  • Comprendere l’importanza dei test nel ciclo di vita del software
  • Distinguere tra test manuali e test automatici
  • Saper scrivere unit test per funzioni e classi in Python
  • Validare applicazioni con input previsti e imprevisti

📘 Contenuti del Modulo

🔹 1. Cos’è un test

  • Un test è una verifica del comportamento del programma rispetto agli output attesi.
  • Serve per garantire che funzioni, classi e moduli facciano ciò che devono.
  • I test aiutano a:
    • Scoprire bug
    • Verificare modifiche (regressioni)
    • Garantire la manutenibilità

🔹 2. Test manuale vs test automatico

Tipo di test Come si fa Quando usarlo Esempio
Test manuale Inserimento diretto di input e osservazione dell’output In fase iniziale o esplorativa Avviare una funzione e vedere se stampa ciò che ci si aspetta
Test automatico Codice che verifica altre funzioni In sviluppo e debugging professionale Uso del modulo unittest

🔹 3. Scrivere test per funzioni e classi

Esempio – Funzione da testare:

def somma(a, b):
    return a + b

✅ Test manuale:

print(somma(2, 3))  # Output atteso: 5

✅ Test automatico:

import unittest

class TestSomma(unittest.TestCase):
    def test_somma_interi(self):
        self.assertEqual(somma(2, 3), 5)

    def test_somma_zero(self):
        self.assertEqual(somma(0, 0), 0)

    def test_somma_negativi(self):
        self.assertEqual(somma(-1, -2), -3)

if __name__ == '__main__':
    unittest.main()

🔹 4. Validazione del software

Cosa succede se l’input non è previsto?

💥 Codice con errore:

print(somma("a", 2))  # Errore: TypeError

🎯 Possiamo gestire l’errore oppure testarlo:

def somma(a, b):
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        raise TypeError("Devono essere numeri")
    return a + b

✅ E relativo test:

def test_tipo_errato(self):
    with self.assertRaises(TypeError):
        somma("a", 2)

🛠️ Attività Pratiche

✍️ 1. Scrivi casi di test per funzioni esistenti

Funzione di esempio:

def dividi(a, b):
    return a / b

Scrivi 3 test:

  • Divisione normale
  • Divisione con b = 1
  • Divisione per 0 (gestire con try/except o testare con assertRaises)

🧰 2. Introdurre il modulo unittest

Crea un file test_calcoli.py e importa:

import unittest
from calcoli import somma, dividi

Usa setUp() per inizializzare valori, tearDown() per pulire.


🚀 3. Progetto finale – Mini App e test

👩‍💻 App: un calcolatore che fa somma, sottrazione, moltiplicazione, divisione.

📦 Struttura:

progetto_calcolatrice/
│
├── calcolatrice.py         # Funzioni
├── app.py                  # Interfaccia utente
└── test_calcolatrice.py    # Test con unittest

👨‍🔬 Esempi di test da includere:

  • test_somma_positivi
  • test_divisione_zero
  • test_input_stringa (che solleva errore)

🧠 Test di valutazione – 6 domande

1. Perché servono i test nei programmi?
A) Per scrivere meno codice
B) Per controllare che il programma funzioni ✅
C) Per evitare i commenti

2. Cosa fa assertEqual() in unittest?
A) Confronta due numeri
B) Controlla che due valori siano uguali ✅
C) Aggiunge due numeri

3. Come si scrive un test per un errore previsto?
A) assertErrore()
B) assertRaises()
C) tryAssert()

4. Qual è la differenza tra test manuale e test automatico?
A) Il manuale si scrive da soli, l’automatico no
B) Il manuale si osserva, l’automatico è codice ✅
C) Nessuna

5. Dove si scrivono i test automatici?
A) In fogli di calcolo
B) In file .txt
C) In file .py con unittest

6. Il test self.assertEqual(somma(2, 2), 5) è…
A) Corretto
B) Fallito ✅
C) Sintattico


domenica 26 gennaio 2025

Corso di Programmazione Strutturata e OOP: 7 Design dell’interfaccia utente


🎨 Design dell’Interfaccia Utente

🎯 Obiettivi Formativi

  • Comprendere i concetti fondamentali di UI (User Interface) e UX (User Experience)
  • Imparare a distinguere e progettare interfacce testuali, grafiche e web
  • Utilizzare librerie Python per la realizzazione di interfacce interattive
  • Applicare principi di semplicità, coerenza e usabilità nel design

📚 Contenuti Teorici

🔹 1. Concetti Base di UI/UX

  • Differenza tra UI (aspetto) e UX (esperienza utente)
  • Principi fondamentali: chiarezza, consistenza, feedback, tolleranza agli errori
  • Errori comuni nel design dell’interfaccia

🔹 2. Tipologie di Interfacce

  • Testuali (CLI): linee di comando, menu numerici, prompt
  • Grafiche (GUI): pulsanti, finestre, etichette, slider
  • Web-based: moduli HTML, CSS, JavaScript, responsive design

🔹 3. Librerie grafiche per Python

  • Tkinter – semplice, integrata, perfetta per GUI di base
  • PyGame – ideale per giochi e interfacce grafiche dinamiche
  • PyQt – per progetti più complessi e professionali (multifinestra)

🔹 4. Progettare un’interfaccia usabile

  • Workflow di progettazione: mockup → wireframe → codice
  • Concetti di accessibilità, gerarchia visiva, e affordance
  • Coerenza tra elementi: layout, colori, comportamento

🛠️ Attività Pratiche

🧮 1. Creare una calcolatrice GUI con Tkinter

  • Obiettivo: progettare una semplice calcolatrice (somma, sottrazione, moltiplicazione, divisione)
  • Funzioni: display numerico, bottoni numerici e operatori, gestione errori
  • Estensione facoltativa: modalità scientifica

🖥️ 2. Sviluppare un menù interattivo da console

  • Progettare un'interfaccia a scelta multipla da terminale (es. menu di un'app)
  • Navigazione tramite input numerico
  • Esempi: diario digitale, agenda, gestione liste

🔍 3. Analizzare e migliorare un’interfaccia esistente

  • Scegliere un’interfaccia reale (app mobile, software desktop, sito web)
  • Valutare in base ai principi UX/UI: intuitività, estetica, efficacia
  • Proporre modifiche migliorative tramite wireframe o descrizione tecnica

🧪 Test e Verifica

  • Quiz teorico a scelta multipla su concetti UI/UX, librerie e principi di design
  • Check-list di valutazione per analizzare una GUI esistente (rubrica)
  • Revisione peer-to-peer dei progetti degli studenti (valutazione tra pari)

🧰 Materiali Extra

  • Template GUI Tkinter di base da personalizzare
  • Strumenti online per mockup: Figma, Draw.io, Balsamiq
  • Mini-guida illustrata: “10 regole d’oro della UX”

💬 Discussione finale

“La buona interfaccia si dimentica, la cattiva si fa notare.”
Riflessione collettiva: quali sono le app o i siti con le interfacce migliori secondo te?
Qual è il confine tra funzionalità e bellezza nel design?

sabato 25 gennaio 2025

Corso di Programmazione Strutturata e OOP: 6 IDE e ambienti di sviluppo


🔧 IDE e Ambienti di Sviluppo

🎯 Obiettivi:

  • Comprendere cos’è un IDE e il suo ruolo nella produttività del programmatore
  • Acquisire dimestichezza con ambienti professionali e strumenti integrati
  • Configurare, esplorare e usare ambienti come Thonny, VS Code, PyCharm e Replit
  • Avviare un piccolo progetto software, con controllo versioni base

🔍 Cos’è un IDE?

Un IDE (Integrated Development Environment) è un ambiente integrato che semplifica la scrittura, l’esecuzione, il debug e la gestione del codice. Include:

  • Editor di codice (con evidenziazione della sintassi)
  • Terminale integrato
  • Strumenti di debug (punti di interruzione, variabili in tempo reale)
  • Autocompletamento e linting
  • Gestione dei file di progetto
  • Integrazione con sistemi di versionamento (Git)

⚖️ Confronto tra IDE
IDE Adatto per… Pro Contro
Thonny Principianti in Python Interfaccia semplice, installazione veloce Limitato per progetti grandi
VS Code Tutti i linguaggi Estensioni infinite, leggero, Git integrato Richiede configurazione iniziale
PyCharm Python avanzato Potente, supporto completo per Django, Flask Pesante e richiede licenza Pro per alcune funzioni
Replit Lavoro in cloud Nessuna installazione, condivisione facile Prestazioni limitate, meno controllo su ambienti

🏗️ Struttura di un progetto software (esempio base)

Un progetto professionale è composto da:

/mia-app/
├── main.py                # Codice principale
├── /modules/             # File modulari
│   └── util.py
├── requirements.txt      # Librerie da installare
├── README.md             # Documentazione del progetto
├── .gitignore            # File da escludere dal controllo di versione
└── /venv/                # Ambiente virtuale (opzionale)

🧰 Uso integrato degli strumenti
Strumento Funzione
Editor Scrittura del codice con evidenziazione e suggerimenti
Terminale Esecuzione di comandi, script, installazione pacchetti
Debugger Trovare errori tramite breakpoints e ispezione
Controllo versione (Git) Salvare versioni del progetto, collaborare in team

🧪 Attività pratiche


⚙️ 1. Configurare un ambiente di sviluppo completo

  • Installare VS Code o Thonny
  • Installare Python, Git
  • Aggiungere estensioni: Python, GitLens (su VS Code)
  • Configurare l’ambiente virtuale (python -m venv venv)

💡 2. Progetto guida: una mini-app in Python

Obiettivo: creare una calcolatrice base da terminale con struttura modulare

Passaggi:

  • Creare una cartella calcolatrice
  • Scrivere main.py e una funzione in modules/operazioni.py
  • Avviare da terminale: python main.py
  • Eseguire debug passo passo


Ecco la conclusione del modulo, con l'ultima attività completata, un test di verifica e uno spunto per il dialogo in classe o nel blog.


🌐 3. Introduzione al controllo versione con Git (concetti base)

Comando Git Cosa fa
git init Inizializza un repository
git add . Aggiunge file al tracking
git commit -m "messaggio" Salva una versione del progetto
git status Mostra lo stato attuale dei file
git log Elenco dei commit effettuati

👉 Puoi usare Git anche da VS Code, grazie al pannello "Source Control", per una gestione visiva più intuitiva.


🧪 Test di verifica (4 domande)

  1. Cos’è un IDE e quale delle seguenti NON è una sua funzione?
    A) Evidenziazione della sintassi
    B) Esecuzione del codice
    C) Installazione automatica del sistema operativo
    D) Debug interattivo

  2. Quale IDE è consigliato per principianti in Python?
    A) Visual Studio
    B) PyCharm
    C) Thonny
    D) Replit

  3. Cosa fa il comando git commit?
    A) Elimina il progetto
    B) Invia il progetto via email
    C) Crea un salvataggio dello stato attuale
    D) Installa nuove librerie

  4. Quale file contiene l’elenco delle librerie usate in un progetto Python?
    A) .gitignore
    B) README.md
    C) main.py
    D) requirements.txt


💬 Riflessione finale

💡 Domanda per la discussione:
Secondo te, è meglio iniziare con un IDE semplice e poi passare a strumenti professionali, o è utile affrontare subito ambienti più completi come VS Code o PyCharm?


📌 Conclusione

Gli IDE non sono solo "editor": sono ambienti completi di lavoro, fondamentali per scrivere codice in modo efficiente e professionale.
Imparare a usarli significa diventare sviluppatori consapevoli, capaci non solo di scrivere codice, ma di gestire, testare e documentare progetti reali.
E con Git, si inizia anche a ragionare in ottica di lavoro di squadra e versionamento, competenze chiave in ogni ambito software moderno.


venerdì 24 gennaio 2025

Corso di Programmazione Strutturata e OOP: 5 Gestione della memoria

 


💾 Gestione della Memoria

Quando programmiamo, i dati che usiamo devono essere memorizzati da qualche parte. La memoria di un computer è il luogo dove i dati vengono temporaneamente conservati durante l’esecuzione di un programma.

Ma come funziona davvero questa memoria? Che differenza c’è tra usare una variabile o una struttura dati? Cosa significa “occupare spazio” e perché alcuni programmi sono più “pesanti” di altri?

In questo modulo entriamo nel cuore della gestione della memoria nei programmi e impariamo a scrivere codice più efficiente.

📌 Cos'è la memoria in un programma

Quando crei una variabile, ad esempio x = 5, il tuo computer riserva un piccolo spazio di memoria per contenere il numero 5. Più complesso è il dato, più memoria serve. Per esempio, una lista o un dizionario occupano più spazio di una semplice variabile intera.

📦 Variabili, strutture dati e spazio occupato

Le variabili sono come scatole con un’etichetta (il nome) e un contenuto (il valore). Le strutture dati come liste, array e dizionari sono contenitori più complessi che possono ospitare più valori insieme. Ogni elemento richiede spazio e, se non gestito bene, può rallentare l’intero programma.

🧹 Garbage Collection in Python

Python ha un meccanismo automatico chiamato Garbage Collection che si occupa di liberare la memoria non più utilizzata. Ad esempio, se crei una lista ma poi non la usi più, Python può eliminarla per risparmiare spazio. Tuttavia, non è sempre perfetto: il codice inefficiente può comunque generare sprechi.

⚠️ Errori comuni
  • Variabili non inizializzate: usare una variabile prima di darle un valore causa errori.
  • Sovrascrittura: riutilizzare lo stesso nome per una variabile può causare confusione e bug.
🔬 Attività pratiche
  • Visualizzazione: usare strumenti grafici come pythontutor.com per osservare cosa accade alla memoria durante l’esecuzione.
  • Analisi comparata: confrontare due versioni di codice – una che occupa troppa memoria e una ottimizzata – e misurarne le prestazioni.
  • Laboratorio: scrivere un piccolo programma in Python che gestisca correttamente liste e variabili per massimizzare la velocità e ridurre l’uso della RAM.

🧪 Verifica le tue conoscenze

1. Cosa fa la garbage collection in Python?

2. Cosa succede se usi una variabile non inizializzata?

3. Quale delle seguenti strutture occupa in genere più memoria?

Punteggio: 0/3

giovedì 23 gennaio 2025

Corso di Programmazione Strutturata e OOP: 4 Debugging trovare e correggere errori

 


🔧 DEBUGGING: TROVARE E CORREGGERE ERRORI

Contenuti:

  • Tipi di errori: comprendere la differenza tra errori sintattici (es. dimenticare una parentesi), errori logici (il programma gira ma dà risultati errati) ed errori di runtime (es. divisione per zero).
  • Strategie di debugging: isolare le funzioni, usare stampe di controllo, testare pezzi di codice uno alla volta.
  • Strumenti di debug: come usare il debugger nei moderni IDE (Thonny, IDLE, VS Code) per mettere breakpoints e osservare i valori delle variabili in tempo reale.
  • Messaggi di errore: imparare a leggere e interpretare correttamente i traceback Python per risalire all’origine del problema.

Attività didattiche:

  • 🛠️ Correggere un programma con errori deliberati: osserva cosa succede e quali messaggi vengono generati.
  • ✍️ Annotare bug e spiegare le correzioni: utile per documentare il proprio processo di debug.
  • 💻 Debug assistito: apri il codice con un IDE (Thonny o VS Code) e osserva le variabili passo passo.

🎯 TEST INTERATTIVO – Sei un vero debugger?

🧩 1. Quale tipo di errore viene generato da questo codice?
print("Ciao
Errore sintattico
Errore logico
Errore di runtime
🔍 2. Cosa indica un errore “IndexError: list index out of range”?
Una variabile non è definita
Si accede a un elemento che non esiste nella lista
Una funzione non è stata chiamata correttamente
🧠 3. In quale caso serve usare il debugger?
Quando il codice gira ma dà risultati inattesi
Quando non si conosce il nome di una libreria
Quando si scrive pseudocodice

💡 Suggerimento finale:
Quando fai debugging, non inseguire l’errore: *fermati, osserva, descrivi.* Ogni errore è un indizio!

#Debugging #Python #Coding #DidatticaDigitale

mercoledì 22 gennaio 2025

Corso di Programmazione Strutturata e OOP: 3 Ereditarietà incapsulamento polimorfismo


Ereditarietà, Incapsulamento, Polimorfismo

📚 Contenuti teorici


🔹 1. Ereditarietà

È il meccanismo per cui una classe figlia (o derivata) può ereditare attributi e metodi da una classe madre (o base).

Esempio semplice in Python:

class Veicolo:
    def __init__(self, marca):
        self.marca = marca

    def accendi_motore(self):
        print("Motore acceso")

class Auto(Veicolo):  # Auto eredita da Veicolo
    def apri_portiere(self):
        print("Portiere aperte")

mia_auto = Auto("Fiat")
mia_auto.accendi_motore()   # Metodo ereditato
mia_auto.apri_portiere()    # Metodo della classe Auto

🧩 Osservazione: Auto eredita tutto da Veicolo ma può aggiungere comportamenti nuovi o sovrascrivere quelli esistenti.


🔹 2. Incapsulamento

Significa nascondere i dettagli interni e proteggere i dati usando modificatori di accesso e metodi per leggere/scrivere valori.

Esempio in Python con getter e setter:

class ContoBancario:
    def __init__(self):
        self.__saldo = 0  # Attributo privato

    def deposita(self, importo):
        if importo > 0:
            self.__saldo += importo

    def get_saldo(self):
        return self.__saldo

conto = ContoBancario()
conto.deposita(100)
print(conto.get_saldo())  # Accesso controllato

🔐 Nota: L’attributo __saldo è privato, accessibile solo tramite i metodi pubblici. Questo è l’incapsulamento.


🔹 3. Polimorfismo

Con il polimorfismo, più classi possono usare lo stesso nome di metodo, ma con comportamenti diversi.

Esempio con metodo muoviti() sovrascritto:

class Veicolo:
    def muoviti(self):
        print("Il veicolo si muove")

class Bicicletta(Veicolo):
    def muoviti(self):
        print("La bicicletta pedala")

class Auto(Veicolo):
    def muoviti(self):
        print("L'auto accelera")

# Polimorfismo:
veicoli = [Bicicletta(), Auto()]
for v in veicoli:
    v.muoviti()  # Comportamento specifico della sottoclasse

👥 Osservazione: Lo stesso metodo muoviti() si comporta diversamente in base al tipo di oggetto.


⚙️ 4. Perché sono importanti questi concetti

  • Modularità: il codice è organizzato meglio.
  • Riutilizzabilità: si scrive meno codice duplicato.
  • Flessibilità: si possono cambiare singole parti senza riscrivere tutto.
  • Manutenibilità: più facile da leggere e modificare.

🧪 Attività pratiche


1. Crea una gerarchia di classi

Obiettivo: progettare classi che sfruttano ereditarietà.

Esempio:

class Animale:
    def parla(self):
        print("L’animale fa un suono")

class Cane(Animale):
    def parla(self):
        print("Il cane abbaia")

class Gatto(Animale):
    def parla(self):
        print("Il gatto miagola")

animali = [Cane(), Gatto()]
for a in animali:
    a.parla()

🧠 Sfida: aggiungi una terza sottoclasse (Es. Mucca) che implementa parla().


2. Incapsula gli attributi

Crea una classe Studente con nome e voto. Proteggi il voto e usa metodi per modificarlo solo se il valore è compreso tra 0 e 10.

class Studente:
    def __init__(self, nome):
        self.nome = nome
        self.__voto = 0

    def set_voto(self, valore):
        if 0 <= valore <= 10:
            self.__voto = valore

    def get_voto(self):
        return self.__voto

3. Polimorfismo in azione

Scrivi una funzione saluta(animal) che chiama parla() su qualsiasi tipo di animale.

def saluta(animal):
    animal.parla()

saluta(Cane())   # "Il cane abbaia"
saluta(Gatto())  # "Il gatto miagola"

Test di verifica


✍️ Domande a risposta multipla

1. Qual è lo scopo dell’incapsulamento? A. Accelerare il codice
B. Proteggere i dati → ✅
C. Rendere il codice più lungo
D. Fare debug

2. Quale simbolo in Python indica un attributo privato?
A. #
B. *
C. __ → ✅
D. @

3. Il polimorfismo permette di...
A. Scrivere funzioni molto complesse
B. Usare lo stesso metodo in più modi → ✅
C. Copiare classi
D. Moltiplicare variabili


🤖 Quiz interattivo a completamento

Completa il metodo parla nella classe Gatto per far stampare “Miagolio!”

class Gatto(Animale):
    def parla(self):
        ____________

Soluzione: print("Miagolio!")


🔄 Attività di riepilogo

🎲 Gioco: Chi eredita cosa?

  • Mostra una lista di metodi e classi.
  • Chiedi: “Quali classi hanno accesso al metodo X?”

🧩 Puzzle OOP:

  • Dai istruzioni mischiate (metodi, classi, relazioni).
  • Gli studenti devono ricostruire la gerarchia.

martedì 21 gennaio 2025

Corso di Programmazione Strutturata e OOP: 2 introduzione alla programmazione ad oggetti (OOP)

👩‍💻 Oggetti, classi e metodi
 introduzione alla programmazione ad oggetti (OOP)

📌 Concetti chiave

🔹 Il paradigma a oggetti

La programmazione a oggetti (OOP, Object-Oriented Programming) è un paradigma che organizza il codice attorno a entità chiamate oggetti.
Un oggetto è un’astrazione del mondo reale che racchiude dati (stato) e comportamenti (azioni) in un’unica unità coerente.

👉 In altre parole, un oggetto può essere visto come una “cosa” autonoma capace di interagire con altre cose.


🔹 Perché la OOP

Rispetto al modello procedurale, in cui i dati e le funzioni sono separati, la OOP presenta diversi vantaggi:

  • Organizzazione → il codice è più leggibile e strutturato.
  • Riusabilità → le classi possono essere riutilizzate in più progetti.
  • Manutenibilità → è più facile aggiornare o correggere una parte del sistema senza stravolgere tutto il resto.
  • Astrazione → permette di modellare problemi complessi in modo naturale.

🔹 Procedurale vs OOP

Paradigma Procedurale Paradigma a Oggetti (OOP)
Dati e funzioni separati Dati e metodi integrati in oggetti
Programma come sequenza di istruzioni Programma come interazione tra oggetti
Riutilizzo limitato Elevato riutilizzo grazie a classi e ereditarietà

🔹 Classi e istanze

  • Una classe è un modello, una sorta di “stampo” per creare oggetti.
  • Un’istanza è un oggetto concreto creato da una classe.

Esempio:

class Animale:
    pass

cane = Animale()  # istanza della classe Animale

🔹 Attributi e metodi

  • Attributi → variabili che descrivono le caratteristiche di un oggetto.
  • Metodi → funzioni definite all’interno della classe, che descrivono i comportamenti dell’oggetto.

Esempio:

class Animale:
    def __init__(self, nome, specie, suono):
        self.nome = nome        # attributo
        self.specie = specie    # attributo
        self.suono = suono      # attributo

    def faiVerso(self):         # metodo
        return f"{self.nome} dice {self.suono}"

🧪 Attività pratiche

1️⃣ Classe Animale

Definisci una classe con attributi e metodi, poi crea diverse istanze.

class Animale:
    def __init__(self, nome, specie, suono):
        self.nome = nome
        self.specie = specie
        self.suono = suono

    def faiVerso(self):
        return f"{self.nome} ({self.specie}) dice: {self.suono}"

# istanze
cane = Animale("Fido", "Cane", "bau")
gatto = Animale("Micio", "Gatto", "miao")
mucca = Animale("Bianchina", "Mucca", "muu")

print(cane.faiVerso())
print(gatto.faiVerso())
print(mucca.faiVerso())

2️⃣ Interazione tra oggetti

Facciamo interagire due classi: Animale e Giocattolo.

class Giocattolo:
    def __init__(self, nome):
        self.nome = nome

    def usatoDa(self, animale):
        return f"{animale.nome} gioca con {self.nome}"

palla = Giocattolo("palla")
print(palla.usatoDa(cane))  # Fido gioca con palla

3️⃣ Mondo reale

Modelliamo un concetto più vicino alla vita quotidiana: Studente.

class Studente:
    def __init__(self, nome, eta, classe):
        self.nome = nome
        self.eta = eta
        self.classe = classe

    def studia(self, materia):
        return f"{self.nome} sta studiando {materia}"

    def sostieneEsame(self, materia):
        return f"{self.nome} ha sostenuto l’esame di {materia}"

alunno = Studente("Luca", 20, "3A")
print(alunno.studia("matematica"))
print(alunno.sostieneEsame("fisica"))

Altri esempi possibili:

  • Libro con titolo, autore, numero di pagine, metodo leggi().
  • ContoBancario con saldo, metodi deposita(), preleva().

🔍 Riflessione critica

La OOP non è solo una tecnica, ma un modo di pensare.
Modellare un sistema in termini di oggetti significa avvicinare la logica del software a quella del mondo reale. Tuttavia:

  • Non sempre è il paradigma migliore (per esempio, nei programmi molto semplici la OOP può risultare eccessiva).
  • Richiede disciplina e progettazione: una cattiva modellazione porta a codice complesso e difficile da mantenere.
  • È stata rivoluzionaria, ma oggi si combina con altri paradigmi (funzionale, reattivo, declarativo) per rispondere alla complessità crescente del software moderno.


📋 Test di verifica
1. Cosa rappresenta una classe nella OOP?
A) Una funzione specifica
B) Un tipo di dato primitivo
C) Un modello per creare oggetti ✅

2. Quale tra questi è un esempio di attributo?
A) studia()
B) nome
C) return

3. Quale tra queste è una differenza tra OOP e programmazione procedurale?
A) Nella OOP non esistono funzioni
B) La OOP separa dati e comportamenti
C) La OOP racchiude dati e metodi negli oggetti ✅

4. Se creo un oggetto “pippo = Animale('Pippo', 'Pappagallo', 'ciao')”, cosa rappresenta “pippo”?
A) Una classe
B) Un metodo
C) Un’istanza ✅

5. Cosa fa il metodo __init__?
A) È un costruttore, inizializza gli oggetti ✅
B) Elimina una classe
C) Chiude il programma

🔎 Risposte corrette: 1C – 2B – 3C – 4C – 5A 🎯 Obiettivo didattico:
Acquisire i concetti base della programmazione orientata agli oggetti attraverso esempi concreti, simulazioni ed esercizi. 💬 Suggerimento:
Per stimolare la riflessione, chiedi agli studenti di inventare una propria classe originale (es. Videogioco, Pianeta, Ingrediente) e mostrarne attributi e metodi in un disegno o schema.

lunedì 20 gennaio 2025

Corso di Programmazione Strutturata e OOP: 1 modelli e applicazioni

📖 Programmazione strutturata:
modelli e applicazioni

🎯 Obiettivo generale

La programmazione strutturata è una delle basi fondamentali dell’informatica. Il suo obiettivo è fornire un insieme di regole e buone pratiche che permettano di scrivere programmi chiari, leggibili e manutenibili nel tempo. Comprendere questo approccio significa imparare a progettare software che non solo funzioni, ma che possa essere facilmente compreso, corretto ed esteso anche da altri programmatori.


📚 Contenuti

🔹 Cos’è la programmazione strutturata

Negli anni ’60 e ’70, quando i programmi diventavano sempre più grandi e complessi, nacque l’esigenza di imporre ordine e rigore alla scrittura del codice. La programmazione strutturata è stata la risposta a questo bisogno: un paradigma che riduce la complessità tramite regole semplici e universali.

I tre costrutti fondamentali sono:

  1. Sequenza

    • Le istruzioni vengono eseguite una dopo l’altra, in ordine cronologico.
    • È il flusso “naturale” del programma, come leggere una ricetta passo dopo passo.
    • Esempio in C:
      int a = 5;
      int b = 10;
      int somma = a + b; // eseguito dopo le due assegnazioni
      
  2. Selezione

    • Permette di scegliere un percorso alternativo in base a una condizione.
    • Tipici costrutti: if/else, switch.
    • Esempio in Python:
      x = 7
      if x > 0:
          print("Positivo")
      else:
          print("Negativo o zero")
      
  3. Iterazione

    • Ripete un blocco di istruzioni fino al verificarsi di una condizione.
    • Tipici costrutti: for, while, do while.
    • Esempio in Java:
      for(int i=0; i<5; i++){
          System.out.println("Ciclo numero " + i);
      }
      

👉 Con questi soli tre strumenti, qualsiasi algoritmo può essere espresso senza bisogno di salti arbitrari (goto), che rendono il codice difficile da leggere e mantenere.


🔹 Suddivisione del programma in moduli e sottoprogrammi

Un programma complesso non dovrebbe mai essere affrontato come un unico blocco monolitico. La decomposizione è il principio guida:

  • Modulo: parte indipendente del programma con un compito preciso. Può essere pensato come un “pezzo di macchina” che svolge una funzione specifica (es. gestione file, calcolo matematico).
  • Sottoprogramma: una funzione o procedura che realizza un’operazione riutilizzabile.

Esempio in C (uso di funzione come sottoprogramma):

int somma(int a, int b){
    return a + b;
}

int main(){
    int risultato = somma(5, 7);
    printf("%d", risultato);
}

Vantaggi:

  • Riutilizzabilità: lo stesso sottoprogramma può essere richiamato più volte.
  • Manutenibilità: se serve una modifica, basta agire nel punto centrale.
  • Chiarezza logica: ogni parte ha un compito ben definito.

🔹 Buone pratiche di scrittura del codice

Scrivere codice “che funziona” non basta: deve anche essere leggibile e mantenibile. Alcune regole fondamentali:

  1. Indentazione coerente
    Aiuta a visualizzare immediatamente le strutture logiche (cicli, condizioni).

    for i in range(5):
        if i % 2 == 0:
            print(i, "pari")
    
  2. Commenti chiari
    Non servono a ripetere ovvietà, ma a spiegare perché si fa qualcosa.

    // Calcola la media dei voti inseriti
    double media = somma / numeroVoti;
    
  3. Nomenclatura significativa
    Variabili e funzioni devono avere nomi parlanti:

    double calcolaMedia(double somma, int numero){
        return somma / numero;
    }
    
  4. Principio DRY (Don’t Repeat Yourself)
    Evitare duplicazioni di codice, creando funzioni riutilizzabili. La ridondanza aumenta il rischio di errori e rende il software più difficile da mantenere.


🛠️ Applicazioni pratiche

La programmazione strutturata è alla base di quasi tutti i linguaggi moderni (C, Java, Python, ecc.). Alcuni esempi di applicazione:

  • Calcolatori semplici (uso di sequenza, funzioni matematiche).
  • Gestione di dati (input da tastiera, selezione tramite condizioni).
  • Cicli di simulazione (iterazioni per testare scenari).
  • Progettazione modulare (programmi suddivisi in librerie e funzioni).

✅ In sintesi, la programmazione strutturata insegna a pensare in modo ordinato:

  • scomporre i problemi,
  • scegliere strutture logiche semplici,
  • scrivere codice leggibile e robusto.

È il primo passo verso lo sviluppo software professionale e costituisce la base su cui si innestano paradigmi più complessi, come la programmazione orientata agli oggetti o la programmazione funzionale.

🎯 Attività pratiche

✏️ Attività 1 – Ristruttura il codice

Consegna uno spezzone di codice scritto in modo confuso e chiedi di:

  1. Correggere l’indentazione.
  2. Rinominare variabili in modo più significativo.
  3. Inserire commenti esplicativi.

🔧 Esempio prima:

a=10
b=20
if a>b:
print("a maggiore")
else:
print("b maggiore")

Esempio dopo:

# Confronta due numeri e stampa il maggiore
num1 = 10
num2 = 20

if num1 > num2:
    print("num1 è maggiore")
else:
    print("num2 è maggiore")

🧩 Attività 2 – Costruzione di mini-programmi modulati

Progetta un semplice programma a scelta (es. calcolo media voti, convertitore di temperature, somma di numeri pari...) usando almeno:

  • 1 struttura di selezione
  • 1 ciclo
  • 1 funzione

Esempio:
Funzione che calcola se un numero è primo
(utilizza def, for, if, return)


🧠 Attività 3 – Decomposizione logica di un problema

Dai un problema reale (es. organizzare una giornata scolastica, cucinare una ricetta, prenotare un volo) e chiedi di:

  • Identificare le azioni in sequenza
  • Dove ci sono scelte
  • Dove ci sono ripetizioni

Esempio: “Organizza la giornata di scuola”

  • Sequenza: svegliarsi, fare colazione, vestirsi
  • Selezione: se piove, prendere l’ombrello
  • Iterazione: per ogni ora scolastica, seguire la lezione

Test di verifica finale

Domande a scelta multipla

  1. Quale delle seguenti NON è una struttura base della programmazione strutturata?
    a) Sequenza
    b) Ricorsione
    c) Iterazione
    d) Selezione

  2. Cosa si intende per "modulo" in un programma?
    a) Una parte casuale del codice
    b) Una sezione che stampa su schermo
    c) Un blocco indipendente con funzione specifica
    d) Una struttura ciclica

  3. Qual è lo scopo dei commenti in un programma?
    a) Velocizzare l’esecuzione
    b) Rendere il codice più leggibile
    c) Salvare il codice automaticamente
    d) Impedire errori di sintassi

  4. Cosa significa l'acronimo DRY?
    a) Don’t Repeat Yourself
    b) Do Repeat Yourself
    c) Don’t Run Yet
    d) Develop Recent YAML

  5. Quale tra questi è un buon esempio di nome di variabile?
    a) a1
    b) xz3
    c) contatoreStudenti
    d) 123nome


Esercizio aperto

Scrivi un semplice programma (in pseudocodice o Python) che:

  • Chieda all’utente tre numeri
  • Calcoli la media
  • Stabilisca se è maggiore di 10
  • Restituisca un messaggio coerente

📝 Soluzioni test

  1. b) Ricorsione
  2. c) Un blocco indipendente con funzione specifica
  3. b) Rendere il codice più leggibile
  4. a) Don’t Repeat Yourself
  5. c) contatoreStudenti



domenica 19 gennaio 2025

Corso Imparare a Programmare: 7 Il linguaggio Python


🐍 Il linguaggio Python

🎯 Obiettivi

  • Imparare a scrivere codice in Python in modo semplice e pratico
  • Acquisire competenze fondamentali di logica computazionale e problem solving
  • Realizzare progetti pratici e divertenti

📚 Contenuti del Modulo

1. 🔍 Cos’è Python e perché usarlo

  • Linguaggio semplice e leggibile
  • Usato in tutto il mondo: scuola, ricerca, aziende
  • Ottimo per iniziare grazie alla sua sintassi "umana"

2. ✏️ Sintassi base

  • Stampa a video: print("Ciao mondo!")
  • Input dell’utente: nome = input("Come ti chiami? ")
  • Variabili e operatori:
    a = 5
    b = 3
    somma = a + b
    print(somma)
    

3. 🔁 Condizioni e cicli

  • if, elif, else
  • while, for
    for i in range(5):
        print("Ripetizione", i)
    

4. ⚙️ Funzioni

  • Definizione e uso:
    def saluta(nome):
        print("Ciao", nome)
    
    saluta("Luca")
    

🛠️ Attività guidate

📄 1. Il tuo primo programma: "Ciao mondo!"

print("Ciao mondo!")

🧠 Domanda: cosa fa questa riga di codice?
✍️ Esercizio: personalizza il messaggio con il tuo nome.


🎲 2. Programmare un quiz interattivo

print("Quiz: quanto fa 3 + 4?")
risposta = input("Rispondi: ")
if risposta == "7":
    print("Esatto!")
else:
    print("Risposta sbagliata.")

✍️ Esercizio: crea un quiz con 3 domande. Assegna un punteggio per ogni risposta giusta. Alla fine stampa il totale.


🧠 3. Sfida finale – Mini App “Crea la tua storia”

👾 Crea una mini-app che chiede all’utente personaggi, luogo e oggetto, e genera una storia casuale.

🧪 Esempio:

nome = input("Nome del protagonista: ")
luogo = input("Dove si trova? ")
oggetto = input("Un oggetto misterioso: ")

print(f"{nome} si trovava in {luogo} quando trovò un {oggetto} magico!")

✍️ Sfida extra: aggiungi una scelta (if/else) che cambia la fine della storia.


🎓 Test finale – 6 domande a scelta multipla

1. Cosa fa input() in Python?
A) Esegue un calcolo
B) Scrive un messaggio
C) Chiede un valore all’utente ✅

2. Quale simbolo si usa per l’addizione?
A) +
B) *
C) -

3. Cosa fa questo codice?

for i in range(3):
    print("Ciao")

A) Stampa “Ciao” una volta
B) Stampa “Ciao” tre volte ✅
C) Errore

4. Cosa restituisce questa funzione?

def somma(a, b):
    return a + b

A) Niente
B) La differenza
C) La somma di a e b

5. Come si scrive un commento in Python?
A) // commento
B) # commento
C) /* commento */

6. Cosa fa print("5" + "2")?
A) Somma i numeri
B) Stampa 7
C) Stampa 52 ✅


🧰 Materiali extra

  • PDF scheda: "I primi 10 comandi Python da ricordare"
  • File .py con esercizi da modificare
  • Quiz su Google Moduli per esercitazione individuale

💬 Discussione finale

“Scrivere codice è come costruire con i mattoncini LEGO: basta un blocco alla volta.”

👥 Parliamone insieme:

  • Cosa ti è piaciuto di più?
  • Hai trovato qualche difficoltà?
  • Quale app ti piacerebbe saper creare in futuro?

venerdì 17 gennaio 2025

Corso Imparare a Programmare: 6 Funzioni e moduli


🧩 Funzioni e Moduli – Imparare a organizzare il codice

Le funzioni sono blocchi riutilizzabili di codice, fondamentali per scrivere programmi ordinati, leggibili e modulari. Suddividere un compito complesso in più funzioni è come spezzare un puzzle in pezzi più semplici: ogni funzione ha un ruolo specifico.

📌 Cos'è una funzione?

Una funzione è un’istruzione programmata che esegue un compito preciso. Può ricevere parametri in ingresso e restituire un valore di ritorno.

def saluta(nome):
    return "Ciao " + nome

print(saluta("Luca"))  # Output: Ciao Luca

🔁 Perché modularizzare?

  • ✅ Favorisce il riuso del codice
  • ✅ Rende il programma più leggibile
  • ✅ Facilita la manutenzione
  • ✅ Permette a più persone di collaborare sullo stesso progetto

🧰 Moduli e librerie

I moduli sono file Python (o blocchi Scratch) che contengono funzioni, variabili o classi pronte all’uso. Le librerie sono collezioni di moduli che risolvono problemi comuni: matematica, grafica, AI, web...

import math

print(math.sqrt(25))  # Output: 5.0

🛠️ Attività didattiche

  • ✂️ Suddividi un’attività complessa (es: calcolare la media degli studenti e stampare i risultati) in più funzioni: input, calcolo, stampa
  • 🧱 Scratch: crea un blocco personalizzato “saluta_nome” che prende un nome e dice “Ciao + nome”
  • 🐍 Python: scrivi una funzione calcola_media(lista_voti) che restituisce la media

🎯 Obiettivo del modulo

Capire come scomporre problemi e creare strutture di codice ordinate e logiche.


🧪 Quiz interattivo – Quanto hai capito?

  1. ❓ Cosa fa una funzione?




  2. ❓ Cosa sono i parametri?




  3. ❓ Cosa si usa per accedere a funzioni già pronte in Python?



Punteggio: 0/3

🧵 Estensione facoltativa

Per chi vuole approfondire: costruisci un modulo personale in Python con almeno 3 funzioni e usalo in un programma principale. Salva il file come mio_modulo.py e richiamalo con import mio_modulo.

giovedì 16 gennaio 2025

Corso Imparare a Programmare: 5 Istruzioni condizionali e cicli


Istruzioni condizionali e cicli

🔍 Contenuti:

  • Condizioni (if, else): imparare a far prendere decisioni al computer.
  • Cicli (for, while): dire al computer di ripetere operazioni automaticamente.
  • Operatori relazionali e logici: confrontare numeri, verificare condizioni.
  • Esempi dal mondo reale: come funzionano i semafori, gli sportelli automatici o i videogiochi grazie a queste strutture.

🧠 Approfondimento:

Le istruzioni condizionali e i cicli sono tra i concetti più importanti nella programmazione. Una condizione permette di eseguire un blocco di istruzioni solo se si verifica una certa situazione (ad esempio: "Se la porta è chiusa, suona il campanello"). I cicli, invece, permettono di ripetere un’azione più volte (come contare da 1 a 10 o stampare una frase dieci volte).

Con esempi tratti dalla vita quotidiana – come i semafori programmati con condizioni logiche – si può rendere più comprensibile anche ai più piccoli come i computer "pensano".

🧩 Attività proposte:

  • Crea un semaforo logico con cartoncini colorati per simulare una condizione (es: se il pedone preme il pulsante → diventa verde).
  • Storia interattiva condizionale: usa Scratch o un semplice editor di codice per creare una narrazione che cambia in base alle scelte dell’utente.
  • Loop visivi e giochi: costruisci una danza ripetitiva (ciclo) per un personaggio animato.

🎯 Obiettivi Didattici:

  • Comprendere come funzionano le scelte e le ripetizioni nei programmi.
  • Collegare concetti logici ad attività concrete e ludiche.
  • Realizzare semplici programmi interattivi con condizioni e cicli.

🧪 Test interattivo – Prova le tue conoscenze!

mercoledì 15 gennaio 2025

Corso Imparare a Programmare: 4 Variabili costanti e tipi di dato

 


🎓 Variabili, costanti e tipi di dato

🔍 Cosa sono le variabili? Le variabili sono “contenitori” che possono cambiare valore nel tempo. Le costanti, invece, sono contenitori il cui valore resta fisso.

📦 Tipi di dati: In Python (e nella maggior parte dei linguaggi), i tipi base includono:

  • Numeri (int, float)
  • Stringhe (testi tra virgolette)
  • Booleani (vero o falso)

🧑‍💻 Dichiarazione e uso: Dichiarare una variabile è semplice: basta darle un nome e assegnarle un valore. Esempio:
x = 5
nome = "Mario"
acceso = True

✏️ Attività consigliate:

  • Simulare con post-it il cambio di valore di una variabile
  • Scrivere un piccolo script in Python o Scratch per aggiornare valori
  • Giocare con il test interattivo qui sotto ⬇️

🧠 Quiz interattivo: Indovina il tipo di dato!

Domanda 1: Quale tipo di dato è "ciao"?



Domanda 2: Che tipo è True?



Domanda 3: Se scrivo x = 3.14, x è:



martedì 14 gennaio 2025

Corso Imparare a Programmare: 3 Algoritmi e diagrammi di flusso

Algoritmi e Diagrammi di Flusso

Obiettivo: Comprendere cos'è un algoritmo, come si struttura, come si rappresenta visivamente con i diagrammi di flusso e come usarli nella risoluzione di problemi.

1) Cos’è un algoritmo?

Un algoritmo è una sequenza finita e ordinata di istruzioni che, partendo da un input, permette di ottenere un risultato (output). È la “ricetta” per risolvere un problema.

✅ Esempio: Preparare una tazza di tè

  • Prendi una tazza
  • Metti una bustina di tè
  • Versa acqua calda
  • Aspetta 3 minuti
  • Rimuovi la bustina
  • Aggiungi zucchero se vuoi

2) Tipi di istruzioni

  • Sequenza: le istruzioni sono eseguite una dopo l’altra.
    Es.: vai a scuola → entra in aula → accendi il computer
  • Scelta (condizione): si verifica una condizione per decidere cosa fare.
    Es.: “Se piove, prendi l’ombrello”
  • Ripetizione (loop): si ripete un’azione finché non si verifica una condizione.
    Es.: “Continua a mescolare finché la crema non si addensa”

3) Diagrammi di flusso

I diagrammi di flusso sono rappresentazioni grafiche degli algoritmi, utilizzando simboli standard per indicare processi, decisioni e flussi.

🧷 Simboli principali:

SimboloNomeSignificato
🔷Inizio/FineIndica l’inizio o la fine del diagramma
🟥ProcessoUn’azione o istruzione da eseguire
🔺DecisioneUna domanda con risposta sì/no o vero/falso
🔽Input/OutputInserimento o stampa di dati

💡 Esempio 1 – Preparare un panino

Algoritmo:

  • Prendi due fette di pane
  • Spalma la maionese su una fetta
  • Metti una fetta di prosciutto
  • Chiudi il panino con la seconda fetta
  • Mangia

Diagramma di flusso (testuale):

[Inizio]
   |
[Prendi due fette di pane]
   |
[Spalma maionese su una fetta]
   |
[Metti prosciutto su una fetta]
   |
[Chiudi il panino]
   |
[Mangia]
   |
[Fine]

4) Attività pratiche

  1. Scrivi il tuo algoritmo: scegli un'attività quotidiana e scrivi le istruzioni passo-passo come fosse un robot.
  2. Converti in diagramma: usa i simboli standard per disegnare il diagramma di flusso.
  3. Gioco "Robot su Griglia": crea una griglia 5x5, posiziona un robot e un obiettivo, scrivi un algoritmo con comandi tipo "avanza", "gira a sinistra", "vai avanti di 2" e verifica se il robot arriva a destinazione.

5) Esercizi e Quiz

📘 Quiz 1 – Vero o Falso

  • Un algoritmo può avere istruzioni in disordine. ❌
  • Una ripetizione serve a fare qualcosa più volte. ✅
  • Nei diagrammi di flusso, il rombo rappresenta un input. ❌

✏️ Quiz 2 – Scelta multipla

Cosa rappresenta il simbolo 🔺 nei diagrammi di flusso?

  • A) Una stampa a video
  • B) Una decisione ✅
  • C) Una pausa
  • D) Un errore

🧠 Esercizio guidato – La merenda automatica

Scrivi un algoritmo e crea il diagramma di flusso per questa attività:

"Se hai fame, prendi uno snack. Se non hai fame, bevi un bicchiere d'acqua."

6) Obiettivi finali del modulo

  • Comprendere la logica degli algoritmi
  • Saper scomporre un’attività in fasi elementari
  • Imparare a rappresentare graficamente una procedura con il diagramma di flusso
  • Potenziare il pensiero logico e la risoluzione di problemi





lunedì 13 gennaio 2025

Corso Imparare a Programmare: 2 La macchina di Von Neumann e il modello input–elaborazione–output

📘 La macchina di Von Neumann e il modello I–E-O

Immagina di tornare nel 1945: John von Neumann mette su carta un’idea che cambierà per sempre la nostra vita. L’intuizione è tanto semplice quanto geniale: mettere nello stesso posto sia i dati sia il programma che li elabora. In altre parole, non più macchine rigide che sanno fare solo una cosa, ma un’architettura flessibile, capace di eseguire qualsiasi compito basti scriverne le istruzioni. È la nascita del concetto di stored program e della cosiddetta macchina di Von Neumann, la madre di tutti i computer moderni.

Come funziona, in pratica? Pensa a un piccolo teatro. Sulla scena troviamo gli attori principali: la CPU, che è un po’ il regista, divisa in due parti. Da un lato la Control Unit, che dà ordini e scandisce i tempi come un direttore d’orchestra. Dall’altro la ALU, che invece fa il lavoro sporco: addizioni, confronti logici, calcoli di ogni tipo. Attorno a loro c’è la memoria, dove dormono dati e istruzioni, pronti a essere chiamati in scena. Ai margini ci sono le comparse fondamentali: tastiere, microfoni, sensori che portano input, e monitor, stampanti o altoparlanti che restituiscono l’output.

Il cuore di tutto, però, batte in tre mosse ripetute senza sosta: Fetch, Decode, Execute. La CPU prende un’istruzione dalla memoria, la interpreta e poi la esegue. Finito? Si ricomincia. È un ritmo instancabile, un metronomo che oggi viaggia a miliardi di cicli al secondo.

Certo, non è tutto rose e fiori. Il fatto che dati e istruzioni passino dallo stesso “tubo” crea il famoso collo di bottiglia di Von Neumann: quando tutto deve attraversare un unico canale, i rallentamenti sono inevitabili. Negli anni si sono trovati mille trucchi per aggirarlo: cache ultraveloci, esecuzione fuori ordine, previsioni di salto. Oppure si è scelta la strada dell’architettura Harvard, che separa fisicamente memoria e bus di dati e istruzioni, così da farli correre in parallelo.

E qui entra in scena il modello più universale e intuitivo di tutti: quello Input–Elaborazione–Output (I–E–O). Funziona come una lente con cui osservare qualsiasi sistema, dal computer alla lavatrice. Qualcosa entra come input, subisce trasformazioni e regole durante l’elaborazione e infine diventa output. Ti suona familiare? Se ordini un caffè alla macchinetta, l’input sei tu che inserisci capsula e acqua, l’elaborazione è il riscaldamento e l’estrazione, l’output è il caffè fumante in tazza. E così vale per app, registratori di cassa, bancomat, semafori intelligenti: tutti si lasciano raccontare con questa piccola ma potentissima griglia logica.

Dietro questo schema così pulito, però, c’è il lavoro invisibile della macchina di Von Neumann, che legge, decodifica, esegue e conserva. È lei a garantire che il PIN venga controllato, che il percorso del navigatore sia ricalcolato se sbagli strada, che la tua foto finisca davvero online.

La bellezza è che puoi divertirti a scomporre qualsiasi azione quotidiana in I–E–O. Prova: cosa succede quando pubblichi un post? O quando metti in moto l’auto? Se ti accorgi di un “errore” (capsula non inserita, PIN errato, rete assente), ecco che hai scoperto anche le eccezioni, i momenti in cui il flusso si interrompe e bisogna gestire l’imprevisto.

In fondo, capire Von Neumann e l’I–E–O non serve solo a programmatori e ingegneri. È un modo per leggere il mondo con occhi nuovi: dietro ogni tecnologia che usiamo ogni giorno c’è lo stesso copione, la stessa danza ritmica tra input, elaborazione e output. E quando qualcuno ti dice che “la CPU esegue miliardi di istruzioni al secondo”, puoi sorridere pensando che, in realtà, sta solo recitando a velocità folle una sceneggiatura scritta nel 1945.

📌 Contenuti teorici

🔹 Cos’è la macchina di Von Neumann

L’architettura di Von Neumann (1945) è il “modello base” dei computer moderni. L’idea rivoluzionaria è programma e dati nella stessa memoria (stored-program concept). Gli ingredienti:

  • Unità di input: tastiera, mouse, microfono, fotocamera, sensori…
  • Unità di elaborazione (CPU):
    • ALU (Arithmetic Logic Unit): fa i calcoli e le operazioni logiche.
    • CU (Control Unit): dirige il traffico, coordina tutto.
  • Memoria:
    • Primaria (es. RAM): veloce, ma volatile.
    • Secondaria (es. SSD/HDD): lenta ma persistente.
  • Unità di output: monitor, stampante, altoparlanti, led, attuatori…

Schema mentale (ultra semplificato):

Input  ──►  [ CPU = CU + ALU ]  ──►  Output
             │         ▲
             ▼         │
           Memoria ◄───┘

Il ciclo Fetch–Decode–Execute (prendi-decodifica-esegui)

  1. Fetch: la CU legge dalla memoria l’istruzione puntata dal PC (Program Counter) e la carica nel IR (Instruction Register).
  2. Decode: la CU interpreta l’istruzione (che operazione? su quali dati?).
  3. Execute: l’ALU (o la stessa CU) esegue. Il risultato va in registri o memoria; il PC avanza alla prossima istruzione.

Registri chiave:

  • PC: indirizzo della prossima istruzione.
  • IR: istruzione corrente.
  • ACC/General Purpose: contenitori velocissimi per i dati.
  • MAR/MDR: indirizzo e dati in transito da/verso la memoria.

Bus e parola

  • Bus dati / indirizzi / controllo: “autostrade” interne per spostare bit e segnali.
  • Larghezza di parola (8, 16, 32, 64 bit…): quanti bit si elaborano “in un colpo solo”.

I/O: come parlano le periferiche

  • Polling: la CPU chiede continuamente “hai finito?”.
  • Interrupt: la periferica avvisa la CPU quando serve (molto meglio!).
  • DMA: trasferimenti diretti memoria↔periferica senza impegnare la CPU.

Il “collo di bottiglia” di Von Neumann

Condividere lo stesso canale memoria per dati e istruzioni può rallentare. Rimedî:

  • Cache (L1/L2/L3), prefetch, pipelining, out-of-order, branch prediction.
  • Architetture Harvard (separano memoria/Bus di istruzioni e dati) o quasi-Harvard (tipiche di microcontrollori e CPU moderne nei livelli di cache).

Von Neumann vs Harvard (in 10 secondi):

  • Von Neumann: una memoria, più semplice e flessibile.
  • Harvard: due memorie/bus separati (istruzioni/dati), maggiore parallelismo nei fetch.

🔹 Il modello Input–Elaborazione–Output (I–E–O)

È un modo di pensare qualsiasi sistema informatico (e non solo!):

  • Input: ciò che entra (dati da utente/sensori/archivi).
  • Elaborazione: operazioni, regole, algoritmi.
  • Output: risultati (schermo, attuatore, file, ricevuta…).

Vista a blocchi (con memoria di lavoro):

        ┌───────────┐
Input ─►│  ELABORA  │─► Output
        └────┬──────┘
             │
          Memoria

Pensare in I–E–O aiuta a progettare, spiegare, debuggare: dal compito di scuola a una app, fino a una lavatrice smart.


🔹 Esempi concreti (tabella rapida)

Sistema Input Elaborazione Output
Calcolatrice 2 + 2 Addizione 4
App meteo Posizione GPS Chiamata API + parsing Temperatura/Previsioni
Registratore cassa Codice prodotto Prezzo + IVA + totale Scontrino
Bancomat Carta + PIN + importo Autenticazione + verifica fondi Contanti + ricevuta
Navigatore Posizione, destinazione Calcolo percorso, ETA Mappa e istruzioni vocali
Lavatrice Programma, peso Controllo cicli, tempi, sensori Biancheria lavata
Semaforo smart Sensori traffico Logiche priorità, timer Luci semaforiche

🔧 Dalla teoria alla pratica

🧠 Esempio passo–passo (come ragiona la CPU su A = 2 + 3)

  1. Input: l’utente digita 2, +, 3.
  2. Fetch: la CPU legge l’istruzione ADD dal programma.
  3. Decode: capisce che deve sommare i contenuti dei registri/della memoria.
  4. Execute: l’ALU somma 2 e 3, produce 5.
  5. Output: visualizzazione “5” e/o memorizzazione in A.

⚙️ Dove “vive” davvero l’elaborazione

  • Software: algoritmo in linguaggio (Python, C, JavaScript…).
  • Hardware: l’ALU applica l’operazione, la CU scandisce i tempi, la memoria conserva dato e programma.

🧪 Attività suggerite (hands-on, divertenti e didattiche)

1) Scomponi un’azione quotidiana in I–E–O

Esempio – Caffè con la macchinetta

  • Input: capsula, acqua, pressione tasto.
  • Elaborazione: riscaldamento, pompaggio, estrazione.
  • Output: caffè in tazza.

Da proporre:

  • Mettere in moto l’auto.
  • Usare un bancomat.
  • Pubblicare una foto sui social.
  • Ordinare un pasto da app.
  • Avviare un ciclo di lavatrice “rapido 30’”.

Estensione: chiedi “quali controlli di errore?” (capsula non inserita, PIN errato, rete assente…): nascono le eccezioni!

2) Simulazione fisica della CPU

Materiali: fogli (dati/istruzioni), scatole (memoria/registri), post-it/frecce (bus), cronometro (clock).

  • Nomina gli studenti: PC, IR, ALU, RAM, Input, Output.
  • Metti in scena Fetch–Decode–Execute con bigliettini-istruzione (ADD, LOAD, STORE…).
  • Introduci un “interrupt” (campanella) che obbliga la CU a sospendere e servire l’I/O.

3) Laboratorio: schema I–E–O per un problema reale

Scegli uno scenario (prenotazioni del cinema / food delivery / lavatrice smart).

  • Disegna i blocchi (Input, Elaborazione, Output, Memoria).
  • Elenca le regole (es. “se la sala è piena, mostra prossimi orari”).
  • Specifica output (biglietto digitale, scontrino, notifica).

Plus: scrivi pseudocodice o un flowchart (diamanti = decisioni; rettangoli = azioni).

4) DAO: Dati–Algoritmi–Output su foglio di calcolo

  • Crea un mini “registratore di cassa”: foglio prodotti, quantità, IVA, sconto.
  • Formula l’algoritmo con funzioni (SE, SOMMA, ARROTONDA).
  • Visualizza l’output in una tabellina “Scontrino”.

5) Debug di un I–E–O

Dai un flusso con un bug (es. calcola totale senza IVA). Gli studenti devono:

  • Individuare dove (Input? Operazione? Output?)
  • Correggere e giustificare.

❗️ Equivoci comuni (e come scioglierli)

  • RAM ≠ Disco: la RAM è lavoro temporaneo, il disco è archivio.
  • CPU ≠ GPU: la CPU è “tuttofare”, la GPU fa bene molte operazioni in parallelo (grafica, AI).
  • Dati ≠ Istruzioni: nel modello Von Neumann convivono in memoria, ma non sono la stessa cosa.
  • Più GHz ≠ sempre più veloce: contano cache, core, architettura, I/O.

📝 Esercizi guidati (brevi ma intelligenti)

  1. Mappa I–E–O per “prenota posto al cinema”.
  2. Aggiungi eccezioni: carta scaduta, sala piena, connessione KO.
  3. Disegna un ciclo: “leggi input finché valido, poi elabora e stampa”.
  4. Confronta due soluzioni: Von Neumann puro vs Harvard (quando conviene un microcontrollore Harvard per una lavatrice?).

✅ Test di verifica (con risposte commentate)

1. Qual è l’unità principale di elaborazione nella macchina di Von Neumann?
A) Hard disk B) RAM C) CPU ✅ D) GPU
Commento: la CPU esegue istruzioni (ALU+CU); disco e RAM sono memorie.

2. Nel modello I–E–O, cosa rappresenta “elaborazione”?
A) Il risultato finale B) La memorizzazione dei dati C) L’operazione eseguita sul dato ✅ D) L’immissione dell’input
Commento: l’elaborazione applica regole/algoritmi ai dati in ingresso.

3. Quale dei seguenti non è un output?
A) Display di uno smartphone B) Stampante C) Tastiera ✅ D) Altoparlante
Commento: la tastiera è un dispositivo di input.

4. In un’app di navigazione GPS, quale tra questi è l’input?
A) La mappa B) La posizione dell’utente ✅ C) Il percorso suggerito D) Il tempo di arrivo stimato
Commento: posizione e destinazione sono input; percorso/ETA sono output.

5. Cosa si intende per stored-program concept?
A) Istruzioni hardwired nella CPU
B) Programma e dati condividono la stessa memoria ✅
C) Il programma è solo su disco
D) Le istruzioni sono eseguite solo dalla GPU
Commento: è la firma di Von Neumann.

6. Cos’è il ciclo Fetch–Decode–Execute?
A) Un algoritmo di ordinamento
B) La sequenza con cui la CPU legge, interpreta ed esegue istruzioni ✅
C) Un protocollo di rete
D) Un metodo di compressione
Commento: è il ritmo interno della CPU.

7. Qual è il principale limite (bottleneck) dei sistemi Von Neumann?
A) Non supportano la RAM
B) Conflitto sul canale memoria condiviso per istruzioni e dati ✅
C) Non possono stampare
D) Non usano bus
Commento: istruzioni e dati competono per lo stesso accesso alla memoria.

8. Quale tecnica riduce il collo di bottiglia?
A) Spegnere la cache
B) Usare solo RAM lenta
C) Cache e prefetch delle istruzioni ✅
D) Disattivare gli interrupt
Commento: cache/prefetch aumentano throughput verso la CPU.

9. Differenza chiave tra Harvard e Von Neumann?
A) La Harvard non ha CPU
B) La Von Neumann non usa RAM
C) Harvard separa fisicamente dati e istruzioni ✅
D) Von Neumann ha due ALU
Commento: separazione = più parallelismo nel fetch.

10. In un registratore di cassa, quale componente calcola “prezzo + IVA”?
A) RAM
B) ALU (sotto il controllo della CU) ✅
C) Disco
D) Monitor
Commento: la ALU esegue addizioni/moltiplicazioni guidata dalla CU.

11. In un sistema I–E–O, dove collochi la “validazione del PIN”?
A) Output
B) Elaborazione ✅
C) Input
D) Memoria secondaria
Commento: è una regola/controllo applicato ai dati inseriti.

12. Quale tra questi è un interrupt?
A) Un file di configurazione
B) Un segnale che sospende il flusso normale per gestire un evento esterno ✅
C) Una riga di codice di stampa
D) Un formato grafico
Commento: gli interrupt migliorano la reattività con l’I/O.


📎 Ripasso essenziale (in 6 righe)

  1. Von Neumann: CPU + Memoria unica + I/O + stored program.
  2. La CPU vive di Fetch–Decode–Execute.
  3. I–E–O è un metodo universale per descrivere sistemi.
  4. Bus: dati/indirizzi/controllo. Registri: PC, IR, ACC…
  5. Bottleneck: dati e istruzioni sullo stesso canale → cache/prefetch aiutano.
  6. Harvard separa istruzioni/dati (spesso nei microcontrollori o nelle cache moderne).


Corso Fondamenti di Informatica e Reti: 4 Architettura del computer

  ARCHITETTURA DEL COMPUTER come funziona davvero una macchina Capire un computer non significa solo saperlo accendere o aprire file: die...