⚙️Algoritmi
definizione, esempi, diagrammi di flusso
Obiettivo della lezione: Comprendere il concetto intuitivo e formale di algoritmo, riconoscerne le caratteristiche fondamentali e capire il legame tra logica umana ed esecuzione automatica.
Spesso pensiamo agli algoritmi come a qualcosa di astratto o legato solo ai computer.
In realtà, usiamo algoritmi ogni giorno.
Un algoritmo è una sequenza ordinata e finita di passi che porta alla risoluzione di un problema o al raggiungimento di un obiettivo.
🧑🍳Una ricetta di cucina: Ha degli ingredienti (input), una serie di istruzioni in ordine preciso (elaborazione) e un piatto pronto (output).
🪑Le istruzioni per montare un mobile: Passaggi sequenziali per passare da pezzi sciolti al mobile finito.
↗️Istruzioni stradali: "Vai dritto per 200m, poi gira a destra al semaforo."
Se la ricetta dice "salare a piacere" o "cuocere per un po'", per un essere umano va bene, ma un computer andrebbe in crisi.
Per questo serve una definizione più rigorosa.
Perché una sequenza di istruzioni possa definirsi un algoritmo informatico, deve soddisfare cinque requisiti fondamentali:
Non ambiguità (Clarity): Ogni istruzione deve essere chiara e interpretabile in un solo modo.
Non sono ammesse espressioni vaghe ("un pizzico", "poco", "abbastanza").
Esecutività (Feasibility): Ogni passo deve essere concretamente eseguibile dall'esecutore (umano o macchina) con le risorse a disposizione.
Finitezza (Finiteness): L'algoritmo deve sempre terminare dopo un numero finito di passi.
Un procedimento che entra in un ciclo infinito non è un algoritmo valido.
Ingresso e Uscita (Input & Output):
Input: Può ricevere zero o più dati in ingresso.
Output: Deve produrre almeno un risultato in uscita che risponda al problema iniziale.
Genericità (Generality): L'algoritmo non deve risolvere solo un singolo caso specifico (es. 2 + 3), ma una classe intera di problemi (es. sommare due numeri generici A e B).
Caccia all'errore (Trova cosa manca):
Istruzione: "Disegna un cerchio e continua a raddoppiarne il raggio.
Domanda: È un algoritmo? (clicca per vedere la risposta)
No, manca la finitezza: non c'è una condizione di arresto.
Ogni algoritmo opera secondo il modello fondamentale dell'informatica:
Input (Dati di ingresso) → Elaborazione (Algoritmo) → Output (Risultati)
Nota bene: in inglese Elaborazione è Processing; questo spiega la P del modello I-P-O,
Esempio: Calcolare la media di due voti.
Input: Voto 1 (V_1), Voto 2 (V_2).
Elaborazione: Somma V_1 + V_2, poi dividi il risultato per 2.
Output: Media (M).
Un algoritmo è indipendente dal linguaggio di programmazione specifico.
Prima di scriverlo in codice (Java, C, Python...), lo si descrive usando strumenti di progettazione:
Linguaggio Naturale: Descrizione a parole (spesso troppo ambigua per problemi complessi).
Pseudocodice: Un finto codice che usa parole chiave semplici (INIZIO, LEGGI, SE ... ALLORA, RIPETI, FINE) per definire la logica senza preoccuparsi della sintassi rigida del linguaggio.
Diagrammi di Flusso (Flowchart): Rappresentazione grafica con blocchi standardizzati (ovali per inizio/fine, rettangoli per azioni, rombi per decisioni).
Un diagramma di flusso (o flowchart) è la visualizzazione grafica di un algoritmo.
Attraverso figure geometriche standard collegate da frecce direzionali, mostra chiaramente la sequenza delle istruzioni, i punti di decisione e il flusso di esecuzione.
I simboli fondamentali utilizzati sono:
Ovale (o Rettangolo Arrotondato): Inizio o Fine dell'algoritmo.
Parallelogramma: Operazioni di Input (lettura dati) o Output (scrittura/stampa risultati).
Rettangolo: Operazione di Elaborazione (calcoli, assegnazione di valori).
Rombo: Punto di Decisione/Selezione (condizione con uscite Vero/Falso o Sì/No).
In questo primo esempio vediamo una struttura puramente sequenziale. L'algoritmo legge tre voti, calcola la loro somma, esegue la divisione e mostra il risultato.
Inseriamo ora un punto di decisione (struttura di Selezione if/else). L'algoritmo legge un voto finale e stabilisce se la prova è superata o meno.