Che cos'è un programma?
Un programma (o app) è un insieme finito di istruzioni che, eseguite in sequenza, permettono di elaborare i dati in ingresso per ottenere in uscita i risultati richiesti, risolvendo un determinato problema.
Dati in ingresso
Le informazioni che forniamo al programma (input)
Elaborazione
Il programma esegue le istruzioni in sequenza
Dati in uscita
I risultati prodotti dall'elaborazione (output)
🖥️ Il dispositivo che esegue le istruzioni — PC, smartphone, tablet, microcontrollore — è detto elaboratore. Esso non pensa e non ragiona: esegue le istruzioni alla massima velocità, usando solo operazioni aritmetiche e confronti logici.
Dal problema al programma
Per trasformare un problema in un programma funzionante si segue un percorso a fasi chiamato processo di formalizzazione.
L'analisi è la fase iniziale in cui si studia il problema a fondo. Si articola in tre sottofasi:
| Sottofase | Che cosa si fa | Esempio (media di 3 numeri) |
|---|---|---|
| Dati in input | Si individuano le informazioni da fornire al programma e i loro vincoli di integrità | 3 valori numerici: valore1, valore2, valore3 |
| Dati in output | Si definiscono i risultati attesi dall'elaborazione | La media aritmetica dei 3 valori |
| Relazione I/O | Si stabilisce il legame logico/matematico tra input e output | media = (valore1 + valore2 + valore3) / 3 |
Un algoritmo è un insieme finito di azioni che risolvono un determinato problema, trasformando i dati di input in dati di output attraverso le relazioni esistenti tra input e output.
È compito del programmatore definire l'algoritmo: l'elaboratore non sa ragionare, può solo eseguire le istruzioni che gli vengono fornite. Il programmatore "traduce" il proprio ragionamento in algoritmo, che poi diventa programma.
La simulazione consiste nell'eseguire virtualmente le azioni dell'algoritmo con dati di prova, per verificare che produca i risultati corretti. Se si trovano errori, si torna alla fase precedente.
| Azione | valore1 | valore2 | valore3 | media |
|---|---|---|---|---|
| Inizio | — | — | — | — |
| Inserire i tre valori | 30 | 60 | 90 | — |
| Calcolare la media | 30 | 60 | 90 | 60 |
| Visualizzare media | — | — | — | Output: 60 |
| Fine | — | — | — | — |
La codifica è la traduzione dell'algoritmo in un linguaggio di programmazione comprensibile all'elaboratore. Il risultato è il programma, che può essere caricato in memoria ed eseguito.
🐍 In linguaggio Python:
Principali linguaggi di programmazione:
- C
- C++
- Python
- Java
- JavaScript
- C#
- Scratch
Ogni linguaggio ha le proprie regole sintattiche. L'IDE (ambiente di sviluppo integrato) aiuta a scrivere, salvare ed eseguire il codice, con editor e debugger inclusi.
Le Variabili
Le variabili sono oggetti elaborati dalle istruzioni del programma. Risiedono nella memoria dell'elaboratore e corrispondono a contenitori di valori che vengono usati durante l'esecuzione. Ogni variabile ha un identificatore (nome univoco) e un valore che può cambiare nel tempo.
📦 Visualizzazione come contenitori:
Immagina ogni variabile come un cilindro graduato vuoto. All'inizio è vuoto, poi viene riempito con il valore assegnato.
▶ A inizio esecuzione
▶ Dopo l'input e il calcolo
🔑 Operazione di assegnazione
L'assegnazione inserisce un valore nel contenitore della variabile, sostituendo il valore precedente. Il simbolo usato è la freccia ←:
La variabile A riceve il valore 9. Se A conteneva già un valore, questo viene perso.
📌 Costanti
Le costanti hanno un valore assegnato a inizio programma che non cambia mai durante l'esecuzione. Es: π = 3,14 oppure f = 0,6887 (numero fisso del pentagono).
| Operazione | Istruzione | Significato |
|---|---|---|
| Assegnare un valore | A ← 9 |
Il contenitore A riceve il valore 9. Il valore precedente va perso. |
| Copiare una variabile | B ← A |
B riceve il valore attuale di A. A non cambia. |
| Incrementare | A ← A + 1 |
Si legge A, si aggiunge 1, si reinserisce il risultato in A. |
| Modificare con somma | A ← A + B |
A riceve la somma di A e B. B rimane invariato. |
| Scambiare due variabili | AUS ← A |
Si usa una variabile ausiliaria AUS per non perdere nessun valore. |
Gli Schemi di Flusso (Flowchart)
Uno schema di flusso (o diagramma a blocchi / flowchart) è una rappresentazione grafica di un algoritmo, realizzata con simboli la cui forma dipende dal tipo di azione da descrivere, collegati da frecce che indicano il flusso di esecuzione.
I flowchart permettono di visualizzare l'algoritmo in modo chiaro, standard e privo di ambiguità. Vediamo i simboli principali:
Gli Schemi di Composizione Fondamentale (SCF)
Qualsiasi algoritmo può essere costruito combinando tre tipi di strutture base, dette SCF:
Una serie di istruzioni eseguite una dopo l'altra, nell'ordine indicato.
Quando si usa: quando le operazioni si svolgono sempre nello stesso ordine, senza scelte.
In base al risultato di una condizione, si sceglie quale percorso seguire (ramo vero o ramo falso).
Quando si usa: quando ci sono scelte o situazioni alternative da gestire.
Un gruppo di istruzioni (nucleo del ciclo) viene ripetuto più volte, controllato da una condizione.
Quando si usa: quando occorre ripetere un'azione un numero noto o ignoto di volte.
Nel flowchart, la sequenza si rappresenta come una serie di blocchi collegati da frecce dall'alto verso il basso:
Analisi:
| Input | a, b |
| Output | somma |
| I/O | somma = a + b |
Algoritmo:
La selezione permette di scegliere quale percorso seguire in base al risultato di una condizione. Esistono due forme:
SE … ALLORA …
Si esegue l'azione solo se la condizione è vera. Se è falsa, non succede nulla.
SE … ALLORA … ALTRIMENTI …
Si esegue un'azione se vera, un'altra azione alternativa se falsa.
📊 Tavole di verità degli operatori booleani:
| C₁ | C₂ | C₁ AND C₂ |
|---|---|---|
| V | V | V |
| V | F | F |
| F | V | F |
| F | F | F |
| C₁ | C₂ | C₁ OR C₂ |
|---|---|---|
| V | V | V |
| V | F | V |
| F | V | V |
| F | F | F |
| C | NOT C |
|---|---|
| V | F |
| F | V |
Lo SCF di ripetizione (ciclo) rappresenta la situazione in cui una o più azioni (nucleo del ciclo) devono essere ripetute più volte. Ogni volta si valuta una condizione per decidere se continuare o fermarsi.
con contatore
Il nucleo si ripete per un numero prestabilito di volte. Il contatore tiene il conto delle ripetizioni.
(controllo a inizio)
Il blocco di controllo è all'inizio del ciclo. Se la condizione è falsa, il nucleo potrebbe non eseguirsi mai.
(controllo a fine)
Il blocco di controllo è alla fine del ciclo. Il nucleo viene sempre eseguito almeno una volta.
🔢 Tecnica del contatore
Si usa una variabile (es. cont) per contare il numero di volte in cui avviene un evento:
➕ Tecnica delle somme successive
Si usa una variabile (es. somma) per accumulare valori uno dopo l'altro:
Equivalenza tra Algoritmi
Due o più algoritmi si dicono equivalenti se, pur usando metodi risolutori diversi, ricevuti gli stessi input, forniscono in uscita gli stessi output.
⭐ Algoritmo ottimale
Tra tutti gli algoritmi equivalenti per un problema, quello che usa il minor tempo di esecuzione e il minor uso di memoria è l'algoritmo risolutore ottimale.
🌐 Algoritmo generale
Un algoritmo si dice generale quando risolve una classe di problemi simili, funzionando su più insiemi di dati diversi ma dello stesso tipo — non solo su un caso specifico.
📌 Variabile ausiliaria
Una variabile ausiliaria è una variabile temporanea usata per semplificare i calcoli o tenere traccia di un valore intermedio. Es: la variabile max usata per trovare il massimo tra n valori, aggiornata di volta in volta con il nuovo massimo rilevato.
Riepilogo — Mappa dei Concetti
Glossario rapido
| Termine | Definizione sintetica |
|---|---|
| Programma | Insieme finito di istruzioni che elabora dati in ingresso per produrre risultati in uscita |
| Elaboratore | Il dispositivo che esegue le istruzioni del programma (PC, smartphone, ecc.) |
| Analisi | Prima fase del processo di formalizzazione: si individuano input, output e relazione I/O |
| Vincolo di integrità | Condizione che i dati in input devono rispettare per essere considerati validi |
| Algoritmo | Insieme finito di azioni che trasforma dati di input in dati di output |
| Simulazione | Esecuzione "virtuale" dell'algoritmo con dati di prova per verificarne la correttezza |
| Codifica | Traduzione dell'algoritmo in un linguaggio di programmazione |
| Variabile | Contenitore in memoria con nome (identificatore) e valore modificabile |
| Costante | Come la variabile, ma il suo valore non cambia durante l'esecuzione |
| Assegnazione | Operazione che inserisce un valore in una variabile (simbolo ←) |
| Schema di flusso | Rappresentazione grafica di un algoritmo tramite simboli e frecce |
| SCF di sequenza | Struttura in cui le istruzioni si eseguono una dopo l'altra, nell'ordine |
| SCF di selezione | Struttura in cui si sceglie il percorso in base al risultato di una condizione |
| SCF di ripetizione | Struttura in cui un nucleo di istruzioni si ripete fino al verificarsi di una condizione |
| Ciclo FOR | Ciclo con contatore: il numero di ripetizioni è noto a priori |
| Ciclo Precondizionale | Il controllo è all'inizio: il nucleo potrebbe non eseguirsi mai |
| Ciclo Postcondizionale | Il controllo è alla fine: il nucleo si esegue almeno una volta |
| Equivalenza | Due algoritmi sono equivalenti se producono gli stessi output dagli stessi input |
| IDE | Ambiente di sviluppo integrato: strumento per scrivere, tradurre ed eseguire codice |
Flashcard per ripassare
Usa queste flashcard per ripetere i concetti principali: leggi la domanda, prova a rispondere da solo e poi gira la carta per controllare.